Excel VBA | 文字列の結合

Excel VBA VBA
スポンサーリンク

初心者向けにやさしく、例題つきで丁寧に説明します。コードはそのままVBAのモジュールに貼って実行できる形で載せます。まず基本、次に実例と注意点、最後に演習(解答付き)です。

1. 基本ルール(超かんたん)

  • 文字列同士をつなげるときは & が安全で分かりやすい
    例: "Hello" & "World"HelloWorld
  • + でもつなげられる場合があるけど、数値の加算と混ざると挙動が変わる(誤動作やエラーの原因)。
  • 文字列と数値、文字列と日付をつなげたいときも & を使えば問題なく結合できる。

2. なぜ & を使うのがいいの?

  • & は「文字列の連結専用」に近い動きをする(VBAでは文字列結合のための演算子)。
  • + は「加算(+)」の意味が強く、数値や日付が含まれると加算処理を試み、型の不一致(Type Mismatch)や思わぬ結果になることがある。

実例で学ぶ(そのまま貼って動くサンプル)

下のコードを標準モジュールに貼って F5 で実行してみてください(MsgBoxで結果が出ます)。

Sub Example_ConcatenateBasic()
    Dim s As String
    s = "Hello" & " " & "World"    ' & で結合(空白も挟める)
    MsgBox s                       ' Hello World

    Dim a As Integer: a = 12
    s = "Version." & a             ' 文字列と数値の結合は & で安全
    MsgBox s                       ' Version.12

    ' + を使った時の違い(危険):
    Dim b As Integer: b = 8
    Dim t As String
    t = a + b                      ' これは数値として加算される(20)
    MsgBox "a+b = " & t            ' a+b = 20

    ' もし a と "b" を結合したければ & を使う:
    MsgBox "a and b: " & a & " & " & b   ' a and b: 12 & 8
End Sub
VB

日付や時間と結合する例

Sub Example_DateConcat()
    Dim d As Date
    d = #2024/12/31 14:30:00#
    Dim s As String

    s = "今日の日付は " & d
    MsgBox s    ' 既定の表示形式で日付時刻が文字列としてつながる

    ' 表示を整えたいときは Format を使う
    s = "今日の日付は " & Format(d, "yyyy/mm/dd")   ' 2024/12/31 のみ
    MsgBox s
End Sub
VB

Format を使うと「どのような文字列になるか」を明確に指定できるので、日付を結合する時におすすめです。


改行を入れる(見やすくする)

  • 改行には vbCrLfvbNewLine を使います(どちらでもOK)。
Sub Example_NewLine()
    Dim s As String
    s = "1行目" & vbCrLf & "2行目"
    MsgBox s
End Sub
VB

注意点・落とし穴(初心者がはまりやすいポイント)

  1. + は注意
    • 文字列と数値を + するとエラー(型不一致)になったり、数値として加算される。& を使おう。
  2. Null / Empty に注意
    • Variant 型で Null を含むと & でもエラーになる場合がある。なるべく明示的に型を指定し、IsNullNz相当の処理を行う。
  3. 型変換は明示的に
    • 数値を文字列に変換する場合は CStr(数値) を使ったり、Format で整形すると安全。
  4. 空白(スペース)を忘れると単語がくっつく
    • "Hello" & "World"HelloWorld になる。単語の間にスペースを入れるなら " " & を忘れずに。
  5. 長い文字列は & _ で行継続
    • 長い式は & _(行継続文字)を使って複数行に分けられます。
s = "長い文章の先頭部分" & _
    "続きの文章"
VB

応用:配列の結合(複数の文字列をまとめてつなぐ)

  • 配列の要素をまとめて結合したいときは Join 関数が便利。
Sub Example_Join()
    Dim arr As Variant
    arr = Array("A", "B", "C")
    Dim s As String
    s = Join(arr, "-")   ' "A-B-C"
    MsgBox s
End Sub
VB

練習問題 — 解答付き

演習1

"商品"100 をつなげて "商品: 100" の形式にしなさい(空白やコロンも含める)。

解答1

Dim s As String
s = "商品: " & 100
VB

演習2

変数 a = 7b = 3 がある。ab を文字列として "7と3の合計は10です" のように出力するコードを書きなさい。合計は計算して文字列に含めること。

解答2

Dim a As Integer: a = 7
Dim b As Integer: b = 3
Dim s As String
s = a & "と" & b & "の合計は" & (a + b) & "です"
' もしくは (a + b) を CStr で明示的に変換しても良い
VB

演習3

日付 #2025/01/01#yyyy-mm-dd 形式で "2025-01-01 開始" のように表示するコードを書きなさい。

解答3

Dim d As Date: d = #2025/01/01#
Dim s As String
s = Format(d, "yyyy-mm-dd") & " 開始"
VB

演習4(注意問題)

次のコードは何を表示する? そして問題点があるとしたら何か。

Dim x As String
x = "10" + 5
MsgBox x
VB

解答4

  • 結果: 15 が表示される("10" が数値に暗黙変換されて 10 + 5 = 15 になる)。
  • 問題点: 文字列として期待しているときに + を使うと、意図しない加算が起きる。& を使うべき。

演習5

配列 ["apple","banana","cherry"], (カンマ+スペース)で連結して "apple, banana, cherry" を作るコードを書け。

解答5

Dim arr As Variant
arr = Array("apple", "banana", "cherry")
Dim s As String
s = Join(arr, ", ")
VB

演習6(やや発展)

長い文章を 2 行に分けて MsgBox で表示したい。1行目 "はじめに"、2行目 "説明を続けます" として改行を入れる方法を示せ。

解答6

Dim s As String
s = "はじめに" & vbCrLf & "説明を続けます"
MsgBox s
VB

まとめ

  • 文字列結合は & を基本に使う。
  • + は数値と混ざると加算されるので危険。
  • 日付や数値は Format / CStr で明示的に整形すると安心。
  • Join は配列結合、vbCrLf は改行。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました