HOWTO · VBA

VBA を使用して Excel で特定の範囲から配列を作成する

この記事では、VBA を使用して Microsoft Excel で特定の範囲を使用して配列を作成する方法について説明します。

このページの内容

このチュートリアルでは、VBA の配列について説明し、VBA を使用して MS Excel で指定された範囲を使用して配列を作成する方法を示します。

本題に入る前に、VBA の配列について学習することが不可欠です。 それから始めましょう。

VBA の配列

配列は、インデックスを使用してアクセスできる同様のオブジェクトのコレクションです。 VBA で配列を定義するのは非常に簡単です。 VBA では、静的配列 と 動的配列 の 2 種類の配列を宣言できます。

静的配列 は、定義された値の数だけを格納できる固定サイズの配列です。 サイズ 7 の string データ型の配列を宣言する次の例を参照してください。

 Dim arr(7) As String

動的配列 には定義されたサイズがなく、プログラムに沿って拡張できます。 以下の 2つのステートメントのいずれかを使用して宣言できます。

Dim arr() As String

また

Dim arr As Variant

VBA で配列に値を代入するのは非常に簡単です。 静的配列 の場合、次のステートメントを使用して値を割り当てることができます。

arr (index) = Value

最初は、動的配列 はサイズで宣言されていません。 したがって、値を 動的配列 に割り当てるには、サイズを指定して再宣言し、任意の値を割り当てます。

ReDim arr(size)
arr (index) = value

VBA の配列について十分に理解したところで、VBA を使用して Microsoft Excel で指定された範囲の配列を作成する方法を学びましょう。

特定のセル範囲で配列を作成する

上記のセクションでは、単純な配列を宣言する方法について説明しています。 ただし、Microsoft Excel で特定のセル範囲の値を含む配列を作成することについては触れていません。

セル値を配列に割り当てるには、次のコード ステートメントを使用できます。

Dim arr As Variant 
arr= Range("A1:A10").Value

arr は 動的配列 として宣言されているため、割り当てられたセル範囲を受け入れることができます。 コード ステートメントは完全に実行されますが、セル範囲 A1:A10 に対して 2 次元配列が作成されます。 下の画像でそれを見ることができます:

VBA を使用して Excel で特定の範囲から配列を作成する - 画像 1

注意: 配列のインデックスは、0 ではなく 1 から始まります。

ユーザー、特に初心者にとって、2 次元配列を操作するのは難しい場合があります。

したがって、2 次元配列を 1 次元配列に変換できるソリューションを見つけることが不可欠です。1 次元配列を使用する方が常に簡単だからです。

2D 配列を 1D 配列に変換する

2 次元配列を 1 次元配列に変換する場合、2つのシナリオがあります。 1つのシナリオは、セル範囲が列の範囲である場合です。 もう 1つのシナリオは、セル範囲が行の範囲である場合です。

列のセル範囲

列の値を 1 次元配列に格納する場合は、Range() 関数で Application.Transpose() 関数を使用できます。

Range() 関数で指定された列範囲のセル値を含む 1 次元配列を返します。 そのために、次のコード フェンスを使用できます。

Dim myArr As Variant
myArr = Application.Transpose(Range("A1:A10"))

実行時に、コード ステートメントは次の結果を生成します。

vba を使用して Excel で特定の範囲から配列を作成する - 画像 2

行セル範囲

行の値を 1 次元配列に格納する場合は、Application.Transpose() 関数を Range() 関数で 2 回使用する必要があります。

結果の配列は、Range() 関数で言及された行範囲からのセル値を含む 1 次元配列になります。 これを行うには、次のコード ブロックを使用できます。

Dim myArr As Variant
myArr = Application.Transpose(Application.Transpose(Range("A1:J1")))

実行時に、コード ステートメントは次の結果を生成します。

vba を使用して Excel で特定の範囲から配列を作成する - 画像 3

注: どちらのシナリオでも、配列はインデックス 0 ではなくインデックス 1 から始まることに気付きました。 Application.Transpose() 関数は配列のインデックスを変更しません。

Microsoft Excel の新しいバージョンでは、Application.Transpose() 関数の修正バージョンが使用されていることに注意することも重要です。

Application.WorksheetFunction.Transpose() は、新しいバージョンの Microsoft Excel で Application.Transpose() 関数の代替として使用されます。