【VBA】セルの空白を削除する(Replaceメソッド)

Excel・VBA

Replaceメソッドを利用してセル中の空白を削除する方法です。

Replaceメソッドの概要

Replaceメソッドは、Excelではctrf+Fで呼び出して使用できる機能です。関数を使用せずに簡単に空白や指定した文字列を削除できるので便利です。

書式は次の通りです。

《書式》
Range.Replace (WhatReplaceLookAtSearchOrderMatchCaseMatchByteSearchFormatReplaceFormat)

主要な引数の設定内容のイメージは、下図のとおりです。

Whatには、検索(置換)する文字列を指定します。

Replaceは、置換後の文字列を指定します。

LookAtは、検索の仕方を指定します。

LookAtの設定(括弧内は、値で指定する場合)
・xlWhole(1):検索テキスト全体を検索する。
・xlPart(2) :検索テキストの一部を検索する。

SerchOrderは、検索の方向を指定します。

SerchOrderの設定(括弧内は、値で指定する場合)
・xlByRows(1):行を横方向に検索したのち、次の行に移動する。
・xlByColumns(2):列を下方向に検索したのち、次の列に移動する。

MatchCaseは、大文字と小文字の区別をするかどうかを指定します。

MachCaseの設定
True:大文字と小文字を区別する。
False:大文字と小文字を区別しない。

MatchByteは、2 バイト言語サポートを選択またはインストールした場合にのみ使用可能。

MatchByteの設定
True:2 バイト文字が 2 バイト文字とだけ一致するようにする。
False: 2 バイト文字が同等の 1 バイト文字とも一致するようにする。

SearchFormatは、検索書式を指定します。

ReplaceFormatは、置換書式を指定します。

Replaceメソッドを使用してセルの空白を削除する

Replaceメソッドを使用したサンプルコードです。今回は下記記事の内容であるシート内全体を対象として、文字列中の空白を削除するコードを作成します。

Sub rplc()
    Cells.Replace What:=" ", _
                  Replacement:="", _
                  LookAt:=2, _
                  SearchOrder:=1, _
                  MatchCase:=False, _
                  matchbyte:=False
End Sub

上記コードでシート内すべてを対象として、セルに記載された空白を全角・半角関係なく削除します。

すべてのシートを対象とする場合は、次のようにします。

Sub rplc2()
    'すべてのシートを対象としてセル中の空白(全角・半角)を削除する。
    Dim ws As Worksheet
    
    For Each ws In Worksheets
      ws.Cells.Replace What:=" ", _
                  Replacement:="", _
                  LookAt:=2, _
                  SearchOrder:=1, _
                  MatchCase:=False, _
                  Matchbyte:=False
    Next
End Sub

最後は、任意のファイルを開き、そのファイルのすべてのシートを対象としてセル中の空白を削除する場合です。

Sub rplc3()
    '指定したファイルのすべてのシートを対象としてセル中の空白(全角・半角)を削除する。

    Dim ws As Worksheet
    Dim fi As String
    Dim fiName As String
    
    Dim Fltr As String: Fltr = "Excelファイル,*.xls*"
    Dim titl As String: titl = "Excelファイルを選択"
    fi = Application.GetOpenFilename(FileFilter:=Fltr, Title:=titl)
    
    Workbooks.Open Filename:=fi
    fiName = ActiveWorkbook.Name
    
    For Each ws In Workbooks(fiName).Worksheets
      ws.Cells.Replace What:=" ", _
                  Replacement:="", _
                  LookAt:=2, _
                  SearchOrder:=1, _
                  MatchCase:=False, _
                  Matchbyte:=False
    Next
    
    Workbooks(fiName).Close savechanges:=True
End Sub

今回はここまでです。

コメント

タイトルとURLをコピーしました