目次
VBAで特定の文字を抽出
こんにちは。伊川(@naonaoke)です。
今回は、ExcelのVBAについて紹介します。
特定の文字列について、InStr関数を使って抽出します。
問題提起
Aさんは、いつもCSVファイルから、特定の文字列を探してコピペしています。
探している文字の条件
・必ずセルA1にある
・探す文字は、寿限無寿限無
・セルA1には必ずあるが、ランダムで、文章の何番目にあるのかわからない
Aさんは、毎日面倒です。
なにかいい方法はないだろうか?
探している文字の条件
・必ずセルA1にある
・探す文字は、寿限無寿限無
・セルA1には必ずあるが、ランダムで、文章の何番目にあるのかわからない
Aさんは、毎日面倒です。
なにかいい方法はないだろうか?
InStr関数を解説
| 引数「開始位置」 | 省略できます。何文字目から検索するかを指定します。 |
| 引数「検索元」 | 検索元の文字列を指定します。 |
| 引数「検索ワード」 | 検索するキーワードを指定します。 |
| 引数「比較モード」 | 省略できます。 大文字と小文字を区別して検索するかを指定します。 |
| 戻り値の型 | 数値型 (Long) |
InStr([start],string1,string2,[,compare])
一応、ヘルプには上記のような説明があります。
ヘルプを読んだだけで理解出来たら、天才だと思います。
InStr(”伊川直助”,”直”)とすれば、開始位置である、3を返します。
今回のケースの回答

このような処理を実行したい場合です。
コードを紹介します。
Sub テスト()
Dim i As String
Dim a As Integer
Dim x As Worksheet
Set x = Worksheets("Sheet1")
i = "寿限無寿限無"
a = InStr(x.Range("A1").Value, i)
If a > 0 Then
x.Range("A2") = i
Else
x.Range("A2") = ""
End If
End Sub
| Sub テスト() | |
| Dim i As String | 文字型の変数を宣言 |
| Dim a As Integer |
数値型の変数を宣言 |
| Dim x As Worksheet |
WorkSheet型の変数を宣言 |
| Set x = Worksheets(“Sheet1”) | ObjectはWorksheets(“Sheet1”) とセット |
| i = “寿限無寿限無“ | 探す文字は、寿限無寿限無 |
| a = InStr(x.Range(“A1”).Value, i) | その、寿限無寿限無は、 Worksheets(“Sheet1”)のセルAにある |
| If a > 0 Then | もし、戻り値が0以上なら (寿限無寿限無があったら戻り値は0以上) |
| x.Range(“A2”) = i | セルA2にi(寿限無寿限無の変数)転記する |
| Else | そうじゃなかったら |
| x.Range(“A2”) = “” |
セルA2はなにも記載しない |
| End If | |
| End Sub |
寿限無寿限無は、セルA1のどこにあっても、セルA2に転記できます。
InStr関数はとても便利
InStr関数は、とても便利な関数です。
ただし、単独で利用するケースはあまりないと思います。
今回の回答のように、InStr関数と、IF構文等で処理をしていることが多いと思います。
まとめ
基本所のように、CSVファイルは整理整頓されてりるわけではありません。
スペースもあり、順番もあり、なんでもありのファイルが送られてきます。
このような場合、本当にInStr関数が役に立ちます。
InStr関数は、VBAで利用する場合は、名前を分割する場合等です。
文字列を操作する場合は、必ず使う関数だと思って間違いありません。
VBAのスキルを向上させるには、特殊なコードを憶えるということではありません。
誰もが知っているコードを使いこなせるようにすることです。
InStr関数は、だれもが使う関数の1つです。
サンプルファイルNo15はです












