VBA - 値が配列に存在するかどうかを確認

VBA - 値が配列に存在するかどうかを確認

前書き

値が配列に存在するかどうかを確認するために、その要素をループ処理できます。 しかし別の解決策があります! Excel固有のINDEX()関数を使用できます。2次元配列の場合はINDEX / MATCH関数を組み合わせて使用​​します。 ただし、値が見つからない場合、 Application.Matchはエラーを返します。 考えられるエラーと配列変数の次元数を考慮する必要があります。

この小さな機能はあなたを助けてくれるでしょう!

Match機能を使う

 ブールとしての関数EstDans(mot As String、Tabl)

バイトとしての寸法、整数としてのj

エラー時に再開

IsError(UBound(Tabl、2))の場合、Dimension = 1 Else Dimension = 2です。

エラー時GoTo 0

ケース寸法の選択

ケース1

エラー時に再開

EstDans = Application.Match(mot、Tabl、0)

エラー時GoTo 0

ケース2

j = 1からUBoundへ(Tabl、2)

エラー時に再開

EstDans = Application.Match(mot、Application.Index(Tabl、、j)、0)

エラー時GoTo 0

EstDans = Trueの場合、終了します

終了選択

終了機能

関数を呼び出す

 サブテスト()

薄暗いTb()、私は整数として

2次元:

Tb =範囲( "A2:C16")値

Debug.Print EstDans(MaValeur、Tb)

Tbを消去

'tb 1次元:

ReDim Preserve Tb(15)

i = 0〜14の場合

Tb(i)=セル数(i + 2、1)

Debug.Print EstDans(MaValeur、Tb)

終了サブ

ループを使う

この関数の構造はMatchを使ったものと似ています。

 関数BoucleSurTabl(mot As String、Tb)

バイトとしてのディム寸法、長さとしてのi、長さとしてのj

エラー時に再開

IsError(UBound(Tb、2))の場合、Dimension = 1 Else Dimension = 2です。

エラー時GoTo 0

ケース寸法の選択

ケース1

j = LBound(Tb)からUBound(Tb)まで

Tb(j)= motの場合BoucleSurTabl = Trueの場合:終了関数

ケース2

i = LBound(Tb、1)からUBound(Tb、1)まで

j = LBound(Tb、2)からUBound(Tb、2)まで

Tb(i、j)= motの場合BoucleSurTabl = Trueの場合:終了関数

次のj

次の私

終了選択

終了機能

観察

どんな場合でも、Application.Matchを使用するよりも、大規模な配列でループ機能を使用する方が良い結果が得られます。

次の範囲( "A1:Y20002")で2次元配列をテストします。

  • Match機能を使用する:8.300781秒
  • ループを使用して:0.4375秒。

一次元配列をテストする:

  • Match機能を使う:instant
  • ループを使う:0.015625秒

ダウンロードリンク

  • サンプルワークブックをダウンロードすることができます://cjoint.com/?DHfpeqMBvRK
前の記事 次の記事

トップのヒント