Excel VBA | 文字列の結合

javascrpit VBA
スポンサーリンク

「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関数を使うとスマート
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました