【VBA】VBAで配列を、高速に書き出す方法
新年おめでとうございます。
お久しぶりです。今回は、配列を高速に書き出す方法の備忘録です。
e出席簿の改良で難点がありました。
休日に赤縦線を引いたり、欠席や出席停止児童数の計算ができるのは当たり前。
私がこだわっているのは、「備考欄への欠席理由一括記入」の自動化です。
月別のシートではこれができますが、
指導要録への記入の時に、一覧が欲しいです。
個人別に、欠席・停止・忌引き理由をフィルターで配列に格納することはできました。
しかし、この配列を書き出す時に思いのほか時間がかかりました。
フィルター→配列格納=数秒
配列をセルに書き出すのに1~2分かかってしまいました。
-------------------------------
まず、【遅いコード】です。
配列tmpを現在シートのJ4:J43セルに書き出すコードです。
Dim tmp(0 to 39)
(フィルター→配列格納は割愛します。)
k=0
For each rng in range("J4:J43")
rng.value=tmp(k)
k=k+1
next
セル範囲をループする一般的な書き出し方法です。For eachでも1~2分かかってしまいました。
次に【速いコード】です。
Dim tmp(0 to 39)
Dim my_array
(フィルター→配列格納は割愛します。)
k = 0
my_array = Range("J4:J43")
'配列を格納
For i = 1 To UBound(my_array)
For j = 1 To UBound(my_array, 2) '''''''★この2は配列上の2次元
my_array(i, j) = tmp(k)
k = k + 1
Next
Next
'書き出し
Range("J4:J43") = my_array
-----------------------------------
ポイントは、書き出し範囲をmy_array配列に格納して、その配列上にtmp(k)配列を書き込み、
それを一気にセル範囲に書き出すというところです。
普段は使わないにしても、書き出しに時間がかかる場合は、飛躍的に書き出し速度が上がります。1~2分かかっていたのが、5秒以内で書き出せました。
備忘録でした。
では、また