【ExcelVBA入門】二次元配列とは?実践的な使い方についても徹底解説

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAで二次元配列を使ったことがありますか?

データをリストにして同じ変数名で管理できる配列なので使ったことがある方はいるかもしれませんが、2次元配列を使ったことがない方も多いのでは?

そこで今回は、

  • 配列とは
  • 二次元配列の基礎的な使い方
  • 途中で要素数を増やす方法
  • 要素数の数分ループ処理する方法

といった基本的な方法から応用的な方法まで、徹底的に解説します!

配列とは

まず、配列について簡単に解説します。

配列とは、データをひとまとまりで使うための変数です。連続したデータを使って処理を組み込みたいときに使います。

たとえば、次のようにセルのデータを配列でまとめて扱うことができます。

セルのデータ:

このサンプルを配列データで格納する方法は次のとおりです。

配列使ったサンプルコード:

実行結果:

はじめに、要素が5つある配列を以下で宣言しています。

次に、「strName(要素) = Worksheets(“Sheet1”).Range(セル名).Value」で0番目の要素からセルの値を配列に入れています。

このように、配列では1つの配列名で複数のデータを扱うことができます。

2次元配列とは

ただ、Excelではさきほどのように1列のみのデータを扱うことは少ないですよね。

二次元配列を使えば、複数行・複数列のデータを配列で扱うことができるのでおすすめです!

先ほどのサンプルにNo、部署を追加して、部署と名前を配列で格納するサンプルを用意しました。

セルのデータ:

二次元配列使ったサンプルコード:

実行結果:

一次元配列では変数宣言時に配列名(要素数)で変数宣言してましたが、二次元配列では配列名(要素数A、要素数B)のようにカッコ()の中の要素数の数が増えます。

今回は「Redim strName(1, 4)」で要素数Aが2つ、要素数Bが4つを指定しています。

要素数Aで列数、要素数Bで行数を指定するイメージですね。

このようにすることで、複数行・複数列のデータを簡単に二次元配列で扱うことができます。

二次元配列の実践的な使い方

ここからは、二次元配列の実践的な使い方について解説します。

途中で要素を追加する方法

Excelのデータは、途中で増えるときもありますよね。

そのため、要素数を後から増やす方法を覚えておくのがおすすめです!

例えば、さきほどのデータが6行に増えた場合などですね。

この場合、元の値を残しつつ1行分のデータのみ追加したいですよね。

元の値を残しつつ要素数を増やしたいときは、Redimの後にPreserveをつけて次のように宣言します。

5行分のデータを配列に設定したあと、6行目のデータを追加するサンプルを用意しました。

サンプルコード:

実行結果:

元の値を残しつつ、要素数を追加することができましたよね。

このように、要素数を簡単に変更することができます。

ちなみに、二次元配列で要素数を変更する場合は、要素Aの数は変更できないため注意してください。

今回のケースでいうと、「部署 + 名前」だけでなく「部署 + 名前 + No」を配列にしたい場合「strName(1,4)」から「strName(2,4)」にしても、エラーになってしまいます。

要素数Aを変更してエラーが出るサンプルコード:

実行結果:

二次元配列では要素数Aは変更できないので、どうしても変えたい場合は、最初にRedimで要素数を指定するときの処理を書き換えるのがおすすめです。

要素数の数分処理をループする方法

次に、要素数の数分処理をループする方法について解説します。

先ほどのサンプルでは、配列にデータを入れるとき次のように書いていました。

これでは、要素数が増えるたびに行数が増えてしまうため少し見づらいですよね。

配列の要素数を取得するUBound関数と、For文を使えば簡単に配列の数分処理をループすることができます。

サンプルコード:

UBound(strName, 次元数)」で指定した次元の要素数を取得することができます。

そのため、「For i = 0 To UBound(strName, 1)」で要素Aの数分ループ処理を行い、「For j = 0 To UBound(strName, 2)」で要素Bの数分ループ処理をしています。

このように、Ubound関数 + For文を使えば、二次元配列をつかいやすくなるので覚えておくのがおすすめです!

Ubound関数の使い方For文でループ処理する方法については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【VBA入門】UBound、LBound関数で配列の要素数を取得
更新日 : 2019年4月24日
【VBA For Next】ループ処理の基本を5つのステップで完全理解
更新日 : 2019年4月20日

まとめ

今回は、VBAで二次元配列を使う方法について解説しました。

配列が上手く使いこなせるようになると、大量のデータも扱いやすくなるのでおすすめです!

使い方も簡単なので、ぜひ使ってみてくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説