エクセルバージョン
マイクロソフト365
今回はVBAで文字列の中から、指定した文字の位置の番号が取得できるInstr関数について解説していきたいと思います。
それではいってみましょう!
Menu
InStr関数
概要
文字列から指定した文字を検索して、最初に見つかった位置番号のVariant(Long)を返します。
構文
InStr([ start],string1,string2, [ compare ])
[ ]は省略可能という意味です。
引数
InStr | 引数 | 詳細 | 必須/省略可 |
第1引数 | start | 文字列のスタート位置を指定。 ・省略は先頭の文字から検索。 | 省略可 |
第2引数 | string1 | 対象の文字列を指定。 | 必須 |
第3引数 | string2 | 検索したい文字を指定。 | 必須 |
第4引数 | compare | 文字列比較の種類を指定。 | 省略可 |
サンプル
サンプル1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Sub instr_sample1() 'start(第1引数)を省略 '変数 Dim str1, str2 As String '変数に値を代入 str1 = "ABCDEFG" str2 = "C" '文字Cの位置番号を取得する Debug.Print InStr(str1, str2) '【結果】Cの位置はstr1の先頭から → 3 End Sub |
【結果】
ABCDEFGの文字列の中から、Cは先頭から数えると!
→ 3です\(^^)/
サンプル2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Sub instr_sample2() 'メールの@マークの位置番号の取得例 '変数 Dim str1, str2 As String '変数に値を代入 str1 = "sample@yahoo.co.jp" str2 = "@" 'メール@マークの位置番号を取得する Debug.Print InStr(str1, str2) '【結果】@マークの位置はstr1の先頭から → 7 End Sub |
【結果】
sample@yahoo.co.jpの文字列の中から、@マークは先頭から数えると!
→ 7です(^o^)o
その他のサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Sub instr_sample3() Debug.Print InStr("あいうえお", "うえ") '3 Debug.Print InStr("abcde", "de") '4 Debug.Print InStr("ABCDE", "ABC") '1 Debug.Print InStr("12345", "12345") '1 Debug.Print InStr("", "a") '0 Debug.Print InStr("abcde", "zzz") '0 Debug.Print InStr(Null, "a") 'Null '変数を使用する場合 Dim str As String str = "abcde" Debug.Print InStr(str, "cd") '3 End Sub |
第4引数
第4引数を下記のように設定することにより大文字と小文字や、ひらがなとカタカナを区別して位置番号を取得できます。
vbBinaryCompare
英語の大文字と小文字や、ひらがなとカタカナを区別して検索した際の位置番号。
1 2 3 4 5 6 7 8 9 | Sub instr_sample3() '英語の大文字と小文字を区別して位置番号を取得 Debug.Print InStr(1, "ABCDE", "d", vbBinaryCompare) '【結果】0 Debug.Print InStr(1, "ABCDE", "D", vbBinaryCompare) '【結果】4 'ひらがなとカタカナを区別して位置番号を取得 Debug.Print InStr(1, "あいう", "イ", vbBinaryCompare) '【結果】0 Debug.Print InStr(1, "あいう", "い", vbBinaryCompare) '【結果】2 End Sub |
vbTextCompare
英語の大文字と小文字や、ひらがなとカタカナを区別しないで検索した際の位置番号。
1 2 3 4 5 6 7 8 9 | Sub instr_sample4() '英語の大文字と小文字を区別しないで位置番号を取得 Debug.Print InStr(1, "ABCDE", "d", vbTextCompare) '【結果】4 Debug.Print InStr(1, "ABCDE", "D", vbTextCompare) '【結果】4 'ひらがなとカタカナを区別しないで位置番号を取得 Debug.Print InStr(1, "あいう", "イ", vbTextCompare) '【結果】2 Debug.Print InStr(1, "あいう", "い", vbTextCompare) '【結果】2 End Sub |
まとめ
応用でInstr関数を使用した記事があるので是非ご覧になってみてください。
ExcelVBAでメール@の後ろ(ドメイン)を抜出し取得する
以上です。
【文字列操作】
文字を抜き出す(左と右)
【VBA】 文字の左や右から文字を抜く(Left,Right)
文字を抜き出す(指定位置から指定文字数)
【関数】指定位置から指定文字数を抜き出す(MID,MIDB)
文字の位置を取得
【関数】指定した文字の位置を文字列から検索(FIND,FINDB)
【関数】文字の位置番号を取得(SEARCH,SEARCHB)
文字数を取得
文字を置換する
【関数】指定位置から何文字や何バイト指定して置換(REPLACEとREPLACEB)
【VBA】配列の文字列を置換(先頭,末尾,全て)Replace