教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA プログラミング】(関数51)LBound・UBound関数のプログラミング例を教えて!(二次元配列)

f:id:m_kbou:20220105145455p:plain

LBound関数及びUBound関数を使用したプログラミング例を紹介します。

 

 

例題

都道府県別人口・面積一覧(A1セル~C9セル)があります。抽出条件(A12セル)には「道・都・府・県」が選択できる様にプルダウンリストがセットされています。この抽出条件からいずれかを選択し、<実行>ボタンをクリックします。その結果、抽出条件で選択した内容が含まれる都道府県データを抽出し、結果欄(15行目以降のA列~C列)に表示します。

[実行前]:

f:id:m_kbou:20220105145538p:plain

[実行後]:

f:id:m_kbou:20220105145550p:plain

 

プログラミング

プログラミングは以下の通りとなります。

[記述例]:

Option Base 0

Sub サンプル()

  '↓処理①
  Dim 二次元配列(7, 2) As Variant
  Dim 行 As Long
  Dim 列 As Long
  Dim w行 As Long

  '↓処理②
  If (Trim(Range("A12")) = "") Then
    MsgBox "抽出条件を選択して下さい。", 16, "メッセージ"
    Exit Sub
  End If

  '↓処理③
  Range("A15:C30").ClearContents

  '↓処理④
  w行 = 0
  For 行 = 2 To 9
    If (Right(Range("A" & 行), 1) = Trim(Range("A12"))) Then
      For 列 = 1 To 3
        二次元配列(w行, 列 - 1) = Cells(行, 列)
      Next
      w行 = w行 + 1
    End If
  Next
 
  '↓処理⑤
  For 行 = LBound(二次元配列, 1) To UBound(二次元配列, 1)
    For 列 = LBound(二次元配列, 2) To UBound(二次元配列, 2)
      Cells(行 + 15, 列 + 1) = 二次元配列(行, 列)
    Next
  Next

End Sub

処理①:変数定義
変数を定義します。

処理②:抽出条件の選択
A12セルの抽出条件が選択されている事を確認します。選択されていない場合は、”抽出条件を選択して下さい。”をMsgBoxで表示し、処理を中止します。

処理③:結果欄クリア
A列の15行目~C列の30行目までをクリアします。

処理④:都道府県別人口・面積データを二次元配列にセット
For~Next文を使用した2行目~9行目までの都道府県名(A列)・人口(B列)・面積(C列)のデータを変数:二次元配列にセットします。この時、IF文を使用してA12セルで選択した抽出条件を含む都道府県データのみをセットします。

処理⑤:結果欄に抽出データをセット
LBound関数及びUBound関数を使用し、変数:二次元配列の行に対する下限値~上限値と列に対する下限値~上限値までを各々For~Next文でループさせます。ループ処理の中では上記の処理④で抽出したデータを結果欄(15行目以降のA列~C列)にセットします。

との内容になります。

f:id:m_kbou:20220105145607p:plain

※上記の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。また、ボタンにプログラムを割り当てるにはこちらを参考にして下さい。

 

ダウンロード

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com