Excel VBA スペースを半角か全角に揃える

スポンサーリンク

スペースを半角か全角に揃える方法

名前のデータは、姓と名を分ける意味合いで、間にスペースを入れることが多いと思います。スペースを半角にするか、全角にするかは入力時にルールとして統一しておくことが理想ですが、すでにあるデータの空白がまちまちの場合、データの抽出や検索時にうまくいかない場合が想定されます。また、半角スペースが2回や3回続けて入力されている場合は、全角スペースの見分けが付かないことがあります。

今回は性と名を分ける間のスペースを半角1つのスペースに統一する方法をご紹介します。

方法としては、引数に指定した文字列の中の置換えしたい部分の文字列を指定して置換後の文字列を指定するReplace【リプレイス】関数を使用してスペースを統一する方法と、セル範囲の中から指定した文字列を指定した文字列に置換えるRange【レンジ】オブジェクトのReplace【リプレイス】メソッドを使用する方法があります。

Replace関数で選択したセル範囲のスペースを半角1つに統一するコードと解説

Sub スペース変換1()
  Dim セル範囲 As Range
  Dim セル As Range
  Dim 文字列 As String
  Set セル範囲 = Application.InputBox(prompt:="空白を統一するセル範囲を選択してください。", Type:=8)
  For Each セル In セル範囲
    文字列 = セル.Value
    文字列 = Replace(文字列, "   ", " ") '半角3
    文字列 = Replace(文字列, " ", " ")  '半角2
    文字列 = Replace(文字列, "  ", " ")  '全角1
    セル = 文字列
  Next セル
End Sub
2行目【Dim セル範囲 As Range】
ユーザーが選択したセル範囲を格納するオブジェクト変数「セル範囲」をオブジェクト型(Range)で宣言します。


3行目【Dim セル As Range】
For Each【フォーイーチ】ステートメントで使用する、コレクションを表す変数「セル範囲」から各要素を表す個々のセルを格納するオブジェクト型変数「セル」をオブジェクト型(Range)で宣言します。


4行目【Dim 文字列 As String】
セルの入力されている文字列を格納する変数「文字列」を文字列型(String)で宣言します。


5行目【Set セル範囲 = Application.InputBox(prompt:=”スペースを統一するセル範囲を選択してください。”, Type:=8)】
Application【アプリケーション】オブジェクトのInputBox【インプットボックス】メソッドを使用してユーザーにスペースを統一するセル範囲を選択してもらい、Set【セット】キーワードで指定したオブジェクト変数「セル範囲」に代入します。


6行目【For Each セル In セル範囲】
For Each【フォーイーチ】ステートメントを使用して変数「セル範囲」に格納されているセル範囲のセルを順に変数「セル」に格納しながら、変数「セル範囲」に格納されているセルの数分処理を繰り返します。


7行目【文字列 = セル.Value】
繰り返し処理の中変数「セル範囲」から取り出した変数「セル」の値をRange【レンジ】オブジェクトのValue【バリュー】プロパティで取得して変数「文字列」に代入します。


8行目 【文字列 = Replace(文字列, ” “, ” “) 】
Replace【リプレイス】関数を使用して指定した文字列を置換えします。第一引数の置換えしたい文字列を含む文字列の引数Expressio【エクスプレッション】にはセルに格納されている文字列が代入された変数「文字列」を指定します。第2引数の置換えしたい文字列の引数Find【ファインド】には半角スペース3つ「” “」の文字列を指定します。第3引数の置換後の文字列を指定する引数Replace【リプレイス】には半角スペース1つ「” “」を指定して、名前の姓と名の間のスペースが半角スペース3つ分ある場合に半角スペース1つに置換えて、変数「文字列」に代入します。ここでのポイントは、引数Find【ファインド】に指定する置換えしたい文字列は半角スペース2つの前に半角スペース3つを指定することです。先に2つを指定した場合3つの半角スペースは1つの半角スペースに置換えができません。なぜなら、先に2つの半角スペースを1つにした場合、3つの半角スペースは2つの半角スペースに変換されてしまい、その後の3つの半角スペースの置換えで検索されず2つの半角スペースを残したまま処理が終了してしまうからです。


9行目 【文字列 = Replace(文字列, “ ”, ” “) 】
第2引数の置換えしたい文字列の引数Find【ファインド】には半角スペース2つ「” “」の文字列を指定して1つの半角スペースに置換えして、変数「文字列」に代入します。


10行目【文字列 = Replace(文字列, ” “, ” “)】
第2引数の置換えしたい文字列の引数Find【ファインド】には全角スペース1つ「” ”」の文字列を指定して1つの半角スペースに置換えて、変数「文字列」に代入します。


11行目【セル = 文字列】
Replace【リプレイス】関数の第2引数Find【ファインド】に設定した置換えしたい文字列と一致するセルの文字列でスペースが半角スペース1つに置換えされた文字列が格納されている変数「文字列」の値をオブジェクト変数「セル」に代入して置換え後の文字列をセルに代入します。

実行結果


ReplacメソッドでA列データ範囲の文字列のスペースを半角1つに統一するコードと解説

Sub スペース変換2()
  Dim 最終行 As Long
    最終行 = Cells(Rows.Count, 1).End(xlUp).Row
  With Range("A2","A" & 最終行)
    .Replace what:="   ", Replacement:=" ", LookAt:=xlPart   '半角3
    .Replace what:="  ", Replacement:=" ", LookAt:=xlPart    '半角2
    .Replace what:=" ", Replacement:=" ", LookAt:=xlPart    '全角1
  End With
End Sub
2行目 【Dim 最終行 As Long】
A列のデータが入力されている最終行のセルの行番号を格納する変数「最終行」を長整数型(Long)で宣言します。


3行目 【最終行 = Cells(Rows.Count, 1).End(xlUp).Row】
Rows.Countプロパティで取得したセルの最終行からRange【レンジ】オブジェクトのEnd【エンド】プロパティを使用してデータが入力されている行を参照してRow【ロウ】プロパティでその行番号を取得して変数「最終行」に代入します。


4行目【With Range(”A2″,”A” & 最終行)】
Range【レンジ】プロパティでA2セル~A列の変数「最終行」の行範囲、つまりA列のデータが入力されている範囲を参照してWith【ウィズ】ステートメントで指定します。


5行目 【.Replace what:=” “, Replacement:=” “, LookAt:=xlPart】
With【ウィズ】ステートメントで指定したセル範囲のスペースをReplace【リプレイス】メソッドで半角スペース1つに置換えます。置換える文字列を指定する引数what【ワット】には3つの半角スペース、置換える文字列を指定しる引数Replacement【リプレースメント】には1つの半角スペースを指定します。検索内容を引数what【ワット】で指定した内容と完全一致させるかどうかを設定する引数LookAt【ロックアット】には部分一致を表す定数xlPartを指定します。ここでも最初の検索値は2つの半角スペースの前に3つの半角スペースを指定することがポイントです。


6行目 【.Replace what:=” “, Replacement:=” “, LookAt:=xlPart 】
With【ウィズ】ステートメントで指定したセル範囲のスペースをReplace【リプレイス】メソッドで半角スペース1つに置換えます。置換える文字列を指定する引数what【ワット】には2つの半角スペースを指定します。


7行目 【.Replace what:=” ”, Replacement:=” “, LookAt:=xlPart 】
With【ウィズ】ステートメントで指定したセル範囲のスペースをReplace【リプレイス】メソッドで半角スペース1つに置換えます。置換える文字列を指定する引数what【ワット】には1つの全角スペースを指定します。

実行結果


以上で、スペースを半角か全角に揃える方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告