私は"&"はポインタであるからであると考える。
参考文献:https://excel-ubara.com/excelvba4/EXCEL_VBA_410.html
マクロVBAでは、&(アンパサンド)記号で文字列結合を行う事は頻繁に行われますよね。
VBEで&を記述するとき、一度くらいは赤字のコンパイルエラーになったことがあるのではないでしょうか。
どのように入力した時にエラーになるのか、
なぜそれがエラーになるのか、
これらを少しく詳しく見てみましょう。
&の記述がエラーになる入力とは
VBEで、以下のように入力します。
hoge=fuga&piyo
これでEnterすると、
VBA マクロ 構文エラー
このように赤字でエラーになります。
VBAの学習の初期段階で、、
文字結合&(アンパサンド)の前後には、空白を入れるように教わった人も多いのではないでしょうか。
hoge=fuga & piyo
このように&の前後に空白を入れてEnterすれば、
VBA マクロ 構文エラー
これなら問題はありませんね。
Enterした後は、=の前後には半角スペースが自動的に挿入されます。
これは、+=*/等の四則演算でも同じです。
自動的に、前後に半角スペースが挿入されて見やすくなります。
ではなぜ、&は自動で前後に半角スペースが挿入されないのでしょうか。
いえいえ、&の前後にスペースを入れなくてもエラーにならない場合もあります。
hoge="ABC"&piyo
これでEnterすると、
VBA マクロ 構文エラー
&の前後にスペースが自動的に挿入されました。
しかし、文字定数ではなく数値定数の場合、
hoge=123&piyo
これでEnterすると、
VBA マクロ 構文エラー
これはエラーになってしまいました。
それぞれ何が違うのでしょうか。
fuga
"ABC"
123
これだけの違いだけです。
では、さらに、
hoge=huga&"ABC"
これでEnterすると、
VBA マクロ 構文エラー
あれれ、エラーになりました。
以上のようにいろいろなパターンで入れていって、そこからわかる事は、
&の前が変数や数値定数だと&の前にスペースが無いとエラーになるという事です。
つまり、
文字定数("")以外の後ろに&で文字列結合するときは、&の前にスペースが必要だという事です。
さらに、いろいろなパターンで確認していくと、
&の後ろにもスペースが必要な場合が出てきます。
hoge=fuga &haa
VBA マクロ 構文エラー
&の前にスペースをちゃんと入れてもエラーになってしまいました。
でもでも、
hoge=fuga &hii
VBA マクロ 構文エラー
これなら、エラーになりません。
こうなってくると何が何やら分からなくなってきますね。