ExcelVBAでは、in演算子をどうやって使うのだろう・・・
他の言語と同じようにExcelVBAでin演算子を使う方法はないかな?
別の方法で実現できるなら、それも知りたい・・・
別のプログラミング言語を知っている方は、同じような書き方でVBAを使いたい・・・と思いますよね。ExcelVBAで、in演算子と同じような使い方を知りたいと思っている方もいるのではないでしょうか。
こんにちは!フリーランスエンジニア兼テックライターのワキザカです。
この記事では、ExcelVBAでin演算子のような処理を作る方法について解説します!
この記事はこんな人のために書きました。
- VBAでin演算子と同じ使い方をしたい人
- 他の言語経験者でVBAをこれから始める人
ExcelVBAでin演算子を使う方法とは?
はじめに、ExcelVBAでin演算子を使う方法について解説します!
結論から言うと、他言語で便利なin演算子はVBAにありません。ただ、同じ用途で使う処理を作る方法はあります。
in演算子は、大きく分けて次の2つの用途がありますよね。
■in演算子を使う用途
- 配列の中の特定の値を探す
- 配列の数分処理をループ
VBAでどうやって同じ機能を作るか、それぞれ詳しく解説しますね。
in演算子代替え案1:配列の中の特定の値を探す方法
1つ目が、配列の中の特定の値を探す方法です。
VBAでは、Filter関数で部分一致、For文 + StrComp関数で完全一致で値を検索することができます。たとえば、Filter関数を使って次のように書くことで、部分一致で値を検索することができます。
サンプルコード:
Sub Sample() '言語の配列をセット Dim strPersonList() As String ReDim strPersonList(6) strPersonList(1) = "Pythonエンジニア1" strPersonList(2) = "Pythonエンジニア2" strPersonList(3) = "Rubyエンジニア1" strPersonList(4) = "Rubyエンジニア2" strPersonList(5) = "VBAエンジニア1" strPersonList(6) = "VBAエンジニア2" 'VBAで部分一致した値のみリストに格納 Dim strFilPersonList() As String strFilPersonList = Filter(strPersonList, "VBA") '結果を出力 Dim strPersonListChild As Variant For Each strPersonListChild In strFilPersonList Debug.Print strPersonListChild Next End Sub
実行結果:
VBAエンジニア1 VBAエンジニア2
この例では、strPersonListに入れたデータの中からFilter関数を使い、VBAの値が含まれているデータのみ出力しています。このように、Filter関数を使えば簡単に部分一致で値を取得することができます。
ちなみに、部分一致だけでなく完全一致の方法も知りたい方は、以下がおすすめです!
in演算子代替え案2:配列の数分処理をループする方法
2つ目が、配列の数分処理をループする方法です。
別の言語ではin演算子を使って作ります、VBAではFor Each文を使えば簡単に代替えすることができます。こちらもサンプルコードを用意しました。
サンプルコード:
Sub Sample2() '言語の配列をセット Dim strPersonList() As String ReDim strPersonList(6) strPersonList(1) = "Pythonエンジニア1" strPersonList(2) = "Pythonエンジニア2" strPersonList(3) = "Rubyエンジニア1" strPersonList(4) = "Rubyエンジニア2" strPersonList(5) = "VBAエンジニア1" strPersonList(6) = "VBAエンジニア2" 'VBAで部分一致した値のみリストに格納 Dim strPersonListChild As Variant For Each strPersonListChild In strPersonList Debug.Print strPersonListChild Next End Sub
実行結果:
Pythonエンジニア1 Pythonエンジニア2 Rubyエンジニア1 Rubyエンジニア2 VBAエンジニア1 VBAエンジニア2
strPersonListの配列の数分、For Eachで値をstrPersonListChildにいれて、ループ処理で値を出力しています。このように、For Eachを使えば配列の数分値をループ処理することができます。
ちなみに、ループ処理にはいくつか方法があります。以下で詳しく解説しているので、興味がある方はぜひ見てみてくださいね!
まとめ
今回は、ExcelVBAでin演算子のような処理を作る方法について解説しました。
VBAには、便利な関数や独自の書き方がたくさんあります。いきなりすべて覚えるのは難しいかもしれませんが、1つずつ覚えていけばOKです。
ぜひ、使って覚えてみてくださいね!