「既存の文字列の中に指定した文字が含まれるのかを確認したい。」
「その文字列は文字列の先頭から何番目にあるのか確認したい。」
この記事では、VBA作業中に出くわすこんな悩みを解決する方法をご紹介します。
VBA上でこの悩みを解決するには、Instr関数というものを使っていくことになります。
というわけでこの記事では、
◆Instr関数とは
◆Instr関数の使い方
◆Instr関数の使用例
の3つをご紹介していきます。
それでは早速やっていきます!
Instr関数とは
Instr関数とは、ある基準となる文字列の中に、指定した別の文字列が含まれているかどうか、含まれている場合は、基準となる文字列の先頭から何番目に含まれているかを教えてくれる関数です。
このブログのドメイン名である【higashisalary.com】を例に説明します。
基準となる文字列を【higashisalary.com】
探索したい文字列を【shi】
だったとします。
この状況でInstr関数を使うと5という数字が出力されます。
これはshiという文字がhigaという4文字の後ろに配置されているためです。
また、
基準となる文字列を【higashisalary.com】
探索したい文字列を【tokyo】
とした場合、基準となる文字列に探索したい文字列は含まれていませんので、この状況でInstr関数を使うと0という数字が出力されます。
これがInstrのざっくりとした概要になります。
※Instr関数は一般的にエクセルシート上で用いられる関数とは違い、VBA上でのみ動作する関数になっています。
Instr関数の使い方
次はInstr関数の使い方をご紹介していきます。
変数 or 指定セル = Instr(基準の文字列, 探索したい文字列)
先ほどの例に当てはめてみると
=Instr(“higashisalary.com”, “shi”)
=Instr(“higashisalary.com”, “tokyo”)
という感じです。
もちろん文字列を変数で指定することも可能です。
Instr関数の実際の使用例
ざっくりとInstr関数の概要がわかってきたところで、ここからは実際のInstr関数の使用例をご紹介していきます。
今回は以下の画像のような状況で使用例を見ていきましょう。
◆状況説明
B1セルにベースとなる文字列が記入してあります。
この状況下でB2セルに適当な文字列を入力します。
最後にVBAでB1セル、B2セルに対してInstr関数を適用し、出力された結果をB3セルに記入するという形にしています。
※基準となる文字列の各文字に番号を振って、結果確認しやすいようにしています。
◆VBAコードの紹介
上の状況を再現できるVBAコードは以下の通りです。
今回は文字列を変数として扱っています。
変数を用いる際の使い方をよく理解しておきましょう。
Sub instr_test()
Dim base_str As String
Dim search_str As String
base_str = Cells(1, 2)
search_str = Cells(2, 2)
Cells(3, 2) = InStr(base_str, search_str)
End Sub
コードの記述が終わったところで、実際にこのコードを動かしてみましょう。
まずは探索文字列を【shi】としてみましょう。
このときの実行結果は以下の通りです。
きちんとshiという文字列が開始される5が出力されていますね。
次は探索文字列を【tokyo】としてみましょう。
このときの実行結果は以下の通りです。
ベースの文字列にtokyoの文字がありませんので、この場合は0が出力されています。
つまり、Instr関数を適用し、0が出力された場合、探索したい文字列はベースの文字列には含まれていないということを意味しています。
この特性を利用することによって、
If Instr(*,*)=0 then とか
If Instr(*,*)<>0 then なんてゆうように
if文と組み合わせることで、探索したい文字列が含まれている場合は、こうゆう処理をしろ、含まれていない場合はこうゆう処理に・・・ということが可能になります。
最後にベースの文字列が空欄だった場合も見てみましょう。
この場合の結果は以下のようになりました。
ベースの文字列がない場合も0がかえってくることがわかります。
この特性も状況によっては使えますので覚えておきましょう。
おわりに
というわけで今回はVBAでの文字列探索の際に使えるInstr関数について詳細解説をおこないました。
目的の文字列を探す際に非常に便利ですので、ぜひ覚えておきましょう。
このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
・日々の残業時間を減らしたい。
・業務をもっと効率的にこなしたい。
・もっと勉強する時間を作りたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてください。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント