セル内の改行ごとに新しい行に分割するには
セルにはAlt + Enterキーを入力することでセル内でも改行することが可能です。
使い方によっては便利ではありますが、1つのセルに文章が詰め込まれてしまい、行の高さが高くなりスクロールがやりにくかったりする難点もあります。
ここでは、そのセル内の文章を改行ごとに分割して、分割した内容をそれぞれ新しい行に書く方法を紹介します。
実行すると以下のようになります。(わかりやすいように線を引いてます)
実行前
実行後(A1セルを分割+新しい行に追加)
実行前は2行目に緑色の行がありましたが、実行後は新しい行が追加されて8行目に変わっています。
コード
以下のコードは、セル内改行を分割したいセルを選択して実行すると、改行ごとに新しい行に文章を分割します。
複数セルを選択している場合はアクティブセルのみが処理対象になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub セル内改行を分割() Dim r As Range '// 対象セル Dim s As String '// セル文字列 Dim v As Variant '// 改行分割後の配列 Dim sDiv As String '// 改行分割後の配列の要素 Dim i As Integer '// ループカウンタ '// アクティブセルのRangeオブジェクト取得 Set r = ActiveCell '// アクティブセルの文字列を取得 s = r.Value '// セル内の改行文字で分割 v = Split(s, vbLf) '// セル内の改行文字の分割数ループ For i = 0 To UBound(v) sDiv = v(i) '// ループ先頭でない場合(ループ先頭の場合は行追加はしない) If i <> 0 Then '// 下に行を追加 r.Offset(1, 0).EntireRow.Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromLeftOrAbove '// 処理対象セルを1つ下の行に変更する Set r = r.Offset(1, 0) End If '// セルの値を改行で分割した r.Value = sDiv Next End Sub |
他の列の扱い
改行ごとに分割するのはいいのですが、同じ行にある別の列のデータはどうなるかというと、何もしません。
元のセルの下に行の追加をしているため、他の列のデータは元の行位置にそのまま残ります。
上のコードの24行目にある、r.Offset(1, 0).EntireRow.Insertのコメントで書いている通りですが、元の行のすぐ下の行を起点として新しい行を追加しているため、元の行には影響しないようになっています。そのため、元の行の他の列も何も変わりません。