1つのセルの文字列をスペースごとにセルを分けるには
以下のようにA列のセルの中にスペース区切りの文字列が設定されているとして、それをB列以降にスペース区切りで分けたい場合があります。
.
これ自体はわざわざVBAでやらなくても置換機能があるテキストエディタがあれば以下の手順で簡単にできます。
- テキストエディタにA列の内容を貼り付ける。
- テキストエディタでスペースをタブ文字に置換する。(正規表現で言えば、( | )を\tへの置換)
- 置換後の内容をExcelシートに貼り付ける。
ただ、どうしてもVBAでやる必要がある場合もあります。
そのような場合の対応方法を紹介します。
処理手順の概要
VBAで行う場合には主に3つの手順になります。
- 行数分ループする。
- Split関数でスペース文字区切りの内容を配列化する。
- 配列をループして列をずらしながらセルに貼り付ける。
考え方はそんなに難しくありませんが、コードの書き方が分からないというのでハマるかもしれません。
コード
上の処理手順の概要をそのままコードにしてみました。
A列を上から順にループし、半角スペースをSplit関数で分割して、その分割された内容を隣の列に貼り付けていくコードです。
Offsetプロパティの使い方が慣れてないと分かりにくいかもしれませんが、アクティブセルから見て、行と列が指定数だけ離れている箇所を指します。
実行すると上の例のようにB列以降に半角スペースで分割した内容が貼り付けられます。
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 33 34 35 36 |
Sub StrSplit() Dim ar '// Split分割後の配列 Dim iCol '// 列位置 Dim i '// ループカウンタ Dim s '// 元文字列 Dim div '// 分割後文字列 '// A1セルを初期位置をして選択 Range("A1").Select i = 0 '// 全行ループ Do s = ActiveCell.Offset(i, 0).Value '// セルに未入力の場合はここで処理を終了する If s = "" Then Exit Do End If '// スペース区切りで配列化 ar = Split(s, " ") '// アクティブセルの1つ右のセルの位置を取得 iCol = ActiveCell.Column '// 配列を全てループ For Each div In ar '// 現ループ値をセルに反映 ActiveCell.Offset(i, iCol).Value = div '// 次処理用に列位置を1つずらす iCol = iCol + 1 Next i = i + 1 Loop End Sub |