こんにちは。
ごんた@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を学び始めた方へ。
基礎からしっかり、安心して学べるレッスンはこちら!