VBAマクロを勉強し始めて、1ヶ月が経過しました。
ちょっとずつコードの意味も理解できるようになり、日々楽しく勉強を続けています。
さて、今回は、同一セルに入った苗字と名前を、それぞれ別のセルに分けるマクロを書きました。
下記のように、全角スペースや半角スペースで分けられた姓名を分離することができます。
概要
何行あってもいいように、最終行を取得し、2行目から最終行までの繰り返しにより順次処理していく流れです。
処理の内容としては、If文を使い、全角スペース・半角スペース・改行の場合にそれぞれ姓と名を分ける作業を書いています。
コード【VBAマクロ】
- Sub SplitName()
- Dim i As Long
- Dim maxrow As Long
- maxrow = Cells(Rows.Count, 1).End(xlUp).Row
- For i = 2 To maxrow
- Cells(i, 1) = Application.WorksheetFunction.Trim(Cells(i, 1))
- '半角スペースが連続で2つ入っていた場合、半角スペースを1つ削除する
- If InStr(Cells(i, 1), " ") > 0 Then '全角スペース
- Cells(i, 2) = Split(Cells(i, 1), " ")(0)
- Cells(i, 3) = Split(Cells(i, 1), " ")(1)
- ElseIf InStr(Cells(i, 1), " ") > 0 Then '半角スペース
- Cells(i, 2) = Split(Cells(i, 1), " ")(0)
- Cells(i, 3) = Split(Cells(i, 1), " ")(1)
- ElseIf InStr(Cells(i, 1), vbLf) > 0 Then '改行
- Cells(i, 2) = Split(Cells(i, 1), vbLf)(0)
- Cells(i, 3) = Split(Cells(i, 1), vbLf)(1)
- End If
- Next i
- End Sub
コード【VBAマクロ】の解説
1.
マクロの名前です。適当な名前でOKです。
2.
行番号を取得するので、iという変数を定義します。
3-4.
最後の行の取得です。下から数えていき、値が入っている最終行をmaxrowとしています。
5.
2行目から最終行までの繰り返しです。
6-7.
姓と名の間に、半角スペースx2が入っている場合は、下記のプログラムで分離できないので、あらかじめ半角スペースを1つ削除しておきます。
8-10.
InStr関数で、検索対象の文字列 Cells(i, 1) の中から、” ”(全角スペース)を検索します。
返し値は、” ”(全角スペース)が何番目にあるかなので、A2の例の場合、3です。
If文で、3>0となるので、11-12行目のコードを実行します。
Split関数で、検索対象の文字列 Cells(i, 1) を、” ”(全角スペース)で区切ります。
区切られた配列の最初が0(姓)、次の配列が1(名)となるので、Cells(i, 2)には0の配列を、Cells(i, 3)には1の配列を入れます。
11-13.
10-12で行った内容と同じです。半角スペースに対する処理です。
14-16.
10-12で行った内容と同じです。改行に対する処理です。
とりあえず作ってみたプログラミングですが、仕事でたまに使う機会もあり、活躍してくれています。
ただ、海外の方の名前だと、名前+姓の順番なので、アルファベットの時だけ、入れるセルを逆にするなどの処理が必要ですね。