はじめに

今回はVBAの配列について③です。今回は、配列の次元について説明させていただきます。
本サイトでは、プログラミング初心者の方向けの丁寧な解説方法で紹介させていただいております。

この記事の概要

  • 使用頻度:
  • 難易度 :
  • 重要度 :
この記事を読んでわかること
  • 次元とは
  • 2次元配列の使い方
  • 繰り返し処理(For文)を利用したサンプルコードのご紹介

詳しく解説していきます

一般的に次元とは何?

配列は次元という表現を使います。一般的に次元とは、空間の広がる指数を指します。
よく3Dや4Dって耳にすると思いますが、これも次元の事を指しています。
厳密には3次元と3Dという用語は使う場面等が少し異なるようですが、意味合いはほとんど同じです。

1次元、2次元、3次元とはどんな意味・・・?
  • 1次元 1方向、直線(横、または縦のみ)
  • 2次元 平面(縦横)
  • 3次元 立体(縦横+奥行) 私たちがいるこの空間
  • 4次元 横:x軸 縦:y軸 奥行:z軸 +α軸が存在する空間の事
一次元
2次元
3次元


4次元はなんやら難しいですね。映画やアトラクションだと、4Dは3D+αな特殊効果(香り、風等…)として表現されています。

数学的には+αで考えられているのは時間軸と捉えられています。
飛行機の運航システムなどは、縦横奥行+時間軸の中でシミュレーションされているのではと思います。大繩を飛ぶ、バットを振るタイミング等も無意識に4次元の計算が脳内でされているのかもしれないです。

配列の次元とは何?

VBAの配列でも1次元配列、2次元配列、それ以上の多次元配列が存在します。
1、2次元に関しては標準的な次元の考えと同じです。

  • 1次元は1方向なので、上下又は左右のみ(リスト)のデータの処理に利用されます。
  • 2次元は上下左右(表形式)のデータ処理が可能な配列になります。

VBAで配列はなんと60次元まで設定できるそうですが、1次元配列と2次元配列の学習をすれば十分です
60次元の配列…筆者には想像できません

Excelのワークシート自体が、行列2方向なので2次元配列でばっちり表の値の代入が可能です。
3次元だと複数のワークシートでの作業などに利用する事もあるようですが、当サイトでは1次元と2次元配列について説明させていただきます。

当サイトの配列②でお伝えした構文等はすべて1次元配列です。
また次元によらず静的、動的どちらも利用可能です。

1次元配列は要素が1方向に並んだデータを扱う際に使用します。

1次元配列例

宣言方法や値の代入の仕方は配列②でご紹介した内容を参照ください。
詳しくは下記サイト内記事をご覧ください。

2次元配列の考え方

1次元配列は 配列名(要素数) As データ型 で宣言しましたが、
2次元配列は 配列名(要素数1,要素数2) As データ型 という 書き方をします。

1次元の時は直線的な要素の指定でしたが、2次元だと縦横の2方向の要素数の指定が必要な為このような宣言方法になります。じゃあ、要素数1が横?縦?と疑問になるかと思いますが、配列自体に向きの決まりは無く自身で定義し使用する必要があります。

決まりはないですが、おすすめの使い方は 「配列名(縦要素数,横要素数)」です。
なぜかと言うと(値,値)の書き方ってCellsプロパティの書き方と似てると思いませんか。
筆者は結構頭が固いタイプで、理論的に納得しないと中々受け入れられず…同じようなタイプの方は配列名(縦要素,横要素)の使い方を強く進めてみます

Cellsプロパティに合わせて配列名(要素数1=縦要素数,要素数2=横要素数)としてExcelの表のサイズに合わせて配列の要素数を想定してあげるとよいです。

CellsプロパティはCells(行,列)でワークシートの位置を指定します。

サイト内参照です
Cellsプロパティ

また表のデータを代入するとなると、”文字”や”数字”、”日付”と複数のデータ型のリストが混在するケースが多いです。なので、なんでも屋さんのデータ型”Variant”として配列を宣言することをおすすめいたします。

これらの2次元配列の筆者なりのルールを踏まえて、構文や具体的な使い方の説明をさせていただきたいと思います。


静的2次元配列

静的2次元配列の宣言

静的2次元配列は宣言時に、各要素数を確定して宣言を行います。
プログラム実行時に後から要素数を変更することはできません。

  • 構文】:Dim 配列名(要素数1,要素数2) As データ型
  • 【例文】:Dim vbdate(3,2) As Variant
  • 【解説】:要素数1後に”,”で区切って要素数2を明記してください。
要素数宣言イメージ

例文のサイズで配列を宣言すると、格子状で12個の要素を格納できる配列が出来ます。

縦横に規則はないので、2パターンの表の配列がイメージできます。

静的2次元配列への代入、使用例

2次元配列への値の代入方法等、サンプルコードを用いて説明していきます。

2次元配列と組み合わせて使用する事が多いのが「For~Next」です。
データの数が多い場面では、配列もFor文も必要になります。組み合わせで使うパターンが非常に多いので、少し複雑になりますがセットでの使用法を紹介していきます!!

  1. 2次元配列実践①で解説します】セルの値を2次元配列に代入してみよう!
    • For~Nextを使ってセルの値を配列に代入する方法の確認を行います。
  2. 【サンプルコード②で解説します】2次元配列に格納した値をセルに代入してみよう
    • サンプルコード①で使用した配列をセルに代入します。

慣れるまで少し難しい所になりますので、丁寧に解説していきたいと思います。

2次元配列実践
STEP1
値を代入したいExcelの表の確認

配列代入用リスト

Xmasプレゼント希望の表

ゆきまま家のくだらない表で解説します
Xmasプレゼント調査です。
格納したいデータの数はセルA2~C5の12個で、
縦4マス分×横3マス分です。
データ型は文字と整数型なのが確認できます。

STEP2
配列の要素数を決めよう

表の形状と格納するデータ型が1種類ではない事から・・・

宣言する配列は 「配列名(3,2) As Variant」 が最適と判断できます。
※注意:配列のインデックスは0から数えます

つまり、サンプルの表の値を右の図のインデックスの配列に代入していく事になります。

要素数イメージ
STEP3
サンプルコードを確認しよう

下記がサンプルの表のデータを配列【vbdate(3,2)】に格納するプログラムのコードのサンプルと、ローカルウィンドウの実行結果です。

4~8行目がFor文と、配列の組合せで分かりにくい所ですのでくどい程詳しく解説していきます。理解度問題無ければサラっと読み飛ばしちゃってください

For文の詳しい解説
2次元配列解説用例文
FOR文と配列解説
サンプルコード
  1. Sub 静的2次元配列の利用()
  2. Dim vbdate(3,2) As Variant
  3. Dim i As Long,j As Long
  4. For i = 0 To 3
  5.  For j = 0 To 2
  6.   vbdate(i,j)=cells(i+2,j+1).Value
  7.  Next
  8. Next
  9. End Sub

ローカルウィンドウの結果

コードを入力後「F8」キーでプログラムを1行ずつ実行してみましょう。ローカルウィンドウを見ると、配列に値が格納されていく様子が確認できますよ。

「For文を使用して、セルの値を配列に格納する」のサンプルでした。

配列実行結果
2次元配列実践

サンプルコード1では、セルに入っている値を配列に代入する方法を確認しました。
今度は配列に入れたデータを、別のセルに書き出す方法を実践的に学習していきたいと思います。
12個のデータ数がありますので、今回もFor~Nextを使用して転記していきます。

STEP1
セルに代入する配列の確認
配列の中身

先ほどのサンプルコードで、2次元配列vbdateには12個のデータが左図のインデックス番号で格納されます。
この配列から目的の値を取り出し、セルに代入する方法を確認していきたいと思います。

STEP2
実行結果の確認

先に実行したい結果を確認してみましょう。
今回は配列の値そのままセルに代入するのでは無く、表示形式を変えてセルに代入する方法でご紹介します。

ABCグループ
  • 転記場所…A10~B13
  • 転記内容
    • A列…配列vbdateのAグループと配列vbdateのBグループを、文字列「の」でつないで記載
    • B列…配列vbdateのC列と「円」
STEP3
コードの検討

コードの検討を始めます。
まず、基礎情報として変数や配列または文字列を連結する演算子は「&」です。
つまりA、B列にはそれぞれ下記のような内容を指定する事になります。

A列・・・vbdate(Aグループ) & “の” & vbdate(Bグループ)
B列・・・vbdate(Cグループ) & “円”

文字列は””(ダブルクォーテーション)で囲んで指定してね

次にコードでどう書くか考えます。

  • 【A10】:vbdate(0,0)&”の”&vbdate(0,1)


10行目:vbdate(0,0)&”の”&vbdate(0,1) (A10)  vbdate(0,2)&”円” (B10)
11行目:vbdate(1,0)&”の”&vbdate(1,1) (A11)  vbdate(1,2)&”円” (B11)
12行目:vbdate(2,0)&”の”&vbdate(2,1) (A12)  vbdate(2,2)&”円” (B12)
13行目:vbdate(3,0)&”の”&vbdate(3,1) (A13)  vbdate(3,2)&”円” (B13)

A列B列
10行目画伯のおそ松さんグッズ4000円
11行目親分のあったかパンツ3800円
12行目ゆきままのパジャマ4500円
13行目忍者のポケカ5000円

だいぶそれっぽくなってきました。
これをFor文を使って繰り返し処理でまとめて書くにはどうするのかまた考えてみましょう。
行ごとに変化する部分に注目です。

STEP4
サンプルコードを確認しよう
For文の詳しい解説
サンプルコード 静的2次元配列の利用②
  1. Sub 静的2次元配列の利用2()
  2. Dim vbdate(3,2) As Variant
  3. Dim i As Long,j As Long
  4. For i = 0 To 3
  5.  For j = 0 To 2
  6.   vbdate(i,j)=cells(i+2,j+1).Value
  7.  Next
  8. Next
  9. ‘—————–ここから転記作業——————-
  10. i = 0
  11. For i = 0 To 3
  12. Cells(i + 10, 1).Value = vbdate(i, 0) & “の” & vbdate(i, 1)
  13. Cells(i + 10, 2).Value = vbdate(i, 2) & “円”
  14. Next
  15. End Sub