Excelのマクロ(VBA)でInStr関数を使い文字列検索をする
「文字列を検索したいけど、どうやったらいいかわからない…」
「InStr関数の使い方がわからない」
「文字列を検索して取り出したいけどどうやったらいいの?」
マクロ(VBA)で文字列検索はどうしたらいい?と悩んだことはありませんか?
InStr関数を使えば文字列検索ができますし、Mid関数とあわせれば文字列を取得することもできます。
このページでは、InStr関数の使い方、他の関数と組み合わせてできることを紹介し、どんなことができるのか詳しく解説します。
Excelのマクロ(VBA):InStr関数とは
InStr関数は、指定された文字列内で、ある文字列が最初に出現する位置を検索するためのものです。
InStrの構文
1InStr([start], string1, string2, [compare])
パラメータはこのようになっています。
start
(省略可能):検索を開始する位置を指定します。省略すると検索は文字列の先頭から開始されます。string1
:検索対象の文字列を指定します。string2
:検索する文字列を指定します。compare
(省略可能):文字列の比較方法を指定します。0(または省略)はバイナリ比較を意味し、1はテキスト比較を意味します。
戻り値
InStr
関数は、検索文字列が最初に出現する位置を返します。見つからない場合は 0 を返します。
Excelのマクロ(VBA):InStr関数の使い方
InStr関数の使い方は、このようになります。
Sample1
1Dim position As Integer
2position = InStr("Hello, World!", "World")
結果:8
「Hello, 」スペースまでが7文字となっているので8となります。
Sample2
1Dim position As Integer
2position = InStr(5, "Hello, Hello, World!", "Hello")
結果:7
スタート位置を5としているので、1つ目のHelloが終わってから検索開始です。
2つ目のHelloが7文字目からなので、このようになりました。
Excelのマクロ(VBA):InStr関数と別の関数を組み合わせる
文字列Aの中に文字列Bが存在するかどうかの判断
InStr関数の戻り値は、探している文字列が存在しなかったら「0」を返すので、この性質とif文を使って文字列が存在するかどうかを判断します。
1Dim searchStr As String
2Dim targetStr As String
3
4searchStr = "apple"
5targetStr = "I have an apple and a banana."
6
7' 文字列内に検索文字列が存在するかを判断
8If InStr(targetStr, searchStr) > 0 Then
9 ' 検索文字列が存在する場合の処理
10Else
11 ' 検索文字列が存在しない場合の処理
12End If
1以上であれば、文字列が存在するので上記のようにif文で処理できます。
また、Do While~Loopを使ってA1からA100までの間に「◯◯」が入っているセルを探すことも可能です。
指定された文字列を取得する
文字列を検索してあることはわかったけど、取り出したいときもあると思います。
そういったときは、Mid関数とあわせて使うと文字列を取得できますよ。
1Dim searchStr As String
2Dim targetStr As String
3Dim startPos As Long
4Dim length As Long
5Dim result As String
6
7searchStr = "apple"
8targetStr = "I have an apple and a banana."
9startPos = InStr(targetStr, searchStr) ' 検索文字列の位置を取得
10length = Len(searchStr) ' 検索文字列の長さを取得
11
12If startPos > 0 Then
13 ' 検索文字列が見つかった場合、指定位置から指定文字数の部分文字列を取得
14 result = Mid(targetStr, startPos, length)
15Else
16 ' 検索文字列が見つからなかった場合の処理
17End If
InStr関数で文字列を検索し、戻り値をstartPosに格納しておきいます。
if文でstartPosが0より大きければMid関数で文字列を取得するようにし、resultに格納します。
Mid関数は、文字列の途中から指定の長さの文字列を取得するものです。
1Mid(検索文字列, [start], 取得する文字列の長さ)
このように、if文やMid関数など、他の関数と組み合わせることで別の動きもできるのでいろいろ覚えておくとできる範囲が広がっていきますよ。
Excel VBAを勉強するなら「できる大辞典」がおすすめです。
辞書なのでピンポイントで学ぶことができます。大学時代、2016年版を購入して勉強していましたが相当使いました。
ネットだけでも勉強はできますが、本を読みながらVBAを勉強したい方は購入してください。