3/16/2022

Excel。VBA。セル内の空白を手早く削除するには、どうしたらいい【Remove blanks】

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をつけないとエラーが発生します。


セル内の空白を削除する方法は、色々ありますので、わかりやすいものを「つかってみる」というのが、いいかもしれませんね。