見出し画像

【稼ぐVBA】空白スペースで区切られたデータをどう処理するか5 #配列の使い方2【ファイル添付有】

私はこんなんでも、実際にVBAで稼いでますからご安心を。

空白スペースで区切られたデータをどう処理するか その5

【ノンプログラマー&初心者向けVBA講座】です。
私のように苦労する人を減らそうという試みです。

前回

問題

Dさんの次の行に、Eさん以下が並んでほしい。
まず、これが数千行あると思ってほしい。
そして難題が起こるがそれは、もう少し後。
この問題を例に、どんどんプログラムを発展させていきましょう。

課題

配列の内容を、セルに貼り付ける。

無理やり分割

配列を覚えるために、Excelの機能を使わず、配列を使って無理やり分割した文字列を、いちいちループさせながら、セルに貼り付けます。

画像1

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)

画像2

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)

画像3

もともとの問題は解決しつつある。
間に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

画像4

このままループさせてみると、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

これでうまくいくはずだ。

画像5

一列ずれているぞ!

どうやら空白が2つ仕込まれている場所があったみたい。

画像6

嘆くのは早い!これが一個なら、

Range("E6").Delete Shift:=xlToLeft

E6セルを左に寄せながら削除することで解決?

しかし、、、

画像7

この空白を埋めなければ

この程度であれば、手で入れてしまえばいいけれど、この数が多くなるとそうもいかない。

この状態は柔軟性がない状態で、エラーに対処できないということになる。

だがしかし、大方の問題は解決できている。

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

まとめ

問題は解決した。
ただ、これでは汎用性がない。
柔軟性がない。

これに柔軟性を与えながら、更にツールの土台となるファイルを作っていきます。

ファイル添付


いつもお読みいただき、ありがとうございます。 書くだけでなく読みたいので、コメント欄で記事名入れてもらうと見に行きます。