VBAで特定の文字を抽出

こんにちは。伊川(@naonaoke)です。

今回は、ExcelのVBAについて紹介します。

特定の文字列について、InStr関数を使って抽出します。

問題提起

Aさんは、いつもCSVファイルから、特定の文字列を探してコピペしています。
探している文字の条件
・必ずセル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     
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はです

スポンサーリンク

Twitterでフォローしよう

おすすめの記事