データ化したい!
今回も訪問して下さりありごとうございます。
マトリクス表って「パ」っと渡されても困るんです。
今回は配列を考えたいと思います。
セルが結合されてるとか空白があるとかは無しで考えます。
※基本的な考え方を載せようと思います!
簡単な表で説明します。
※右の部分にリストの表を準備しました。
その部分に書き出していこうと思ってます。
それでは行きまーす!
Sub matorikusu9216()
Dim i As Long, j As Long, n As Long, r As Long
Dim i As Long, j As Long, n As Long, r As Long
Dim A As Variant, B As Variant, C As Variant
n = 16
r = 2
n = 16
r = 2
'前もって3つ(A・B・C)箱を準備しようと思います。
ReDim A(n, 0) 'ここでは箱の大きさを決めます。今回は0列に16行準備!
ReDim B(n, 0)
ReDim C(n, 0)
For i = 2 To 6
For j = 2 To 4
A(r - 2, 0) = Cells(i, 1)
B(r - 2, 0) = Cells(1, j)
C(r - 2, 0) = Cells(i, j)
r = r + 1
Next j
Next i
Range(Cells(2, 6), Cells(n, 6)) = A
Range(Cells(2, 7), Cells(n, 7)) = B
Range(Cells(2, 8), Cells(n, 8)) = C
End Sub
ReDim A(n, 0) 'ここでは箱の大きさを決めます。今回は0列に16行準備!
ReDim B(n, 0)
ReDim C(n, 0)
For i = 2 To 6
For j = 2 To 4
A(r - 2, 0) = Cells(i, 1)
B(r - 2, 0) = Cells(1, j)
C(r - 2, 0) = Cells(i, j)
r = r + 1
Next j
Next i
Range(Cells(2, 6), Cells(n, 6)) = A
Range(Cells(2, 7), Cells(n, 7)) = B
Range(Cells(2, 8), Cells(n, 8)) = C
End Sub
今回みたいな場合はマトリクス表よりもリスト表の方が長くなるので、 n = 16と指定してます。この部分は n = 100とか大きめに準備してもOKです。
ReDimの部分で配列の箱の大きさを確保出来たら、その箱にいったん欲しいデータをおさめる感じです。
すべてのデータがおさめ終わったら、最後一気に入力します。
この場合は3つに分けてるので、3回の記述を行う感じです。
無理して一回で完了させようとすると、難しくなります。
今回は分かりやすい記述の為にA/B/Cと3つの箱を準備しました。
理解しやすく分けただけなので、配列はA(一つ)だけでも可能です。
なんでもかんでも最終行を取得しようとすると、混乱します。
元の表よりも記述する表が長い場合は特に....。
以前も配列書きましたが、「架空の0(ゼロ)」をイメージ出来たら勝ちです!
0列0行をイメージして配列を組み立てる
インデントや変数などがルール通りじゃなく、見にくいと思いますがお許し下さい。VBAを頭のスポーツとして楽しんで実装してます。
考え方としては単純な表が分かりやすいと思います。
同じ大きさの列に、配列を入力するなどは考えやすいですが、今回みたいな場合は一つ一つ小分けにして考えると新たな発見が有ります。
最後はこうなります!
お疲れさまでした。
今回も最後までお読みいただきありがとうございました.
補足:どうしても一回で一気に記述したい場合
ReDim A(n, 2) にすれば A(n,0)/A(n,1)/A(n,2) って3つの部屋を作れます。
A(r - 2, 0) = Cells(i, 1)
A(r - 2, 1) = Cells(1, j)
A(r - 2, 2) = Cells(i, j)
A(r - 2, 1) = Cells(1, j)
A(r - 2, 2) = Cells(i, j)
最後一回で収納できる場所を指定して下さい。
Range(Cells(2, 6), Cells(n, 8)) = A