エクセルマクロの配列研究メモ
Dim allmydataArr As Variant 配列は必ずVariant変数使用(変数 allmydataArr)
allmydataArr = Range("gh10").CurrentRegion.Valueで表全体を配列に入力
(上の左表6列5803行 セルgh10がデータの左上端 )
For i = LBound(allmydataArr, 1) To UBound(allmydataArr, 1)で配列の中身処理をする
(表の上から下に向かってFor ~ Next で回して行く)
LBound(allmydataArr, 1)で配列の最小値とUBound(allmydataArr, 1)で配列の最大値
表データと同じように出力するのは出力先配列を作っておけば時間が掛からない。
(表の右側に検索したデータを別の配列に入れた後、一括出力する場合)
gk = allmydataArr(i, 2) '表の2列目の値を変数gkに入れる。
----------------------------------------------------------------------------------------------------------------------
Sub 配列研究()
Dim allmydataArr As Variant
allmydataArr = Range("a1").CurrentRegion.Value’表データ全部をallmydataArrに入れる
Range("g1:l2000").Clear
Dim starttime As Single, stoptime As Single
starttime = Timer’ストップウォッチで時間計測開始
Dim piceddataArr(1 To 5900, 1 To 6) As Variant ’検索結果格納用
Dim sagadata As Long: sagadata = 2 ’2とする場合
Dim hitdata As Long: hitdata = 0
Dim i As Long, j As Long
For i = LBound(allmydataArr, 1) To UBound(allmydataArr, 1) ’最小から最大まで
If allmydataArr(i, 2) = 11 And allmydataArr(i, 6) = sagadata Then
hitdata = hitdata + 1
For j = 1 To 6
piceddataArr(hitdata, j) = allmydataArr(i, j)’検索結果1つづつ格納する
Next j
End If
Next i
If hitdata >= 1 Then
Range("g1:l" & hitdata) = piceddataArr’検索結果格納データをセルに出力
Else
MsgBox "No data"
End
End If
If i = 10 Then Range("t2") = i
stoptime = Timer’ストップウォッチで時間計測終了
MsgBox "件数は" & hitdata & " 時間は" & Round(stoptime - starttime, 3)
End Sub