Translate

EXCEL-VBAでやってはいけない処理速度改善方法

配列化しても処理速度が落ちてしまう実装方法




折角配列化して処理速度改善を行っても、処理速度が改善しなくなる処理


図のように、配列化しても、データ取得の特定のデータに行きつく為に、アクセスを判別する処理が、毎回必要とする処理を実装してしまうと処理速度が大幅に落ちてしまう事がある。

データベースのようにインデックス化されたデータベースから引用する場合には問題ないが、Excelシートの情報をそのまま配列化した場合に、データベースのようなアクセス方法で実装してしまうと、処理速度の改善がされない場合がある。

何故なら、特定のデータにアクセスする為に、毎回全件データを走査していく必要があるからだ。

Excelシート情報を配列化した処理で、処理速度改善を実現する方法とは?


何も事前処理されていないExcelシートの情報をそのまま配列化して、特定の加工を施し、データを転記する場合、加工の為に配列化された情報か特定のデータに辿り着くまで毎回アクセスする必要が出てしまい、この特定のデータに辿り着く振る舞いを、1万件、2万件のデータで行うと、少量では気が付きにくかった処理時のオーバーヘッドが積み上げられ、非常に遅くなってしまう結果となる。

処理に必要なデータ順に並び替え、特定のキーが変わったら(キーブレイク)したら、次種類のデータとなったと判別するようにすると、データアクセスの度に全件アクセスを行う必要が無くなり、処理速度がかなり改善される。

配列化されたデータアクセスの処理改善まとめ


処理の度に、毎回全件データアクセスを必要とする構造を廃止し、処理が必要な順にデータを並び替え、データの上から順に一巡するだけで処理が完結する構造とすると、処理速度が随分改善する。

数十分単位だったものが、数秒で終わるケースもこれまでに経験しており、処理を便利に高機能にしたいと走ってしまった場合、大量のデータに遭遇した場合、処理速度の問題にぶつかるであろう前に、ユーザーエクスペリエンスを優先させるかを事前によく検討した方が良いと思われる事案の一件を紹介しました。

このブログの人気の投稿

VBAのADOで「パラメーターが少なすぎます。xを指定してください。」と表示された場合の原因

ACCESSでバーコードスキャンしたら自動でイベントを起こす方法

PostgreSQL 11 でpg_dumpallを使ってバックアップしたデータをリストアするとき文字化けの対処法

ACCESSのVBAを実行するとACCESSが強制終了する事がある

VBSでマクロの実行時に警告を非表示にする方法

ACCESSのVBAでADOを利用したバインド変数を利用したデータベース連携方法

ACCESSでバーコードをスキャンして登録更新する簡単なサンプル

pgAdmin 4が遅いのは仕方がない | PostgreSQL things.

ACCESSのVBAでリストビュー(ListView)を使う為の設定 | Office365

ASP.NETのでクライアント証明書を使ったログイン認証を行う方法