【VBA】dictionaryのkeyに、一意の連番を使用して高速に値転記する方法
お久しぶりです。
成績処理で忙しい季節ですね。
さて、今回は、dictionaryについてです。
ある程度VBAを使いこなせてくると、値を一気に転記できるdictionaryを
使いたくなりますね。
一般には、一意のkeyに紐づけされたitemを転記できるわけですが、
1列(1次元配列)だけを転記する時は、keyに連番を入れるだけで処理はできます。
例えば、通信簿の所見集を作るために、
40人×3クラス×6学年=720人分のデータを集めた所見集を作りたい場合などに
利用できると思います。
転記回数は少ない方が高速に処理できるので、今回は、
10行飛ばしのデータを全部dictionaryに入れて、全部を一気に書き出すというコードを書いてみました。
--------------------------------------
【コード】
Option Explicit
Sub 所見読み込みdictionary()
Dim i, k As Integer
Dim myDic As Object
Application.ScreenUpdating = False
Set myDic = CreateObject("Scripting.Dictionary")
'myDicにKeyとItemを格納する
i = 0
For k = 7 To 397 Step 10'''10行飛ばし
myDic.Add i, Workbook("aaa").Sheets("aaa").Cells(k, "D").Value
'''''''''★iをキーのカウントとして使用
i = i + 1
Next k
''''''★Itemを一括で書き出す
For i = 0 To myDic.Count - 1
ThisWorkbook.Sheets("bbb").Cells(i + 2, "C").Value = myDic.Item(i)
Next i
Set myDic = Nothing
''''''''''''''''''''''''''''''''''''''''
Application.ScreenUpdating = True
End Sub
------------------------------------------
i(連番)を使うだけで、dictionary処理が書けちゃいます。
処理時間は、最後の書き出し回数が少ない方が速いですね。
実務では、これを複数ブック読み込みにして、約1000人分を
一気に処理できるようにしています。
とにかく、このコードが学校の事務処理でdictionaryを使う時の基本みたいな感じがします。
あと少しでゴールですね。お互い頑張りましょう!
では、また(^^)/