こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
毎日膨大なデータを扱っていると、ふとした瞬間に画面に現れる「#VALUE!」や「型不一致」のエラー……。あの文字を見ると、心臓がキュッとなりませんか?
私はなります。昔はそれが怖くて、Enterキーや実行ボタンを押すのが億劫でした。
今日は、そんな「エラー恐怖症」の人に知ってほしい、文字結合における「&(アンパサンド)」と「+(プラス)」の違いについてお話しします。
Excel関数では「&」一択でOK!
まず、普段のExcel業務(セルに数式を入れる場合)から結論を言います。
文字を繋げるときは、迷わず「&」を使ってください。
なぜなら、Excelの「+」はあくまで「足し算(計算)」をするための記号だからです。
試しに、A1セルに「A」、B1セルに「B」と入れて、「=A1+B1」と入力してみてください。エラーが表示されます。でも「=A1&B1」なら、ちゃんと「AB」と表示されますよね。
「文字は計算できない」。Excelはそう判断します。
VBAを使うときは要注意!「+」の落とし穴
さて、ここからが少し専門的な話。VBA(マクロ)を勉強し始めると、「VBAでは + でも文字結合ができる」という場面に直面します。
「じゃあ、どっちでもいいじゃん」となるんですよね。
ここが、一番の落とし穴です。
VBAでの「+」は、「数字っぽい文字」を見つけると、勝手に足し算をしてしまうというお節介な性質があります。
例えば、「10」という文字と「20」という文字を繋げて「1020」というコードを作りたいとき。
- “10” & “20” → “1020” (正解!文字として結合)
- “10” + “20” → 30 (えっ、計算しちゃった!?)

これを「演算子のオーバーロード」や「暗黙の型変換」と呼ぶのですが、予期せぬ計算ミス(バグ)の原因になります。
だからこそ、私たちがコーディングする際に目指すべきは「曖昧さをなくすこと」。
VBAでも、文字結合には「&」を使うのが鉄則です。これで「意図せず計算されてしまった!」というミスを0にできます。
【お試し用コード】
Sub CheckCalculationRisk()
Dim strA As Variant
Dim numB As Variant
' パターン1:片方がうっかり「数値」だった場合
strA = "10" ' 文字列
numB = 20 ' 数値(""で囲っていない)
Debug.Print "--- 片方が数値の場合 ---"
Debug.Print "A=" & strA & " (型:" & TypeName(strA) & ")"
Debug.Print "B=" & numB & " (型:" & TypeName(numB) & ")"
' ここで + を使うと...?
Debug.Print "結果: " & (strA + numB) ' → 30 になります!
MsgBox "【結果】" & vbCrLf & _
"""10""(文字) + 20(数値) = " & (strA + numB), vbExclamation
End Sub

出てくるメッセージは先ほど画像のようになります。
【番外編】Pythonを学ぶ人へ
もし「将来はPythonもやってみたい」と思っているなら、一つだけ頭の片隅に入れておいてください。
Pythonでは、文字結合に「+」を使います。
さっきと言ってることが違うんですが、プログラミングの世界は言語によって「方言」があります。
Pythonで「&」を使うと全く別の処理になってしまい、エラーになります。
- Excel・VBA: 安全のために &
- Python・JavaScript: 文法として +
まずはこれだけ覚えておけば大丈夫です。
Pythonの解説記事も準備中です。ご興味ある方はもう少しお待ちください。(_ _)
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント