【VBA】Mid関数で中抜きします

 この記事では、VBA の Mid 関数の使い方について解説します。

【VBA】Mid 関数

 Mid関数 は受け取った文字列について、指定位置から指定文字数を抜き出します。

Mid(文字列, 開始位置, [取り出す文字の長さ])

 第1引数で抽出対象となる文字を指定します。数字、アルファベット、日本語のいずれでも指定することができます。戻り値は Variant 型となります。第2引数で取り出す先頭位置を指定します。指定した数値が文字列の数を超えていると長さ 0 の文字列 “” を返します。3 番目のオプション引数で、何文字取り出すかを指定します。この引数を省略した場合は開始位置から残り全ての文字を取り出します。

 「私はチョコレートケーキが大好きです」という文字列から「チョコレート」という文字を取り出してみましょう。「チ」は文章の 3 番目、「チョコレート」は 9 文字の単語です。

'[VBA] Mid関数のサンプルコード(1)
Sub Mid_test()
  Dim mystr As String
  mystr = "私はチョコレートケーキが大好きです"
  Debug.Print Mid(mystr, 3, 9)
End Sub
チョコレートケーキ

 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
おさかべ

 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! のエラーを返します。

Excel VBA
Excel VBA 表計算とプログラミング学習サイト

コメント

タイトルとURLをコピーしました