「VBAで改行する」内容に合わせて、初心者向けの練習問題とその模範解答+解説を作りました。実際に手を動かしながら理解できるようにしています。
問題1:住所をセルで改行して表示
問題:
セルA2に「東京都」、セルB2に「中央区」と入力されています。
これをC2に「東京都」と「中央区」を改行して表示してください。セル内で改行が見えるように設定しましょう。
解答例:
Sub 問題1_住所改行()
Range("C2").Value = Range("A2").Value & vbLf & Range("B2").Value
Range("C2").WrapText = True
End Sub
VB解説:
& vbLf &でセル内改行を実現。WrapText = Trueを設定しないと、改行があっても1行に見えてしまう。
問題2:メッセージボックスで複数行表示
問題:
メッセージボックスに以下の3行を表示してください。
1行目:登録が完了しました
2行目:ご利用ありがとうございます
3行目:不明点はサポートまで
解答例:
Sub 問題2_メッセージ改行()
MsgBox "登録が完了しました" & vbCrLf & _
"ご利用ありがとうございます" & vbCrLf & _
"不明点はサポートまで"
End Sub
VB解説:
vbCrLfはWindows標準の改行コード。MsgBoxではこれを使うと確実に改行される。& _はコードを見やすく改行するためのVBAの書き方(実際の文字列には影響しない)。
問題3:リストを1セルに縦並びで表示
問題:
セルA1〜A5に果物の名前が入力されています。これをD2に改行区切りで縦並びに表示してください。
解答例:
Sub 問題3_リスト改行()
Dim items As Variant
items = Range("A1:A5").Value
Dim i As Long, result As String
result = ""
For i = 1 To 5
If items(i, 1) <> "" Then
If result = "" Then
result = items(i, 1)
Else
result = result & vbLf & items(i, 1)
End If
End If
Next i
Range("D2").Value = result
Range("D2").WrapText = True
End Sub
VB解説:
ForループでA1〜A5を順番に読み込み。vbLfを使って1セル内で縦に並べる。- 最初の要素には改行を付けず、2つ目以降にだけ改行を追加する工夫をしている。
問題4(応用):Join関数でスマートに改行
問題:
セルA1〜A5に入力された果物を、1セル(E2)に改行区切りでまとめて表示してください。空白セルは無視してください。
解答例:
Sub 問題4_Joinで改行()
Dim rng As Range, cell As Range
Dim temp As Collection
Set temp = New Collection
' A1:A5の中身をチェック
For Each cell In Range("A1:A5")
If cell.Value <> "" Then
temp.Add cell.Value
End If
Next cell
' Collectionを配列に変換
Dim arr() As String
ReDim arr(1 To temp.Count)
Dim i As Long
For i = 1 To temp.Count
arr(i) = temp(i)
Next i
' Joinでまとめて改行
Range("E2").Value = Join(arr, vbLf)
Range("E2").WrapText = True
End Sub
VB解説:
Join(配列, 区切り文字)を使うと、末尾に余計な改行がつかない。- 空白セルを除外するために、一度Collectionに入れてから配列化している。
まとめ
- セル内改行: vbLf(+WrapText)
- MsgBox改行: vbCrLf または vbNewLine
- 複数データをまとめる: Join関数を使うとスマート

