【VBA】空白で区切られた文字列を分割・各セルに割振る

PDF表データをそのままコピーして
Excelに貼り付けたら、1項目ずつ空白で区切られていた。

VBA_空白区切り_1項目ずつ_各セルに割振り1
1つのセルに “半角のスペース” で区切られている状態でコピペされる事はありませんか?

っていう事、結構ありませんでしたか?(↑の画面参照)

今回は空白で区切られて項目を
それぞれ1つずつExcelのセルに落とし込む
 

VBA_空白区切り_1項目ずつ_各セルに割振り2
左図から右図へ一瞬で変換する、こんな感じ

そんなVBAコードを作成しましたので
ご参考になさってください。
 

広告

例題

VBA_空白区切り_1項目ずつ_各セルに割振り2
先程の画像を例題とします。A2から分割したい文字列を縦にズラーっと記入(貼付け)していきます

 


それでは例題ですが、

セル【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

 

★簡単なコードの説明

VBA_空白区切り_1項目ずつ_各セルに割振り3
Split関数の構成の説明です。後述しますが、「区切る文字」は例題は半角スペースですが、「,」や「/」でも何でも可能です。
VBA_空白区切り_1項目ずつ_各セルに割振り4
文字でも数字でもOKなVariant型
VBA_空白区切り_1項目ずつ_各セルに割振り5
変数を用いた場合、Split関数の役割はこんな感じ。(0)から始まります。

 
「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_空白区切り_1項目ずつ_各セルに割振り6
アンダーバー ” _ “ で区切られた場合もご覧の通り

 
ちなみに、
文字だけではなく数字に対しても可です。
例題が、全てローマ字なので、いろいろなパターンで
VBAを実行した結果は上記の画面になります。

何でも分割可能です。

以上になります。
お役に立てれば幸いです。

広告