ExcelVBAでin演算子のような処理を作る方法を徹底解説!


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関数を使えば簡単に部分一致で値を取得することができます。

ちなみに、部分一致だけでなく完全一致の方法も知りたい方は、以下がおすすめです!

【ExcelVBA入門】配列内部の検索方法!高速化対応についても徹底解説
更新日 : 2018年12月13日

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入門】繰り返し処理をするための3つの方法を徹底解説!
更新日 : 2019年8月30日

まとめ

今回は、ExcelVBAでin演算子のような処理を作る方法について解説しました。

VBAには、便利な関数や独自の書き方がたくさんあります。いきなりすべて覚えるのは難しいかもしれませんが、1つずつ覚えていけばOKです。

ぜひ、使って覚えてみてくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。

おすすめコンテンツ

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

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