目次
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はです