エクセルで楽々校務

学校現場で使えるエクセルファイルや小技の紹介をしています。掘り出し物があるかもしれません。あと、今までの実践での疑問点もつぶやきます。

【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にKeyItemを格納する

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を使う時の基本みたいな感じがします。

 

あと少しでゴールですね。お互い頑張りましょう!

 

では、また(^^)/