Excelでロジックを組む際の心得

当たり前といってしまえばそれまでなのですが、プログラムを組むうえでどのようなロジックにすべきか考えることは非常に重要です。

それは.NET Frameworkアプリであっても、Excel VBAであっても同じことです。
それを感じることができたタイミングがあったのでちょっとご紹介。

急ぎでデータを集計する必要があり、Excelにテータを展開し集計処理を行うアプリを作らなくてはならなくなりました。急いでいたこともあり細かく考えずにExcel VBAでロジックを組んでいったのですが、明細データを元に親に足し込んだ数を渡すプログラムを用意する必要が出てきたのです。

もちろん実効データ量などを意識するわけもなく、つらつらと2重ループをくみ上げて計算処理は完成。本番データを用いて動作させると、10分程度応答がなくなることがわかり、砂時計を組み込んでそのプログラム作成は終了となりました。

自分で使うものだったのでそのロジックのまま3年くらい利用していたのですが、改修するタイミングができたので2重ループからディクショナリを用いてメモリ上で計算するように方式を変更することに。

もともと2重ループで700回×1,600回の計算処理(なんと計算回数112万回!)だったところを1,600回のループと700回のループに分けたことで計算回数が2,300回まで減り、同一の処理が1秒足らずで完了するようになりました。

作成当初は1回限りで役割を終える予定だったものの、あれよあれよと使い続けるというケースはExcelロジックではよくあることのように思えます。

自分のやりたいことに適したロジックを見つけるのは骨の折れる作業ですが、ちょっとの頑張りが大きな一歩になることも多くあるので、たまには振り返ってみるのもよいかもしれませんね。

本日の教訓

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "key", "value"
dic.exists("whokey")
dic.Item("key") = dic.Item("key") + "A"
は神。

音楽:Flower of yesterday's