Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » VBAで括弧内の文字列を取得する

VBAで括弧内の文字列を取得する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vbaでかっこの中の文字を取り出す」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

VBA(Visual Basic for Applications)を使って、括弧で括られた文字列を取得するには、どのようなコードを書けばいいのか探している方による検索です。

[スポンサードリンク]

括弧内の文字列を取得するユーザー定義関数

「vbaでかっこの中の文字を取り出す」
という検索キーワードだけでは詳細がわかりませんが、とりあえず、括弧などで括られた文字列を取得するユーザー定義関数を作ってみました。

Function カッコ内の文字列を取得する( _
  元の文字列 As String, _
  Optional 開くカッコ As String = "(", _
  Optional 閉じカッコ As String = ")") _
    As String

 Dim pos_a As Long ' 開くカッコの位置
 Dim pos_z As Long ' 閉じカッコの位置

 pos_a = InStr(1, 元の文字列, 開くカッコ)
 pos_z = InStr(pos_a + 1, 元の文字列, 閉じカッコ)

 カッコ内の文字列を取得する = _
   Mid(元の文字列, pos_a + 1, pos_z - pos_a - 1)

End Function

引数を3つ指定する関数にしました。
  第1引数は元の括弧で括られた文字列を含む文字列
  第2引数は開く括弧
  第3引数は閉じる括弧
を指定します。

例えばA1セルに、
  新妻「何もしてあげられません。実力の世界ですから。」
と入力されているときに、B1セルに、
  =カッコ内の文字列を取得する(A1, "「", "」")
という、上記のユーザー定義関数を使った数式を入力するとB1セルに、
  何もしてあげられません。実力の世界ですから。
という、カギ括弧内の文字列が表示されます。

ユーザー定義関数の解説

第2引数に指定された開くカッコが、元の文字列の何文字目にあるかをInStr関数を使って取得して、変数・pos_aに代入し、
 pos_a = InStr(1, 元の文字列, 開くカッコ)

第3引数に指定された閉じカッコが何文字目にあるかを、同じくInStra関数を使って取得して変数・pos_zに格納しておいてから、
 pos_z = InStr(pos_a + 1, 元の文字列, 閉じカッコ)

VBAのMid関数を使って、括弧の中の文字列を取得しています。
 カッコ内の文字列を取得する = _
   Mid(元の文字列, pos_a + 1, pos_z - pos_a - 1)

このユーザー定義関数を利用するシーンを想像すると、頻繁に使う括弧記号が存在するときに、3つとも引数を指定するのは面倒なので、
 Function カッコ内の文字列を取得する( _
   元の文字列 As String, _
   Optional 開くカッコ As String = "(", _
   Optional 閉じカッコ As String = ")") _
と、Optionalキーワードを使って、第2引数と第3引数を省略可能にして、省略されたときに、開く括弧記号は「(」、閉じる括弧記号は「)」が指定されたとみなされるようにしています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » VBAで括弧内の文字列を取得する

「ユーザー定義関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.