特定の文字で囲まれた部分を抜き出す EXT関数

 たとえばあるセルに

(言葉の妖精)こばとちゃん

というような文字列があって、(  )の中身だけを取り出すようなマクロを考えてみましょう。
 

abcdefg から cde を抜き出すマクロ

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

 Sub 文字抜出()

  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

 このマクロを実行すると「 abcdefg 」という文字列から b と f の間にある文字列を取り出してイミディエイトウィンドウに「 cde 」という文字を表示します。

c の次の文字列を全部抜き出します

 InStr は特定の文字列が何番目にあるかを返す関数で、

InStr(mystr1, "b")

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

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

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

fg を取り除きます

 今度はこの cdefg を対象に fg を取り除くことを考えます。

InStr(mystr2, "f")

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

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

と書けば、左から 3 番目まで文字を取り出して cde が得られるという仕組みになっています。
 

特定の文字で囲まれた部分を抜き出すマクロ

 それではユーザーさんが好きな記号を2つ入力して(左と右で別々の記号を使えるようにします)、その間にある文字列を抜き取るマクロを作ってみましょー。

 Function EXT(mystr As String, mykey1 As String, mykey2 As String) As String

  Dim mystr2 As String

  mystr2 = Mid(mystr, InStr(mystr, mykey1) + 1)

  EXT = Left(mystr2, InStr(mystr2, mykey2) - 1)

 End Function

 基本的な構造は先ほどのマクロと同じです。ユーザーさんが入力する文字 mykey1 と mykey2 で囲まれた文字を取出します。たとえば下図のようにセル B2 に「(言葉の妖精)こばとちゃん」と入力されているとします。

 Excel文字抜出関数図

 セルに

=EXT(B2,"(",")")

と入力すると(  )の中の「言葉の妖精」が取り出されます!

 こばとは言葉の妖精さん♪ とっても可愛い妖精さん♪
 どうして、こんなに可愛いの♪ それは誰にもわからない♪

 それじゃ、またねー!

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)