ExcelVBAの文字結合、「&」と「+」どっちが正解?“安全第一”の選び方

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!

毎日膨大なデータを扱っていると、ふとした瞬間に画面に現れる「#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冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました