VBAで文字列に二重引用符を付けるにはどうすればよいですか?


116

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

これが私のコードです:

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

二重引用符が原因で、文字列の挿入に問題があります。二重引用符をどのように処理しますか?


直接的な回答ではありませんが、その文字列について確信がありますか?これは循環参照であり、等号で始まっていません。
JimmyPena 2012年

@JimmyPenaこれはおそらくサンプルコードだと思います。関係なく、私は編集を提出しています
Farfromunique

回答:


182

私は最も簡単な方法は、引用符を処理するために引用符を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()関数を使用します。


28
私はグローバル変数を作成することを好みます:Public Const vbDoubleQuote As String = "" "" 'represents 1 double quote( ")Public Const vbSingleQuote As String ="' "'represents single single quote(')and it like like like this:Shell" explorer.exe "&vbDoubleQuote&sPath&vbDoubleQuote、vbNormalFocus
gicalle

@gicalleの答えは本当にきちんとしています。「単一引用符と二重引用符の数」の混乱をすべて、1つの定義に
まとめる

1
(私はVBA以外のものを使用して選択肢を持っていない時に!)私はすべてのVBAプロジェクトにグローバル定義の多くを使用し、キャリッジリターンなどのすべての一般的なものを定義する、二重引用符など
ロール

11

別の回避策は、一時的な置換文字を含む文字列を作成することです。次に、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コードに数式を入力するのが非常に簡単になります。


8

文字列を囲む二重引用符内のすべての二重引用符は、二重に変更する必要があります。例として、jsonファイル文字列の1つを使用した場合: "delivery": "Standard"、Vbaエディターでそれを "" "delivery" ":" "Standard" "に変更し、everythigが正しく機能するようにしました。多くの同様の文字列を挿入する必要がある場合、私の提案では、最初にそれらをすべて ""の間に挿入し、次にVBAエディターで "内部を" "に置き換えます。間違った場合、VBAエディターはこの行を赤で表示し、修正しますこのエラー。


5

私はtabSFの答えを好みます。あなたの答えに同じを実装します。以下は私のアプローチです

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

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セクションに投稿されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.