【VBA】空白で区切られた文字列を分割・各セルに割振る
PDF表データをそのままコピーして
Excelに貼り付けたら、1項目ずつ空白で区切られていた。
っていう事、結構ありませんでしたか?(↑の画面参照)
今回は空白で区切られて項目を
それぞれ1つずつExcelのセルに落とし込む
そんなVBAコードを作成しましたので
ご参考になさってください。
例題
それでは例題ですが、
セル【A2】から下にズラーっと任意のところまで
半角空白で1項目ずつ区切られた文字列がありました。
これを1項目ずつ右隣のセルに落とし込んでいく
サンプルコードは下記になります。
(※例題のExcelフォーマットを下記にアップします)
サンプルコード
Sub Sample1()
Dim i, j, Endline1, cnt1 As Long
Dim tmp As Variant
If Range("A2") <> "" Then
Endline1 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To Endline1
cnt1 = 1
tmp = Split(Cells(i, 1), " ")
For j = 0 To UBound(tmp)
Cells(i, 1 + cnt1) = tmp(j)
cnt1 = cnt1 + 1
Next j
Next i
End If
End Sub
★簡単なコードの説明
「Split」関数は、上記1つ目の画像のような構成です。
ごく一般的には、2枚目の画像のように、
変数(Variant型)に格納し、【変数(0)】【変数(1)】【変数(2)】…のように使用されます。
画像3つ目が使用のイメージ図です。区切られた文字列は「0」から始まる”箱”にそれぞれ格納されます。
「Endline1」の部分で最終行を取得して、何行目まで処理を続けるかを決める。
「For j =…」の部分では、例えば1つ目の文字列【セルA2】はA~Gなので、合計7回処理を繰り返す事を表しており、[cnt1]は[For j =…]の処理が1つ進むにつれて、列を右隣に1つずつ移動させる役割を負っています。A列の1つの項目の処理が終わったら、[cnt1]の数値は「1」に戻ります。
「For i =…」の部分で、「For j =…」の処理を何行分実施するかを表しています。
文字、数字、何でも分割可能です。
ちなみに、
文字だけではなく数字に対しても可です。
例題が、全てローマ字なので、いろいろなパターンで
VBAを実行した結果は上記の画面になります。
何でも分割可能です。
以上になります。
お役に立てれば幸いです。