Excelでは、1つのセル内に複数行の文章を入力することがあります。特にAlt+Enterによる改行や、セルの折り返し表示を含むデータを一定の行数ごとに分割したい場合、手作業では大変な作業になります。
この記事では、セル内の改行データを実際の行単位で取得し、5行ごとなど指定した行数で別セルへ分割するExcel VBAマクロの作成方法を解説します。行数が変動するデータにも対応できる方法です。
セル内データを一定行数ごとに分割する考え方
Excelのセル内改行は、通常の文章とは異なり「改行コード」として保存されています。そのため、まずセルの内容を改行ごとに分割し、配列として扱う必要があります。
例えばA1セルに12行分のデータがある場合、改行単位で分割すると以下のような配列になります。
| 配列番号 | 内容 |
|---|---|
| 1~5 | A1へ出力 |
| 6~10 | B1へ出力 |
| 11~15 | C1へ出力 |
このように配列を5個ずつ取り出して、別セルへ書き込む処理をVBAで行います。
5行ごとに分割するExcel VBAマクロ
以下のマクロでは、A1セルの内容を取得し、改行ごとに分割した後、5行単位で右方向のセルへ出力します。
セル内の行数が増減しても、自動的に必要な分だけセルを作成します。
Sub SplitCellByFiveLines() Dim txt As String Dim lines As Variant Dim result As String Dim i As Long Dim col As Long Dim count As Long txt = Range("A1").Value lines = Split(txt, vbLf) col = 1 result = "" count = 0 For i = LBound(lines) To UBound(lines) result = result & lines(i) count = count + 1 If count = 5 Or i = UBound(lines) Then Cells(1, col).Value = result col = col + 1 result = "" count = 0 Else result = result & vbLf End If Next iEnd Sub
このマクロを実行すると、A1セルのデータは5行ずつ区切られ、B1、C1へ順番に出力されます。
マクロ実行後の表示例
例えばA1セルに以下のような12行のデータがある場合を考えます。
1行目 ああああ
2行目 いい
3行目 う
4行目 ええ
5行目 お
6行目 かか
7行目 き
8行目 く
9行目 け
10行目 こ
マクロ実行後は以下のようになります。
| セル | 内容 |
|---|---|
| A1 | 1~5行目の内容 |
| B1 | 6~10行目の内容 |
| C1 | 11行目以降の内容 |
最後のグループが5行未満の場合でも、そのまま出力されるため、データ数が一定でなくても利用できます。
セル内の折り返し表示と実際の改行の違いに注意
Excelでは「折り返して全体を表示する」と「Alt+Enterで入力した改行」は別のものです。
今回のようなマクロでは、実際にセル内へ入力された改行コードだけを認識します。そのため、見た目だけ2行や3行に表示されている場合は分割対象になりません。
例えば、長い文章が自動的に折り返されて2行に見えていても、セルの中では1行のデータとして扱われます。
分割する行数を変更したい場合
5行ではなく10行ごと、3行ごとなどに変更したい場合は、マクロ内の「count = 5」の部分を変更します。
例えば10行ごとに分割したい場合は以下のように変更します。
If count = 10 Or i = UBound(lines) Then
このように指定行数を変数化すれば、用途に応じて柔軟に利用できます。
まとめ
Excel VBAを使えば、セル内の改行データを指定した行数ごとに分割し、別々のセルへ自動出力できます。
ポイントは、セルの内容を改行コードで分割し、配列として処理することです。今回の方法なら、データ量が変動する場合でも5行単位、10行単位など自由に調整できます。
大量の文章データやリスト整理を行う場合は、手作業でコピーするよりもVBAで自動化することで大幅な作業時間短縮につながります。


コメント