この記事では、VBA の Mid 関数の使い方について解説します。
【VBA】Mid 関数
VBA の Mid関数 は受け取った文字列について、指定位置から指定文字数を抜き出します。
Mid(文字列, 開始位置, [取り出す文字の長さ])
第1引数で抽出対象となる文字を指定します。数字、アルファベット、日本語のいずれでも指定することができます。戻り値は Variant 型となります。第2引数で取り出す先頭位置を指定します。指定した数値が文字列の数を超えていると長さ 0 の文字列 “” を返します。3 番目のオプション引数で、何文字取り出すかを指定します。この引数を省略した場合は開始位置から残り全ての文字を取り出します。
例として、「私はチョコレートケーキが大好きです」という文字列から「チョコレート」という文字を取り出してみましょう。「チ」は文章の 3 番目、「チョコレート」は 9 文字の単語です。
'[VBA] Mid関数のサンプルコード(1) Sub MidTest() Dim mystr As String mystr = "私はチョコレートケーキが大好きです" Debug.Print Mid(mystr, 3, 9) End Sub 'MidTestマクロの実行結果: 'チョコレートケーキ
Mid と InStr を組合わせると、文字列から特定の文字に囲まれた部分を取り出したりもできます。次のコードは ( ) の中身を取り出すマクロです。
'[VBA] Mid関数のサンプルコード(2) Sub Brackets() Dim mystr As String Dim x As Long, y As Long mystr = "刑部(おさかべ)はマリちゃんの旧姓です" x = InStr(mystr, "(") y = InStr(mystr, ")") Debug.Print Mid(mystr, x + 1, y - x - 1) End Sub 'Bracketsの実行結果: 'おさかべ
InStr は第 1 引数で渡した文字列について、第 2 引数で指定した文字列が何番目にあるかを返す関数です。変数 x に “(” の位置、y に “)” の位置を入れると、x + 1 が “(” の次の文字、y – x + 1 が “)” の文字数となります。それらを Mid関数の第 2 引数と第 3 引数に渡せば、() の中身を取り出せるという仕組みになっています。
たとえばあるセルに次のような住所データが入っているとします。
大阪府大阪市東住吉区打上元町 6-26-8
このとき「大阪府大阪市」はいらないから、「市」という文字の右側を全部抜き出したいなあと思う場面もけっこうあると思います。そんなときに使える Function プロシージャを用意してみました。
'[VBA] 指定文字の右側を取り出すプロシージャ Function RIGHTST(mystr As String, mykey As String) As Variant Dim a As Integer, b As Integer, c As Integer If InStr(mystr, mykey) <> 0 Then a = InStr(mystr, mykey) b = Len(mystr) c = Len(mykey) RIGHTST = Mid(mystr, a + c, b) Else RIGHTST = CVErr(xlErrNA) End If End Function
RIGHTST 関数は引数で指定した文字列の右側を抜き出します
=RIGHTST(対象文字列, 区切り位置)
たとえば、セル A1 に対象文字列である
大阪府大阪市東住吉区打上元町 6-26-8
という住所が入っている場合、別のセルに
=RIGHTST(A1,"市")
と入力すると、「東住吉区打上元町 6-26-8」が返ってきます。対象文字列の中に区切り位置として指定した文字が含まれていなければ #N/A! のエラーを返します。
コメント