「VLOOKUP入れすぎてExcelが固まった…」——これ、Excelを使い込んでいる人ほどぶつかる壁です。便利なはずのVLOOKUPが、ある日突然"重さの原因"に変わる。この記事では、VLOOKUPをマクロで書き換えて処理速度を劇的に改善する方法をお伝えします。
あの日、私のExcelも止まった
正直に言うと、私自身がこの壁にぶつかった一人です。
当時、取引先のデータを月次で照合する業務がありました。数百行のうちは問題なかったVLOOKUPが、取引先が増えて1万行を超えたあたりから、再計算のたびにExcelが数分間フリーズするようになったのです。
🔧 「応答なし」の表示を見ながら、祈るように待つ毎月の集計日
💬 上司から「あの数字まだ?」と聞かれるたびに冷や汗
📂 ファイルを開くだけで席を立ってコーヒーを淹れに行く日々
「関数の使い方が悪いのか?」と調べ回りましたが、答えは違いました。VLOOKUPの仕組みそのものに限界があったのです。
なぜVLOOKUPは大量データに弱いのか
VLOOKUPは、1行ごとに検索範囲を上から下まで走査します。データが増えるほど、比較回数が掛け算で膨れ上がる構造です。
1万行×1万回のVLOOKUPなら、最大で1億回の比較処理。さらに別ブックや共有フォルダ上のファイルを参照していると、体感速度は数倍悪化します。
これは使い方の問題ではなく、関数の設計上の限界です。「もっと速い検索の仕組み」に切り替える必要があったのです。
救世主はVBAの「Dictionary」だった
試行錯誤の末にたどり着いたのが、VBAのDictionaryオブジェクトでした。Dictionaryはキーと値のペアでデータを保持し、キーを指定すれば一瞬で値を返してくれます。
実際に書き換えた結果がこれです。
📊 Before: VLOOKUP関数で1万行×1万行の照合 → 処理時間 約8〜10分
📊 After: VBA Dictionaryで同じ照合 → 処理時間 約5〜10秒(約98%短縮)
あの「コーヒータイム」が完全に消えました。
書き換えのポイントは3つだけです。
📌 ポイント1:データを配列に一括読み込み
セルを1つずつ読むのではなく、範囲全体を一度に配列へ格納します。これだけでセルアクセスが数万回→1回になり、劇的に速くなります。
📌 ポイント2:Dictionaryにキーを登録して瞬時検索
照合先データをDictionaryに入れておけば、キー指定で即座に値を取得。VLOOKUPのように上から順に探す必要がなく、データが増えても速度がほぼ変わらないのが最大の強みです。
📌 ポイント3:結果を配列にまとめて一括書き出し
出力もセルに1つずつ書くのではなく、配列にまとめてから一括でシートへ。入力も出力も「まとめて処理」が鉄則です。
月次集計で毎回10分待っていた処理が数秒で完了。年間に換算すると約20時間、人件費で約10万円相当の削減効果になります。
全部書き換える必要はない——判断基準はシンプル
ここで一つ大事なことをお伝えしたいのですが、すべてのVLOOKUPをマクロにする必要はありません。
その後、サプライヤー900社超のデータ管理を任されるようになり、さまざまな照合処理を扱ってきましたが、書き換えるべきかどうかの判断基準は意外とシンプルでした。
📌 データが5,000行を超える照合 → マクロ化を検討
📌 毎月・毎週繰り返す定型処理 → マクロ化の効果が大きい
📌 複数シート・複数ブックをまたぐ照合 → マクロ化で安定性も向上
数百行程度の一回きりの照合なら、VLOOKUPやXLOOKUPで十分です。大事なのは「どこがボトルネックか」を見極めて、適切な手段を選ぶこと。
実は「VLOOKUPが重くて業務が回らない」というご相談をいただくことがあります。話を聞いてみると、書き換えるべき箇所は意外と限られていて、ピンポイントの改修で一気に快適になるケースがほとんどです。
まとめ
VLOOKUPは優秀な関数ですが、大量データには構造的な限界があります。Dictionaryへの書き換えで処理速度は約98%改善でき、やり方もシンプルです。
「毎回待たされている処理」に心当たりがあれば、それが書き換えのサインかもしれません。まずは一番重いファイルから試してみてください。
✍️ 筆者プロフィール
大手外資系自動車メーカーのサプライチェーン管理部門で、国内外900社超のサプライヤー管理を担当。Excel VBA・Power Automate・Power Appsを活用した業務改善ツールの開発を得意とし、データ分析から経営報告資料の作成までワンストップで対応しています。
ココナラでも業務改善・Excel VBA・資料作成のご相談を承っています。