【Excel】2次元配列に入れて2次元配列を出力する(速読VBA単語Program3-7)
ExcelVBAで、セルの値を読み書きするのは時間がかかります。したがって、ループでRange()やCells()を繰り返すのは極力避けるのが大原則です。ある程度VBAのスキルがあり、慣れている人であれば、当然Range()やCells()の使用回数、実行回数が少なくなるようにコードを記述するはずです。
しかし、残念ながら、そのことを知らずにExcelVBAを使っている人が多いようです。ループでCells().Valueを何万回も繰り返して、カーソルがくるくる回って画面がちらつく見苦しいマクロをよく見かけます。ExcelVBAの使い方が間違っています。2次元配列も知らずにマクロを作っているのか・・・と本当に呆れてしまいます。
Excelの表は、ものすごく大きな表でない限り、いったんセルの値を「2次元配列」に一括で保存します。これは基本中の基本です。そして、処理結果をシートに出力するときも、2次元配列をそのままExcelに貼り付けます。表のまま保存して、表のまま貼り付けるイメージです。2次元配列を使ったほうが、実行してから処理が終わるまでのスピードが圧倒的に速いです。
もちろん、2次元配列は万能ではないので状況に応じて使うべきであることは言うまでもありませんが、2次元配列は、ExcelVBAを使うすべての人が当然に知っていなければならない基本知識の1つです。
そこで、今回は、2次元配列による一括処理について徹底的に解説します。皆さんもぜひ2次元配列の基本を習得して、早撃ちガンマンのような超高速なVBAを記述しましょう。
Program3-7の最終目標
目次の最後にある長文読解の問題文をここに示します。このプログラムでは次のことを習得することができます。
・2次元配列の入出力、セル範囲の入出力
・ワイルドカードを使った縦横2方向の探索
・宣言、入力、演算、出力に分けたコードの記述
Sub VBA3_7()
Dim r1 As Range
Dim r2 As Range
Dim r3 As Range
Dim r4 As Range
a = Sheets(1).Range("A1:E13")
max1 = UBound(a, 1)
max2 = UBound(a, 2)
ReDim b(1 To max1, 1 To 2)
Set r1 = Sheets(2).Range("B1")
Set r2 = Sheets(2).Range("B3")
Set r3 = Sheets(2).Range("B4")
Set r4 = Sheets(2).Range("A6")
shiten = "*" & r1 & "*"
r2.Value = ""
r3.Value = ""
r4.Resize(100, 2).ClearContents
plus = 0
minus = 0
cnt = 0
For i = 2 To max2
If a(1, i) Like shiten Then
b(1, 2) = a(1, i)
cnt = 1
For j = 2 To max1
tsuki = a(j, 1)
kingaku = a(j, i)
If kingaku > 0 Then
cnt = cnt + 1
b(cnt, 1) = tsuki
b(cnt, 2) = kingaku
plus = plus + kingaku
Else
minus = minus + kingaku
End If
Next
Exit For
End If
Next
Sheets(2).Select
r1.Select
If cnt > 0 Then
r2.Value = plus
r3.Value = minus
r4.Resize(cnt, 2) = b
Else
MsgBox "Not Found"
End If
End Sub
練習問題(無料)
速読VBA単語Program3-7までを出題範囲とする練習問題を無料で公開しています。
注意事項
「速読VBA単語」は、文法を完全に無視して、難易度順に単語練習をするだけでExcelVBAを習得しようという「邪道」な企画です。本講座は、極めて強い副作用があり安全上注意が必要です。この説明書は本講座を正しく受講するための説明文書です。受講する前に必ずお読みください。
無料ゾーンご案内
速読VBA単語Program1-1, Program1-2, Program2-1は無料で公開しております。ぜひご覧ください。
https://note.mu/waenavi/m/m9b0d82084b88
また、WordやExcel(マクロ以外)の記事はすべて無料で公開しております。
https://note.mu/waenavi/n/nfc3ff98822cc
0.実験用Excelファイルの準備
まずは、今回のプログラムで使用するExcelファイルを作ります。
ここから先は
¥ 500
この記事が気に入ったらサポートをしてみませんか?