「Copilot 生成AIメモ」カテゴリーアーカイブ

VBA等でのダブルクォーテーションの記述方法

ダブルクォーテーションで括ると文字列を表すが、VBAでダブルクォーテーション自体を記述するのはわかりにくい

ダブルクォーテーションのアスキーコードで記述するのと区別がつきやすい
ダブルクォーテーションは、Chr(34)

アスキーコードで記述しない場合は、””のように2つ続けると”を表す
これを、”で括って文字列として表現するには
”””” のように ”” を”で囲むので、4つ続けることになる
例 文字列内に ” を1つ含む
If Left(lineText, 1) = “””” Then は lineText の先頭が ” かどうかを判定

例 ”””Hello””” は、
“Hello”(ダブルクォーテーションで囲まれた文字列)を表す

アスキーコードを使うと以下のように記述できる VBSでも同様

If Left(lineText, 1) = Chr(34) Then

Chr(34) & “Hello” & Chr(34)

Splitの区切り文字を ”,” に指定したいときは
border = “””,”””
border = Chr(34) & “,” & Chr(34)

エクセルVBAでのCSV読み込み

データに半角のカンマが含まれる可能性がある場合は、データをダブルクォーテーションで囲んで、区切り文字としてカンマが使われる

プロンプトで指示する場合にダブルクォーテーションの指示文自体を””で囲んで文字列指示と認識してしまうことが多いので、下記のように、コード番号で指定すると正しい結果が得らやすい

Splitの区切り文字は、Chr(34) & “,” & Chr(34)
データは Chr(34)で囲まれて、カンマで区切られている
データ内に半角のカンマが含まれている可能性があるので、 Chr(34)で囲んでいる

例(現時点での応答結果で、今後は同じプロンプトでも正しい回答となっていくと思われる)

例 以下のプロンプトの応答結果は誤っていた

エクセルのVBAで、指定したパスにあるCSVファイルをシートへ取り込むコードを作成して
データは、””で囲まれています

結果は、コメントには記載されているものの、実際には下記のように通常のカンマを区切り文字に指定したコードが生成された

‘ ダブルクォーテーションで囲まれたデータを分割
values = Split(CleanCSVLine(lineText), “,”)

下記のように追加で、borderを指定する ”をアスキーコードで指定

split(CleanCSVLine(lineText), “,”)をborder = Chr(34) & “,” & Chr(34)で作成して

結果は、以下のようにレコードの最初と最後の”も正しく取り除く処理コードが生成された

‘ 区切り文字:「”,”」をChr関数で表現
border = Chr(34) & “,” & Chr(34)

‘ 最初と最後の ” を削除
If Left(lineText, 1) = “””” Then lineText = Mid(lineText, 2)
If Right(lineText, 1) = “””” Then lineText = Left(lineText, Len(lineText) – 1)

‘ “,” で分割
values = Split(lineText, border)

エクセルVBA 個人マクロでの注意点

個人マクロへVBAコードを格納して実行する時は、プロンプトに処理対象のブックを指定する


<条件>
VBAコードは、個人マクロから実行します
現在、作業しているアクティブなブックのシートを処理対象にしてください

ブックを明示しないと、ThisWorkBookのコードを生成する
※ThisWorkBookは
マクロがどのブックから実行されても、確実にマクロが含まれるブックを対象に操作する場合に使う
複数のブックを開いている場合に、間違えて別のブックに操作を行わないようにするために利用することが多い

個人マクロに登録したVBAで、ThisWorkBookを指定すると非表示にしているPersonal.xlsbブックが処理対象になってしまう

ThisWorkBook:マクロを実行しているワークブック
ActiveWorkBook:現在表示しているワークブック

例 ThisWorkbook
ThisWorkbook.Worksheets(“Sheet1”).Range(“A1”).Value = “Hello”

例 ActiveWorkbook
ActiveWorkbook.Sheets(“Sheet1”).Range(“A1″).Value = “Hello”