文字列結合&でコンパイルエラーになる理由
マクロVBAでは、&(アンパサンド)記号で文字列結合を行う事は頻繁に行われますよね。
VBEで&を記述するとき、一度くらいは赤字のコンパイルエラーになったことがあるのではないでしょうか。
なぜそれがエラーになるのか、
これらを少しく詳しく見てみましょう。
&の記述がエラーになる入力とは
hoge=fuga&piyo
これでEnterすると、

VBAの学習の初期段階で、、
文字結合&(アンパサンド)の前後には、空白を入れるように教わった人も多いのではないでしょうか。
このように&の前後に空白を入れてEnterすれば、

Enterした後は、=の前後には半角スペースが自動的に挿入されます。
これは、+=*/等の四則演算でも同じです。
自動的に、前後に半角スペースが挿入されて見やすくなります。
ではなぜ、&は自動で前後に半角スペースが挿入されないのでしょうか。
これでEnterすると、

hoge=123&piyo
これでEnterすると、

それぞれ何が違うのでしょうか。
fuga
"ABC"
123
これだけの違いだけです。
hoge=huga&"ABC"
これでEnterすると、

以上のようにいろいろなパターンで入れていって、そこからわかる事は、
つまり、
文字定数("")以外の後ろに&で文字列結合するときは、&の前にスペースが必要だという事です。
&の後ろにもスペースが必要な場合が出てきます。
hoge=fuga &haa

でもでも、
hoge=fuga &hii

こうなってくると何が何やら分からなくなってきますね。
&の前後にはスペースが必要な時がある理由
これについて再確認してみましょう。
| データ型 | 名称 | 格納できる範囲 |
| Integer | 整数型 | -32,768 ~ 32,767 |
| Long | 長整数型 | -2,147,483,648 ~ 2,147,483,647 |
| Single | 単精度浮動小数点数型 | -3.402823E38 ~ -1.401298E-45(負の値) 1.401298E-45 ~ 3.402823E38(正の値) |
| Double | 倍精度浮動小数点数型 | -1.79769313486232E308 ~ -4.94065645841247E-324(負の値) 4.94065645841247E-324 ~ 1.79769313486232E308(正の値) |
| Currency | 通貨型 | -922,337,203,685,477.5808 ~ 922,337,203,685,477.00 |
| String | 文字列型 | 最大約20億文字まで |
| Date | 日付型 | 西暦100 年1月1日~西暦9999年12月31日までの日付と時刻 |
| Byte | バイト型 | 0~255の範囲の単精度の正の数値。8 ビット(1 バイト) |
| Boolean | ブール型 | 真 (True) または偽 (False) |
| Object | オブジェクト型 | オブジェクト |
| Variant | バリアント型 | すべてのデータ |
詳しくは、以下を参照してください。
第12回.変数とデータ型(Dim)|VBA入門
そして、主要なデータ型には、型宣言文字が割り当てられています。
| 型宣言文字 | 変数の型 |
| % | Integer(整数型) |
| & | Long(長整数型) |
| $ | String(文字列型) |
| ! | Single(単精度浮動小数点型) |
| # | Double(倍精度浮動小数点型) |
| @ | Currency(通貨型) |
| ^ | Longlong(64ビット符号付き数値)※64ビットExcelのみ有効 |
詳しくは、以下を参照してください。
第13回.定数と型宣言文字(Const)|VBA入門
お気づきになりましたか、
Long(長整数型)の型宣言文字が&なのです。
従って、
123&
つまり、変数や数値定数の直後の&の前にはスペースが必要になるという事です。
この場合は、""が文字定数を表していて、その後ろに型宣言文字が来ることは無いので、
&は文字結合としてしか解釈されないということです。
hoge=fuga&&piyo
このように、&を重ねればOKという事になります。
最初の&が型宣言文字として、次の&が結合文字として解釈されます。

hoge=fuga &haa ・・・ エラー
hoge=fuga &hii ・・・ OK
この違いという事になります。
| 基数 | プレフィックス | 有効桁の値 |
| 16進数 (基数 16) | &H | 0-9、A~F |
| 8進数 (基数 8) | &O | 0-7 |
つまり、
&haa
これは、
変数としてhaaが宣言されていても、&が付いている事で16進リテラルとして解釈されてしまうという事です。
つまり、&haaは&HAA(10進の170)になってしまうという事です。
しかし、
&hii
これはiiが16進数の範囲ではないので、&が付いていても16進リテラルとしては解釈されないという事です。
&o
の後ろに、0-7が続いている場合は8進リテラルとして解釈されてしまいますので、
&o77はエラーになりますが、&o88はエラーになりません。
&の他では^(キャレット)でも同様の事がありえます
2^3、これは8ですね。
^(キャレット)はLongLong型の型定義文字としても使われています。
LongLong型なので、64ビット版Excelだけで使われています。
32版Excelでは、LongLong型そのものが存在しないので、型定義文字として^(キャレット)は使われません。
hoge=huga^0.5
これでEnterすると、

huga^
これがLongLong型として解釈されてしまう為です。

32版では、^(キャレット)は型宣言文字として認識しないので、べき乗としてしか認識されません。
つまり、
64ビット版Excelでは、&同様に、
^(キャレット)の前にはスペースを入力する必要があるという事になります。
最後に
構文エラーになる場合は、それなりの理由があります。
&の前後はスペースを入力すると覚えて、指がそれに慣れていれば問題ない事ではあります。
たまには手を止めて、ちょっと寄り道してみるのもVBAの良い勉強になるのではないでしょうか。
同じテーマ「マクロVBA技術解説」の記事
VBAを定型文で覚えよう
VBAこれだけは覚えておきたい必須基本例文10
エクセルVBAでのシート指定方法
文字列結合&でコンパイルエラーになる理由
手動計算時の注意点と再計算方法
VBAの用語について:ステートメントとは
オブジェクト変数とは何か
VBAの小数以下の演算誤差について
スピルでVBAの何が変わったか
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- 文字列結合&でコンパイルエラーになる理由
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
