見出し画像

【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ファイルを作ります。


ここから先は

15,132字 / 24画像

¥ 500

この記事が気に入ったらサポートをしてみませんか?