忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】文字列連結演算子「&」と「+」の構造的違いを攻略!

VBAで文字列を結合する際、&(アンパサンド)と +(プラス)のどちらでも繋げられるように見えます。しかし、この2つは内部の処理構造が全く異なります。データの型が混ざったときに起きるVBA特有の挙動を解き明かしましょう。

1. 問題:型が混在する場合の連結演算子の挙動

【 問題 】 下記のコードを実行した際、メッセージボックスに表示される結果の組み合わせとして正しいものはどれでしょうか?

Sub OperatorTest()
    Dim val1 As String
    Dim val2 As Integer
    
    val1 = "100"
    val2 = 200
    
    ' --- (1) & 演算子で結合 ---
    Dim result1 As String
    result1 = val1 & val2
    
    ' --- (2) + 演算子で結合 ---
    Dim result2 As String
    result2 = val1 + val2
    
    MsgBox result1 & " / " & result2
End Sub

① result1: "100200" / result2: "100200"
② result1: "100200" / result2: 型違いによるエラー(または 300)
③ result1: 300 / result2: "100200"
④ result1: 型違いによるエラー / result2: 300

2. 正解:演算子の優先順位と型変換に関する正解

正解: ② result1: "100200" / result2: 型違いによるエラー(または 300)

3. 解説:強制結合の「&」と、足し算優先の「+」

VBAにおいて、この2つの演算子は「何を目的として作られたか」という根本的な構造の設計が異なります。

[ 演算子の構造的特徴 ]

■ & 演算子(文字列結合の専門職)
右と左のデータが何であれ、「すべて文字列に強制変換してくっつける」という構造を持っています。文字列の "100" と 数値の 200 なら、200を文字に変えて "100200" にします。エラーが起きにくく安全です。

■ + 演算子(本来は足し算の専門職)
片方が「数値型」である場合、VBAは構造的に「これは足し算(算術演算)だな」と解釈しようとします。そのため、もう片方の "100" も数値の 100 に自動変換して「100 + 200 = 300」として計算しようとします。

★ ここがトラップ!:
もし、val1 = "VBA" のように数値に変換できない文字だった場合、"VBA" + 200 は足し算が不可能なため、「型が一致しません(Runtime Error 13)」というエラーではじかれます。

1. ここが試験に出る!: スタンダード試験では、「文字列結合は & を使う」というのが大原則として問われます。+ を使ったコードを提示し、データ型が混ざったときに計算されてしまう挙動や、エラーになる危険性を指摘させる問題が定番です。
2. エンジニアの視点: Java 17などの現代的な言語では `+` 演算子が文字列結合として安全にオーバーロード(多重定義)されていますが、VBAは古い仕様を引き継いでいるため、四則演算のプラスと明確に区別する「理系NEO」な厳密さが必要です。実務でバグを生まないためにも、文字列の結合には **100% `&` を使う** のがプロの暗黙の了解です。


4. まとめ

「文字を繋ぐなら四の五の言わずに『&』」。この構造ルールを徹底するだけで、データの型に振り回されるバグは一掃できます。演算子ひとつにも明確な役割を与えること。それが、美しく堅牢なマクロの設計図を描くための基本です。


PR