![見出し画像](https://assets.st-note.com/production/uploads/images/109374929/rectangle_large_type_2_e3ce050ad8a56c7741598d46793cd27e.png?width=1200)
VBAの配列まとめ
こんにちは。
仕事でエクセルで作成したカレンダーの予定表から社員のスケジュールをアクセスのテーブルに取り込む作業をしました。
その際、表の縦横を配列で入れ替える必要があり、配列は苦手でよく分かってないのですが、色々調べた結果なんとか実装できたので
まとめました。
①二次元配列を縦1列に並べる
sub 予定入力()
Dim 予定(0),予定1() As Variant
Dim i,j as long
予定(0) =Sheets("sheet1").Range("f11:AN17").Value
'7行35列を取得
j= 36
For i = 1 To UBound(予定(0), 1) '35
'1〜7行分ループ
予定1 = WorksheetFunction.index(予定(0), i)
Sheets("sheet2").Range(Cells(j + 1, "C"), Cells(j+ UBound(予定1), "C")) = WorksheetFunction.Transpose(予定1)
j = j + 35
Next i
End sub
②1行35列の日付行を人数分縦に繰り返していれる
セルに出力するためには、二次元配列である必要があるとのこと。
Function 日付入力()
Dim day(), day2() As Variant
Dim i, j, n As Long
day = Sheets("sheet1").Range("f2").Resize(1, 35).Value
'Resizeで表記すると二次元配列になるとのこと
ReDim day2(1 To 456, 1 To 1)
'2行目から35行を人数分を繰り返して日付を入れると456行目まで必要
For i = 1 To UBound(day, 1)
For j = 1 To UBound(day, 2)
day2(j, i) = day(i, j)
Next
Next
For n = 2 To 456 Step 35
Sheets("sheet2").Range(Cells(n, 1), Cells(UBound(day2, 1), UBound(day2, 2))) = day2
Next
End Function
下記のサイトが分かりやすかったです。
この記事が気に入ったらサポートをしてみませんか?