【ExcelVBA入門】配列内部の検索方法!高速化対応についても徹底解説

皆さんは、VBAで配列のデータを検索する方法を知っていますか?

配列はデータをひとまとめにして使うことができるので便利なのですが、配列の中の特定の文字が入った値を使うケースはよくあります。

そこで今回は、

・配列とは

といった基礎的なことから、

・配列のデータから部分一致で検索する方法

・配列のデータから完全一致で検索する方法

・その他覚えておくと便利な配列操作

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

配列とは

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

配列とは、「一度に複数の値を格納することができる変数」のことです。

配列内のひとつひとつのデータは、要素と言います。

要素には添字を指定することで、データにアクセスすることができます。

言葉だけではわかりづらいので、簡単なサンプルを用意しました。

サンプルコード:

この例では、「strMessage」が配列になっており「strMessage(3)」と指定することで、要素が3つの配列を宣言しています。

strMessage(1)」「strMessage(2)」「strMessage(3)」のようにそれぞれアクセスすることで、値の出し入れをすることができます。

このように、まとめてデータを保存しておきたいときに使えるのが配列です。

また、配列には静的配列動的配列があります。

静的配列・動的配列の違い、動的配列の詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】使いこなすと便利な動的配列の使い方について徹底解説!
更新日 : 2018年8月29日

配列のデータを検索する方法

配列のデータを検索する方法は、大きく分けて2つあります。

方法1:Filter関数で部分一致検索

はじめに、Filter関数を使って部分一致で検索する方法について解説します。

Filter関数は、次のように使います。

引数はそれぞれ次のような意味があります。

  • SourceArray:抽出元の配列
  • Match:検索する文字列
  • Include:一致/不一致のどちらを取得するか指定 (Trueで一致)

Include省略可能で、省略するとTrueになります。

そのため、検索して見つかった配列を調べたい場合は省略、検索して見つかった配列以外を調べたい場合はIncludeをFalseで指定すればOKです。

結果は、配列として返ってきます。

言葉だけだとわかりづらいので、サンプルコードを用意しました。

サンプルコード:

実行結果:

太郎」「次郎」「侍エンジニア太郎」を入れた配列(strMessage)から、「太郎」含む文字列を「Filter(strMessage, "太郎")」で取得し、For Each文でデータを出力しています。

このように、部分一致で確認する場合はFilter関数が便利です。

方法2:For文 + StrComp関数で完全一致検索

次に、完全一致で検索する方法について解説します。

完全一致を検索する場合は、For文配列のデータ数分処理をループし、ループ処理の中でStrComp関数を使って完全一致を判定します。

こちらも、サンプルコードを用意しました。

サンプルコード:

実行結果:

UBound関数を使って配列の要素数を取得し、配列の要素数分処理をループしています。

また、「StrComp(strNameList(i), "侍エンジニア太郎") = 0」で完全一致になっているデータの場合のみ、データを出力しています。

ちなみに、以下記事でUbound関数StrComp関数の詳しい使い方について解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】文字列を完全一致・部分一致で比較する方法とは
更新日 : 2019年5月4日

配列の中を検索する処理の速さ比較

Filter関数部分一致ですが、全ての文字列を検索文字列に入れれば完全一致としても検索できます。

そうなると、「Filter関数」と「For文 + StrComp関数」どちらを使えばいいか迷ってしまいますよね。

使いやすさももちろん大事ですが、処理の速さに応じて使い分けるのがおすすめです!

Filter関数を使ったほうがFor文でループ処理を使うよりも処理が速いため、速度重視の場合はFilter関数、複数条件で一致する文字を検索したい場合はFor文 + StrComp関数を使えばOKです。

ちなみに、処理にかかった時間はTimer関数を使って簡単に確認できます。

時間をはかるためのサンプルコード:

このサンプルでは、メイン処理に書いたコードにかかった時間を「processTime変数」へ取得しています。

Timer関数を使った処理時間の確認方法については以下記事で解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】処理時間を計測するためのTimer関数の使い方とは
更新日 : 2019年5月3日

補足:その他の配列操作について

ここまで配列内のデータを検索する方法について解説してきました。

配列はとても奥が深いため、他の記事でも使い方をまとめています。

配列の初期化配列操作総まとめについて以下で詳しく解説しているので、合わせてみてみるのがおすすめです!

【VBA入門】配列の初期化(ReDim、Preserve、Array、Erase)
更新日 : 2019年4月21日
【VBA入門】配列総まとめ(初期化、ループ操作、コピー、結合、比較)
更新日 : 2019年4月18日

まとめ

今回は、VBAで配列のデータを検索する方法について解説しました。

配列は大量のデータを1つにまとめることができるので、とても便利ですよね。

今回解説したデータ検索方法を覚えておけば、配列操作がぐっと楽になるので、ぜひ使ってみてくださいね!

LINEで送る
Pocket

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

cta_under_bnr

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

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

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

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

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

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

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

おすすめコンテンツ

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

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