「"」(ダブルクォーテーション)のエスケープ

「"」(ダブルクォーテーション)のエスケープ

恥ずかしい告白

まことに今さらながら、実は、

「"」(ダブルクォーテーション)のエスケープについて、ちゃんと理解していなかった

のである!

では、どうしていたのかというと、

そのときどきでテキトーに書いて、望む実行結果が得られるまで試行錯誤

という、

実に恥ずかしいやり方

をしていたのである!

勉強した

そこで、有名な Office TANAKA さんのサイトで勉強した。

むかーし、それこそVBAに手を染め始めた頃にも見たような気がするが、改めて見るとすっげー分かりやすく説明されていた。

曰く、

まず大原則として文字列はダブルコーテーション(")で囲む必要があります。つまり、文字列の両端は必ずダブルコーテーション(")でなければならないのです。この両端の「"」は、実際には表示されず、内側にあるのが文字列だということを示す特別な記号です。

次に、ダブルコーテーション(")を単なるの記号(文字列)として使いたいときは、
(……中略……)
「""」と2つ続けて書きます。文字列の内部でダブルコーテーション(")が2つ続いた場合には、特別な記号ではなく、「"」を単なる記号として認識してくれるのです。いわば、最初の「"」は、後の「"」に対するエスケープ文字的な働きをします。

なんと、こんなに簡単なことだったのだ!!!!!!!!

自分なりに整理すると、「"」を単なる文字列としてVBAに認識させたいときは、

  1. まず全体を「""」で括り、
  2. 文字として扱いたい「"」が出てくるごとに「"(エスケープ)"(ダブルクォーテーション)」と心の中で唱えながら入力する
    ※カッコ内は心の中の声

という手順でやれば良いわけだ。

たとえば、「"ち~んw"」とダブルクォーテーション付きで認識させたい場合は、

f:id:akashi_keirin:20180120084641j:plain

こんな風に入力することになる。

心の中で

  1. まず両サイドを「""」で括り(赤で表示した「"」)、
  2. エスケープ用の「"」(緑)と表示用の「"」(黄)を入力して、
  3. 「ち~んw」と入力して、
  4. エスケープ用の「"」と表示用の「"」を入力する、っと……。

このように唱えながら作業する癖をつけたら良いわけだ。

前回

akashi-keirin.hatenablog.com

でやったみたいに、

<td colspan=""></td>

とか、

<td rowspan="1"></td>

みたいな文字列を作りたいときは、

f:id:akashi_keirin:20180120084651j:plain

f:id:akashi_keirin:20180120084703j:plain

こんなふうにしたら良い。

練習

次のコードでやってみる。

リスト1 標準モジュール
Public Sub escapeTest()
  Debug.Print """ち~んw"""
  Debug.Print "<td colspan=""""></td>"
  Debug.Print "<td rowspan=""1""></td>"
End Sub

f:id:akashi_keirin:20180120084715j:plain

これを実行すると、

f:id:akashi_keirin:20180120084726j:plain

ほれ、うまくいった。

おわりに

やっぱり、基本は大切です。

@akashi_keirin on Twitter