【VBA】半角スペースの左側と右側を取り出す

【VBA】氏名から名字または名前を抜き出します

 下図のように名字と名前が半角スペースで区切られた氏名の入ったセルから名字を取り出す LEFT_SPACE 関数 と、名前だけを取り出す RIGHT_SPACE 関数 を作ってみます。

 VBA苗字と名前を抜き取るプロシージャ

 特にデータは氏名でなくてもいいのですが、要するに 半角スペースの左側と右側を取り出すファンクションマクロ(ユーザー定義関数) なのです。エクセルでは 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("城戸 涼音")

と入力すると「城戸」と返るはずです。もちろん上に載せた図のように、セルを引数にするこもできます。

Left 関数と InStr 関数を組合わせます

 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つ後ろまで得ることができます。

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

コメント

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