「はぁ……またExcelが『応答なし』になっちゃった。1万行のデータをコピペするだけで、どうしてこんなに時間がかかるの?」
大量の請求データや顧客リストの処理に、日々頭を悩ませてはいませんか?
実はその悩みは、「2次元配列」という技術を活用することで、一瞬で解決できるかもしれません。
今回は、初心者が壁を感じやすい一方で、習得すれば劇的に効率が変わる「2次元配列」について、分かりやすく解説します。
2次元配列は「住所がある多目的ロッカー」
プログラミングの世界で「配列」というのは、複数のデータを整理して格納するための「箱」のような存在です。
普通の配列(1次元)が「横一列に並んだ靴箱」だとしたら、2次元配列は「縦にも横にも並んだ、マンションの郵便受け」をイメージすると分かりやすくなります。
- 1次元配列: 101号室、102号室、103号室……(横のつながりだけ)
- 2次元配列: 1階の101号室、2階の201号室……(「階」と「部屋」の2つの数字で場所が決まる)
Excelのシートも「行」と「列」で場所が決まりますよね。
つまり、2次元配列とは「プログラムのメモリの中に作成する、目に見えない仮想のExcelシート」と言い換えることができます。
なぜ2次元配列を使うと「爆速」になるのか?
鋭い方は「Excelのシートがあるなら、わざわざメモリの中に作る必要はないのでは?」と疑問に思うかもしれません。
実は、VBAなどのプログラムがExcelの「セル」へ一回一回直接アクセスする動作は、人間がその都度席を立って紙に書き込みに行くような、非常に負荷のかかる作業なのです。
対して、2次元配列を用いたメモリ上での処理は、いわば「頭の中で思考する」ような速さで完結します。
例えば、1万行のデータを1セルずつ書き換えて1分(60秒)かかる作業も、配列に一度読み込んで一括で処理を済ませれば、0.1秒以下という驚異的なスピードで完了することも珍しくありません。
失敗から学んだ経験:PCをフリーズさせてしまった新人時代
私もVBAを学びたての頃、「全セルをループで書き換えるマクロ」を作りました。
実行ボタンを押してしばらくすると、処理する量が多すぎたようで、画面は白く固まり、カーソルが回り続けるばかり。 「PC壊れた?」と心配したものです。
その時、役立ったのが2次元配列でした。
「メモリ内で一括処理させる」という発想でコードを修正したところ、一瞬で作業が終わり、 感動したのを覚えています。
【コピペでOK】VBAで2次元配列を使ってみよう!
まずは一番身近なExcel VBAでの例です。シートの表を丸ごと配列に入れて、加工して戻すという流れです。
Sub ArrayExample()
Dim dataArray As Variant
Dim i As Long, j As Long
' 1. セル範囲(A1:B10)のデータを一気に「配列」という箱に入れる
dataArray = Range("A1:B10").Value
' 2. 配列の中身をループで処理する(メモリ内なので一瞬)
' LBoundは最小の添字、UBoundは最大の添字のことです
For i = LBound(dataArray, 1) To UBound(dataArray, 1) ' 行のループ
For j = LBound(dataArray, 2) To UBound(dataArray, 2) ' 列のループ
' 例として、文字の後ろに「済」と付ける
dataArray(i, j) = dataArray(i, j) & "済"
Next j
Next i
' 3. 最後に一気にシート(D1セル起点)に書き出す
Range("D1").Resize(UBound(dataArray, 1), UBound(dataArray, 2)).Value = dataArray
MsgBox "処理が完了しました!"
End Sub
まとめ:2次元配列は「効率化のチート技」
2次元配列を使いこなせると、以下のメリットがあります。
- 処理時間が劇的に短縮される
- Excelのフリーズを回避し、安定性が向上する
- 大規模なデータセットもスムーズに扱えるようになる
最初は難しく感じるかもしれませんが、「表データをメモリに展開するための便利な箱」という理解から始めれば十分です。 少しずつコードを書いて、その圧倒的なスピードを体感してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント