h-yonesanのblog

VBAやプログラムについて日々勉強したことを書いています。

VBA 文字列の一部分を取得する関数を作る

きっかけ

いつも勉強させてもらっている伊藤先生のサイトで、面白い記事があった。
ByRef・参照渡しとはどう使うのか:エクセルマクロ・Excel VBAの使い方

サンプルコード

戻り値が配列の場合

Function 文字列から要素数2の配列を取得(ByVal code As String) As String()
    Dim ret(1) As String
    ret(0) = Mid(code, 1, 4)
    ret(1) = Mid(code, 5, 6)
    文字列から要素数2の配列を取得 = ret
End Function

イミディエイトウインドウでテストすると下記のようになる

? 文字列から要素数2の配列を取得("abcd012345")(0)
abcd
? 文字列から要素数2の配列を取得("abcd012345")(1)
012345

戻り値が文字列の場合

Function 2つに分割した文字列を取得(ByVal code As String, num As Long) As String
    Dim ret As String
    Select Case num
        Case 0: ret = Mid(code, 1, 4)
        Case 1: ret = Mid(code, 5, 6)
        Case Else: ret = "ERROR"
    End Select
    2つに分割した文字列を取得 = ret
End Function

なお、0,1以外が入力された場合は"ERROR"を返すようにした。
前半を0、後半を1、というのは分かりにくいな。。
仮引数名が「num」というのもいまいちだが、、

イミディエイトウインドウでテストすると下記のようになる

? 2つに分割した文字列を取得("abcd012345",0)
abcd
? 2つに分割した文字列を取得("abcd012345",1)
012345
? 2つに分割した文字列を取得("abcd012345",-10)
ERROR