Excel。VBA。セル内の空白を手早く削除するには、どうしたらいい
<Excel VBA:Replace>
データを読み込んだ後に、そのまま使えないケースが多々あります。
例えば、セル内の空白。
次のデータがあります。
B列の氏名のデータですが、よくみると、空白がセル内にあったり、なかったり、空白セルも全角空白なのか半角空白2個分なのかも、わかりません。
このようなデータでは、並べ替えをするだけでも、影響が出てしまいます。
そこで、セル内の空白を削除したいわけですが、どのようにしたら効率がいいのでしょうか?
C列に、SUBSTITUTE関数をつかって、空白を削除したデータをつくってもいいのですが、列が増えてしまうことは、データ量が多い場合、ファイルサイズにも直結するため、Excelファイル自体が重くなることが想定されます。
なによりも、数式ですから、値で貼り付け等をおこなって、文字列にする必要があります。
そこで、Excel VBAでプログラムをつくり、直接B列のデータから空白を削除する方法を採用することにします。
次のようなプログラムを作成してみました。
Sub 空白除去()
Dim i As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "b").End(xlUp).Row
For i = 2 To lastrow
Cells(i, "b").Value = Replace(Cells(i, "b"), " ", "")
Cells(i, "b").Value = Replace(Cells(i, "b"), " ", "")
Next
End Sub
とても、シンプルです。プログラムを難解にしても意味がありません。
実行してみましょう。
このように、セル内の空白を全角・半角の空白に関係なく削除することができました。
プログラム文を確認することにしましょう。
最初は、変数宣言です。
Dim i As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "b").End(xlUp).Row
「lastrow = Cells(Rows.Count, "b").End(xlUp).Row」は、B列の最後尾の行番号を算出することで、データの件数を取得することができます。
この数値は、次のFor To Nextで繰り返し処理の回数で使用します。
For i = 2 To lastrow
Cells(i, "b").Value = Replace(Cells(i, "b"), " ", "")
Cells(i, "b").Value = Replace(Cells(i, "b"), " ", "")
Next
繰り返し処理です。
B列のデータを、Replaceをつかって、半角・全角の空白を「””」で置換させています。
データ量が多い場合には、用意しておきたいプログラム文かと思います。
また、Excel関数のSUBSTITUTE関数をつかうのならば、
Sub 空白除去()
Dim i As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "b").End(xlUp).Row
For i = 2 To lastrow
Cells(i, "b") = WorksheetFunction.Substitute(Cells(i, "b"), " ", "")
Cells(i, "b") = WorksheetFunction.Substitute(Cells(i, "b"), " ", "")
Next
End Sub
Substituteは、Replaceのように、つかえません。
WorksheetFunctionをつけないとエラーが発生します。
セル内の空白を削除する方法は、色々ありますので、わかりやすいものを「つかってみる」というのが、いいかもしれませんね。