“”、”””、””””、”””””、使い分けがよく分からない?
VBAで文字列を設定する場合、ダブルクォーテーションで文字列部分を表現します。
1 2 |
Dim s s = "abc" |
繰り返しになりますが、この例のabcのように文字列として扱うときはダブルクォーテーションで囲って文字列とします。
この文字列の表現の中で、ダブルクォーテーションが3つや4つ連続している表現を見ることがあります。
1 2 |
s = """abc" s = """" |
これらの書き方が分からずに、&マークを付けて連結してみたり、”””を””””にしてみたり、など試行錯誤しながら文字列を作成している場合は、たった1つのコツを覚えるだけで混乱しなくなります。
ダブルクォーテーションの書き分け
ダブルクォーテーションの書き分けは以下のようになります。
左側の”1文字 | 例:”abc文字列表現の開始 |
右側の”1文字 | 例:abc”文字列表現の終了 |
“”のみ | 空文字列を表す |
文字列内の”” | 文字列内にダブルクォーテーション1文字があることを表す |
“”” | ダブルクォーテーション1文字で始まる文字列の開始 |
“””” | ダブルクォーテーション1文字の文字列 |
問題なのは””の扱いです。
“”は2文字だけであれば空文字列ですが、文字列内にある場合はダブルクォーテーション1文字になります。
“を文字列に含める場合は、””と書いて、「この”は文字列の先頭と開始のダブルクォーテーションじゃなくて、文字列内の1文字の”です」という意味で、”を左側に添えて(1つ加えて)エスケープすることで、文字列内の”1文字として表現します。
もう一度書きます。
“”だけであれば空文字列。
文字列内の””であれば”1文字。
これさえ覚えれば、”””や””””の意味も分かります。
“””は文字列として完結していない
先の表にも書いていますが、”””は文字列の終端に達していない状態です。
1 |
s = "abc |
このように書いてあれば、右の”が無い、と分かります。
“””はそれと同じ状態です。
前述の通り、文字列内の””は”1文字を表すため、”””は、「”1文字を書いて、文字列の終わりの”をまだ書いていない」という状態になります。
そのため、”””に続いて文字列を書いて右端に”を書くことで、文字列とみなされます。
1 |
s = """abc" ' ["abc]の4文字 |
“”””は、”1文字の文字列
前述で、文字列内の””は”1文字を表すと説明しましたが、””””も同じ考え方で説明できます。
一番左の”は文字列の開始を表します。
左から2番目の”は、左から3番目の”をエスケープするためのダブルクォーテーションです。
左から3番目の”は、文字列内の文字としてダブルクォーテーションを表します。
一番右の”は、文字列の終了を表します。
こういう書き方をすると分かりやすいかもしれません。
1 2 3 |
s = """" ' ["] s = "a""A" ' [a"A] s = "abc""ABC" ' [abc"ABC] |
“””と&
こんな書き方をして、想定外な状態になったことがあるでしょうか。
1 |
s = """ & """ |
これを見て、文字列[” & “]だ、とわかるのであればもう問題ありません。
しかし、文字列[“”]、と思ったのであれば、もう1つ覚えておきましょう。
“””と書くと、続く文字も文字列に含まれる
想定外な文字列を作ってしまう原因は「文字列内の””は”1文字」ということへの理解がまだ希薄なことが原因です。
まとめ
覚えることは1つだけです。
「””が文字列内にある場合は”1文字」
これが分かれば、”””も””””も”””””も””””””も、全部理屈が分かるようになります。