『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】特定の文字から特定の文字まで切り出す

ユーザーが二つの文字を指定して、その間にある文字列を抜き出す関数があると便利です。たとえば、あるセルに「(言語のAI)こばとちゃん」という文字列があって、括弧の中身だけを抽出するような VBA マクロを考えてみましょう。

【VBA】文字列の切り出し

汎用的なユーザー定義関数を作る前に、簡単なサブルーチンで基本的な構造を見てみましょう。

'[VBA] 文字列の抜き出し(1)
Sub Extract()
  Dim mystr1 As String
  Dim mystr2 As String
  mystr1 = "abcdefg"
  mystr2 = Mid(mystr1, InStr(mystr1, "b") + 1)
  mystr3 = Left(mystr2, InStr(mystr2, "f") - 1)
  Debug.Print mystr3
End Sub

Extract() を実行すると「abcdefg」という文字列から b と f の間にある文字列を取り出してイミディエイトウィンドウに「cde」という文字を表示します。
 
InStr は特定の文字列が何番目にあるかを返す関数で、

InStr(mystr1, "b")

によって、「abcdefg」にある b の位置 2 を得ています。なので

mystr2 = Mid(mystr1, InStr(mystr1, "b") + 1)

と記述すれば、Mid 関数によって mystr1 に格納されている文字列 abcdefg の 3 番目から cdefg を取り出していることになります。
 
今度はこの cdefg を対象に fg を取り除くことを考えます。

InStr(mystr2, "f")

によって f の位置 4 が得られます。そして Left 関数を使って

mystr3 = Left(mystr2, InStr(mystr2, "f") - 1)

と書けば、左から 3 番目まで文字を取り出して cde が得られるという仕組みになっています。
 
それではユーザーさんが好きな記号を2つ入力して(左と右で別々の記号を使えるようにします)、その間にある文字列を抜き取る関数を作ってみましょう。

'[VBA] 文字列の抜き出し(2)
Function ExtractString(mystr As String, mykey1 As String, mykey2 As String) As String
  Dim mystr2 As String
  mystr2 = Mid(mystr, InStr(mystr, mykey1) + 1)
  ExtractString = Left(mystr2, InStr(mystr2, mykey2) - 1)
End Function

基本的な構造は先ほどの Extract() と同じです。ユーザーさんが入力する文字 mykey1 と mykey2 で囲まれた文字を取出します。たとえばセル B2 に「(言語のAI)こばとちゃん」と入力されているとします。このとき、適当なセルに

=ExtractString(B2,"(",")")

と入力すると、() の中の文字列「言語のAI」が抜き出されます。

コメント