web-dev-qa-db-ja.com

どのように私はvbaの文字列に二重引用符を入れるのですか?

二重引用符を含むvbaを介してセルにifステートメントを挿入したい。

これが私のコードです:

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"

二重引用符が原因で、文字列の挿入に問題があります。二重引用符を処理する方法

97
user793468

最も簡単な方法は、見積を処理するために見積を2倍にすることです。

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 

CHR(34)*を使うのを好む人もいます。

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)" 

*注:CHAR()はExcelのセル式として使用されます。セルに "= CHAR(34)"と書きますが、VBAコードではCHR()関数を使います。

151
Brain2000

別の回避策は、一時的な代替文字で文字列を構成することです。その後、REPLACEを使用して各一時文字を二重引用符に変更できます。一時的な代替文字としてチルダを使用します。

これは私が取り組んできたプロジェクトの例です。これは、セルが誤って踏まれた場合に、非常に複雑な式を修復するための小さなユーティリティルーチンです。セルに入るのは難しい公式ですが、この小さなユーティリティは即座にそれを修正します。

Sub RepairFormula()
Dim FormulaString As String

FormulaString = "=MID(CELL(~filename~,$A$1),FIND(~[~,CELL(~filename~,$A$1))+1,FIND(~]~, CELL(~filename~,$A$1))-FIND(~[~,CELL(~filename~,$A$1))-1)"
FormulaString = Replace(FormulaString, Chr(126), Chr(34)) 'this replaces every instance of the tilde with a double quote.
Range("WorkbookFileName").Formula = FormulaString

これは実際には単純なプログラミング手法ですが、VBAコードに数式を入力するのは非常に簡単です。

6
D Zeller

文字列を囲む二重引用符の内側のすべての二重引用符は、二重に変更する必要があります。例として、私はjsonファイル文字列の1つを持っていました: "delivery": "Standard"、Vba Editorでは、私はそれを "" "delivery" ":" "Standard" ""に変更しました。あなたがたくさんの似たような文字列を挿入しなければならないならば、私の提案は最初に ""の間にそれらをすべて挿入し、そしてVBAエディタで "inside into" "に置き換えます。このエラーです。

4

セルからクリップボードに数式をコピーする小さなルーチンを作成しました。これをVisual Basic Editorで簡単に貼り付けることができます。

    Public Sub CopyExcelFormulaInVBAFormat()
        Dim strFormula As String
        Dim objDataObj As Object

        '\Check that single cell is selected!
       If Selection.Cells.Count > 1 Then
            MsgBox "Select single cell only!", vbCritical
            Exit Sub
        End If

        'Check if we are not on a blank cell!
       If Len(ActiveCell.Formula) = 0 Then
            MsgBox "No Formula To Copy!", vbCritical
            Exit Sub
        End If

        'Add quotes as required in VBE
       strFormula = Chr(34) & Replace(ActiveCell.Formula, Chr(34), Chr(34) & Chr(34)) & Chr(34)

        'This is ClsID of MSFORMS Data Object
       Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        objDataObj.SetText strFormula, 1
        objDataObj.PutInClipboard
        MsgBox "VBA Format formula copied to Clipboard!", vbInformation

        Set objDataObj = Nothing

    End Sub

それはもともとChandoo.orgフォーラムの Vault Sectionに投稿されています。

2

私はtabSFの答えを好む。あなたの答えに同じことを実行する。これが私のアプローチです。

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"
2
Jobin Lopez