初心者向けにやさしく、例題つきで丁寧に説明します。コードはそのまま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
VBFormat を使うと「どのような文字列になるか」を明確に指定できるので、日付を結合する時におすすめです。
改行を入れる(見やすくする)
- 改行には
vbCrLfやvbNewLineを使います(どちらでもOK)。
Sub Example_NewLine()
Dim s As String
s = "1行目" & vbCrLf & "2行目"
MsgBox s
End Sub
VB注意点・落とし穴(初心者がはまりやすいポイント)
+は注意- 文字列と数値を
+するとエラー(型不一致)になったり、数値として加算される。&を使おう。
- 文字列と数値を
- Null / Empty に注意
Variant型でNullを含むと&でもエラーになる場合がある。なるべく明示的に型を指定し、IsNullやNz相当の処理を行う。
- 型変換は明示的に
- 数値を文字列に変換する場合は
CStr(数値)を使ったり、Formatで整形すると安全。
- 数値を文字列に変換する場合は
- 空白(スペース)を忘れると単語がくっつく
"Hello" & "World"はHelloWorldになる。単語の間にスペースを入れるなら" " &を忘れずに。
- 長い文字列は
& _で行継続- 長い式は
& _(行継続文字)を使って複数行に分けられます。
- 長い式は
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 = 7 と b = 3 がある。a と b を文字列として "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は改行。

