【VBAで感動する瞬間⑩】InStrとInStrRevが分かった日

記事
学び
こんにちは。  
ごんた@VBAレッスン です。

お読みいただきありがとうございます。

昔の私はこの2つが全く理解出来ませんでした。
たくさんつまずきましたが、分かると非常に便利です。
“つまずくポイント”を全部分かった上で、やさしく説明します。

 ■ InStr / InStrRev って何ができるの?

文字列の中から「特定の文字がどこにあるか」を探す関数 です。

そして実は…

👉 ほとんどの場合、  
「文字列」と「探したい文字」だけ指定すればOK。

これだけで、実務の文字抽出が一気にラクになります。

例えば:

- セルの中から必要な部分だけ抜き出す  
- ファイル名から日付だけ取る  
- メールアドレスの「@」の前後を取る  
- 最後の「_」の位置を探す  
- 拡張子の「.」の位置を取る  

こういう“実務でよくある処理”が全部できるようになります。

■ でも私は最初、全く理解できませんでした

参考書を読んでも、  
InStr と InStrRev の説明が全然頭に入らなかったんです。

理由ははっきりしていて、

❶ プロパティ(引数)が多すぎる  
InStr([start], string1, string2, [compare])  
「start? compare? 何それ?」状態。

 ❷ 戻り値が状況によって違う  
- 見つかったら「位置」  
- 見つからなかったら「0」  
- 空文字だとまた別の動き  

初心者には混乱の元。

❸ 実務で使わない例ばかり  
InStr("ABCDE", "C")  
…いや、そんな文字列、実務で出てこない。

 ❹ しかも InStrRev だけ引数の順番が違う  
InStrRev(string1, string2, [start], [compare])  
同じ仲間なのに順番が違うの、混乱の原因No.1。

■ 昔の私は「区切り位置」で無理やり分割していた

実務で文字を抜き出したい時、  
昔の私はこうしていました。

- 区切り位置で分割  
- 列が増える  
- 想定外の文字でズレる  
- 必要な列だけ取る  
- たまに壊れる  

「ただ1文字の位置を知りたいだけなのに…!」
と何度思ったことか。

■ でも今は、何も見ずにスラスラ書けるようになりました

理由はシンプルで、

 👉“実務でどう使うか”が分かったから。

InStr / InStrRev は、  
仕組みを覚えるより 使いどころを知る方が大事 なんです。

そして繰り返しになるけど、  
ほとんどの場合は「文字列」と「探したい文字」だけ指定すれば十分。

■ InStr(前から探す)

```vba
InStr(文字列, 探したい文字)
```

 ● 実務でよくある使い方  
- メールアドレスの「@」の位置  
- ファイル名の最初の「_」  
- 商品名の中の「(」  

 ■ InStrRev(後ろから探す)

```vba
InStrRev(文字列, 探したい文字)
```

 ● 実務でよくある使い方  
- 最後の「_」の位置  
- 拡張子の「.」  
- パスの最後の「\」  

後ろから探すというだけで、  
実務の文字抽出が一気にラクになります。

 ■ 位置が分かれば、あとはMidで抜き出すだけ

例えば、  
ファイル名「売上_202401_確定.xlsx」から  
「202401」だけ取りたいなら、

```vba
Dim p1 As Long, p2 As Long
p1 = InStr(fname, "_")
p2 = InStrRev(fname, "_")

Mid(fname, p1 + 1, p2 - p1 - 1)
```

これで一発。

 ■ まとめ(ごんた式の結論)

- InStr は前から  
- InStrRev は後ろから  
- 位置さえ分かれば文字抽出は自由自在  
- 昔は理解できなかったけど、今はスラスラ書ける  
- 理解のカギは“実務でどう使うか”  
- そして、ほとんどの場合は「文字列」と「探したい文字」だけ指定すればOK

初心者さんがつまずく理由は全部分かるので、  
この記事が少しでも助けになれば嬉しいです。

🌱 VBAを学び始めた方へ。  
基礎からしっかり、安心して学べるレッスンはこちら!
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら