文字列連結演算子と使用時の注意点

数値や文字列を連結する演算子には”&”と”+”があります。”+”についてはオペランドのデータ型によっては算術演算子として機能してしまい、得られる結果が意図したものと異なる可能性があります。したがって、文字列の連結には”&”を使用する方がよいでしょう。

スポンサーリンク

& 演算子による文字列連結

以下のコードは&演算子で文字列を連結するサンプルマクロです。

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
+演算子の実行結果1
+演算子の実行結果2

問題なく文字列連結されました。

文字列型(数値)+文字列型(数値)の場合

このケースも通常の使用方法ですが、上と同じく比較用です。

Sub test4_3()
    Dim strValue1  as String
    Dim strValue2  as String

    strValue1 = "123"
    strValue2 = "456"

    MsgBox strValue1 + strValue2
End Sub
+演算子の実行結果2
+演算子の実行結果2

“+”が文字列連結として扱われました。

数値型+文字列型(文字列)の場合

これ以降が問題となるケースです。このケースはエラー表示されるため、問題に気づくことができます。

Sub test4_4()
    Dim intValue1  as Integer
    Dim strValue2  as String

    intValue1 = 123
    strValue2 = "EFG"

    MsgBox intValue1 + strValue2
End Sub
+演算子の実行結果3
+演算子の実行結果3

“+”が算術演算子として扱われたため、”intValue1 + strValue2″でエラーとなってしまいました。

数値型+文字列型(数値)の場合

このケースではエラーとならないため、場合によっては厄介となるケースです。

Sub test4_5()
    Dim intValue1  as Integer
    Dim strValue2  as String

    intValue1 = 123
    strValue2 = "456"

    MsgBox intValue1 + strValue2
End Sub
+演算子の実行結果4
+演算子の実行結果4

“+”が算術演算子として扱われています。プログラマーが算術演算子としての使用していたのであれば、問題ありませんが、文字列連結として使用していた場合、想定とは異なる結果となります。

このようなケースがありますので、文字列連結するときは”&”演算子で統一することを推奨します。

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