
名簿から文字列を抽出する VBA関数を使って
名簿などの文字列をマクロのVBA関数を使ってササッと分割しましょう。
VBA関数とは、VBAというプログラミング言語の中に用意されている関数のことです。
VBA関数はふだんExcelで使っているワークシート関数とは別の関数です。
同じ名前でどちらでも使われている関数もある反面、ワークシート関数にあってもVBA関数にはないということもあります。
(サンプルファイルは、こちらから マクロ83回サンプルデータ)

Sub 区切りを統一2() 'Replaceメソッド
Range("B2:B21").Replace " ", " ", xlPart
Range("B2:B21").Replace "/", " ", xlPart
End Sub
事前処理が完了したら、本題の文字列の分割にいきましょう。

| 名前 | 説明 |
|---|---|
| What | Excel で検索する文字列。 |
| Replacement | 置き換える文字列を指定。 |
| LookAt | xlPart:検索テキストの一部を検索します。 xlWhole:検索テキスト全体を検索します。 |
| SearchOrder | xlByColumns:列を下方向に検索してから、次の列に移動します。 xlByRows:行を横方向に検索してから、次の行に移動します。 |
| MatchCase | 大文字と小文字を区別して検索するには、True を指定します。 |
| MatchByte | この引数は、Microsoft Excel で 2 バイト言語サポートを選択またはインストールした場合にのみ使用します。 2 バイト文字が 2 バイト文字とだけ一致するようにする場合は、True?を指定します。 2 バイト文字が同等の 1 バイト文字とも一致するようにする場合は、False?を指定します。 |
| SearchFormat | メソッドの検索書式を指定します。 |
| ReplaceFormat | メソッドの置換書式を指定します。 |

Sub 区切り位置1()
Dim 位置 As Integer, name As String, i As Long
For i = 2 To 21
name = Range("B" & i).Value
Range("C" & i).Value = InStr(name, " ")
Next
End Sub

Sub 区切りを統一してから姓名を分ける()
Dim 位置 As Long, name As String, i As Long
Range("B2:B21").Replace " ", " ", xlPart '全角スペースを半角スペースに
Range("B2:B21").Replace "/", " ", xlPart 'スラッシュを半角スペースに
For i = 2 To 21
name = Trim(Range("B" & i).Value)
位置 = InStr(name, " ")
Range("C" & i).Value = Left(name, 位置 - 1)
Range("D" & i).Value = Mid(name, 位置 + 1)
Next
End Sub

Sub 行ごとに姓名を分ける() 'Replace関数を使って
Dim 位置 As Long, name As String, i As Long
For i = 2 To 21
name = Trim(Range("B" & i).Value) 'トリムしておく
name = Replace(name, "/", " ") 'スラッシュを半角スペースに
name = Replace(name, " ", " ") '全角スペースを半角スペースに
位置 = InStr(name, " ")
Range("C" & i).Value = Left(name, 位置 - 1)
Range("D" & i).Value = Mid(name, 位置 + 1)
Next
End Sub