
【稼ぐVBA】空白スペースで区切られたデータをどう処理するか5 #配列の使い方2【ファイル添付有】
私はこんなんでも、実際にVBAで稼いでますからご安心を。
空白スペースで区切られたデータをどう処理するか その5
【ノンプログラマー&初心者向けVBA講座】です。
私のように苦労する人を減らそうという試みです。
前回
問題
Dさんの次の行に、Eさん以下が並んでほしい。
まず、これが数千行あると思ってほしい。
そして難題が起こるがそれは、もう少し後。
この問題を例に、どんどんプログラムを発展させていきましょう。
課題
配列の内容を、セルに貼り付ける。
無理やり分割
配列を覚えるために、Excelの機能を使わず、配列を使って無理やり分割した文字列を、いちいちループさせながら、セルに貼り付けます。
E1セルに、分割した0番目(最初)の文字列を入れる
Range("E1") = split_STR(0)
E1セルからH1セルに、分割した文字列を順番に入れる
Range("E1") = split_STR(0)
Range("F1") = split_STR(1)
Range("G1") = split_STR(2)
Range("H1") = split_STR(3)
E1セルからH1セルに、分割した文字列を順番に入れ、E5セルからH5セルにも、分割した文字列を順番に入れる
Range("E1") = split_STR(0)
Range("F1") = split_STR(1)
Range("G1") = split_STR(2)
Range("H1") = split_STR(3)
Range("E5") = split_STR(4)
Range("F5") = split_STR(5)
Range("G5") = split_STR(6)
Range("H5") = split_STR(7)
もともとの問題は解決しつつある。
間にBさんCさんDさんがいればいい。
現在のVBA抜粋
For i = 1 To 4
split_STR = Split(sheet_TOP.Range("A" & i), " ")
Range("E1") = split_STR(0)
Range("F1") = split_STR(1)
Range("G1") = split_STR(2)
Range("H1") = split_STR(3)
Range("E5") = split_STR(4)
Range("F5") = split_STR(5)
Range("G5") = split_STR(6)
Range("H5") = split_STR(7)
Next i
E1やF1が一行ずつズレてくれれば、全部綺麗に貼り付けられそうだ。
For i = 1 To 4のi
iは一行目を処理している時は1だ。
2行目を処理している時は2だ。
これは進んでほしい行と同じ数字。
For i = 1 To 4
split_STR = Split(sheet_TOP.Range("A" & i), " ")
Range("E" & i) = split_STR(0)
Range("F" & i) = split_STR(1)
Range("G" & i) = split_STR(2)
Range("H" & i) = split_STR(3)
Range("E5") = split_STR(4)
Range("F5") = split_STR(5)
Range("G5") = split_STR(6)
Range("H5") = split_STR(7)
Next i
このままループさせてみると、AさんからDさんまではうまく貼り付けられた。
最後までループすると、EさんをHさんたちのデータが上書きしてしまう。
AさんとEさんを例にすると、間に4行の間隔があればいい。
Sub Graph_Data_Make()
Dim sheet_TOP As Worksheet
Dim split_STR() As String
Set sheet_TOP = Worksheets("TOP")
For i = 1 To 4
split_STR = Split(sheet_TOP.Range("A" & i), " ")
Range("E" & i) = split_STR(0)
Range("F" & i) = split_STR(1)
Range("G" & i) = split_STR(2)
Range("H" & i) = split_STR(3)
Range("E" & i + 4) = split_STR(4)
Range("F" & i + 4) = split_STR(5)
Range("G" & i + 4) = split_STR(6)
Range("H" & i + 4) = split_STR(7)
Next i
End Sub
これでうまくいくはずだ。
一列ずれているぞ!
どうやら空白が2つ仕込まれている場所があったみたい。
嘆くのは早い!これが一個なら、
Range("E6").Delete Shift:=xlToLeft
E6セルを左に寄せながら削除することで解決?
しかし、、、
この空白を埋めなければ
この程度であれば、手で入れてしまえばいいけれど、この数が多くなるとそうもいかない。
この状態は柔軟性がない状態で、エラーに対処できないということになる。
だがしかし、大方の問題は解決できている。
VBAをやりはじめた時に、いきなり100%を求めなくても、作業補助としてのVBAであれば合格でいい。
最初は、VBA作業のゴールを近めに設定しながら、徐々に新たなゴールを見つけて、先に進めばいい。
VBAコード全体
Sub Graph_Data_Make()
Dim sheet_TOP As Worksheet
Dim split_STR() As String
Set sheet_TOP = Worksheets("TOP")
For i = 1 To 4
split_STR = Split(sheet_TOP.Range("A" & i), " ")
Range("E" & i) = split_STR(0)
Range("F" & i) = split_STR(1)
Range("G" & i) = split_STR(2)
Range("H" & i) = split_STR(3)
Range("E" & i + 4) = split_STR(4)
Range("F" & i + 4) = split_STR(5)
Range("G" & i + 4) = split_STR(6)
Range("H" & i + 4) = split_STR(7)
Next i
Range("E6").Delete Shift:=xlToLeft
End Sub
まとめ
問題は解決した。
ただ、これでは汎用性がない。
柔軟性がない。
これに柔軟性を与えながら、更にツールの土台となるファイルを作っていきます。
ファイル添付
いいなと思ったら応援しよう!
