【VBA】氏名から名字または名前を抜き出します
下図のように名字と名前が半角スペースで区切られた氏名の入ったセルから名字を取り出す LEFT_SPACE 関数 と、名前だけを取り出す RIGHT_SPACE 関数 を作ってみます。
特にデータは氏名でなくてもいいのですが、要するに半角スペースの左側と右側を取り出すファンクションマクロ(ユーザー定義関数)なのです。エクセルでは LEFT 関数とFIND関数を組合わせる定番ですが、そんな組合わせ方をいちいち覚えていられないと思うので、下の関数をモジュールにコピーしてしまったほうが早いです。
【VBA】LEFT_SPACE関数
半角スペースの左側を取り出すコードです。
'[VBA] 半角スペースの左側を取り出す関数 Function LEFT_SPACE(mystr As String) As String LEFT_SPACE = Left(mystr, InStr(mystr, " ") - 1) End Function
たった3行の簡単なマクロです。シート上で
=LEFTSPACE("城戸 涼音")
と入力すると「城戸」と返るはずです。もちろん上に載せた図のように、セルを引数にするこもできます。VBA の Left関数 は
Left(文字列,取得したい文字数)
と書いて、左側から「取得したい文字数」の文字を抜き出します。また InStr関数は
InStr([開始位置,] 文字列, 検索文字列, [比較モード])
のような形で使用しますが、[] は省略できる引数です。今は開始位置と比較モードは使わないので、
InStr(文字列, 検索したい文字列)
と書きます。これによって1つめの引数で指定した文字列の中で「検索したい文字列」の先頭文字が何番目にあるかという数値を返します。上のマクロでは
InStr(mystr, " ")
によって半角スペースが何番目にあるかを得ています。そして Left 関数と組合わせて
Left(mystr, InStr(mystr, " ") - 1)
と記述することによって、指定した文字の左から半角スペースの1つ手前までを抜き出しているというわけです。
【VBA】RIGHT_SPACE 関数
今度は半角スペースの右側を取り出してみましょう。
'[VBA] 半角スペースの右側を取り出します Function RIGHT_SPACE(mystr As String) As String RIGHT_SPACE = Mid(mystr, InStr(mystr, " ") + 1) End Function
たとえばセルに
=RIGHT_SPACE("城戸 涼音")
と入力すると「涼音」が返ります。
【おまけ】VBA の Right関数 は
Right(文字列,取得したい文字数)
と書いて、右側から「取得したい文字数」の文字を抜き出します。これを先ほど説明した InStr 関数と組合わせて、
Mid(mystr, InStr(mystr, " ") + 1)
とすれば、右側から半角スペースの1つ後ろまで得ることができます。
コメント