数値や文字列を連結する演算子には”&”と”+”があります。”+”についてはオペランドのデータ型によっては算術演算子として機能してしまい、得られる結果が意図したものと異なる可能性があります。したがって、文字列の連結には”&”を使用する方がよいでしょう。
& 演算子による文字列連結
以下のコードは&演算子で文字列を連結するサンプルマクロです。
Sub sample4_1()
Dim intValue as Integer
Dim strValue as String
intValue = 3
strValue = intValue & "の" & intValue & "乗は" & _
intValue ^ intValue & "です。"
MsgBox strValue
End Sub
+ 演算子による文字列連結
冒頭で述べたとおり、”+”でも文字列連結は可能ですが、最初のオペランドのデータ型により”算術演算”となるか”文字列連結”となるか、演算子の振る舞いが変わってきます。
そこで、”+” 演算子の演算対象となるオペランドのデータ型により、その演算結果がどのようになるか確認しみました。
文字列型(文字列)+文字列型(文字列)の場合
通常の使用方法ですが、比較のためテストしました。
Sub test4_2()
Dim strValue1 as String
Dim strValue2 as String
strValue1 = "abc"
strValue2 = "DEF"
MsgBox strValue1 + strValue2
End Sub
問題なく文字列連結されました。
文字列型(数値)+文字列型(数値)の場合
このケースも通常の使用方法ですが、上と同じく比較用です。
Sub test4_3()
Dim strValue1 as String
Dim strValue2 as String
strValue1 = "123"
strValue2 = "456"
MsgBox strValue1 + strValue2
End Sub
“+”が文字列連結として扱われました。
数値型+文字列型(文字列)の場合
これ以降が問題となるケースです。このケースはエラー表示されるため、問題に気づくことができます。
Sub test4_4()
Dim intValue1 as Integer
Dim strValue2 as String
intValue1 = 123
strValue2 = "EFG"
MsgBox intValue1 + strValue2
End Sub
“+”が算術演算子として扱われたため、”intValue1 + strValue2″でエラーとなってしまいました。
数値型+文字列型(数値)の場合
このケースではエラーとならないため、場合によっては厄介となるケースです。
Sub test4_5()
Dim intValue1 as Integer
Dim strValue2 as String
intValue1 = 123
strValue2 = "456"
MsgBox intValue1 + strValue2
End Sub
“+”が算術演算子として扱われています。プログラマーが算術演算子としての使用していたのであれば、問題ありませんが、文字列連結として使用していた場合、想定とは異なる結果となります。
このようなケースがありますので、文字列連結するときは”&”演算子で統一することを推奨します。