見出し画像

【WordVBA】行頭のスペースを削除

仕事で「余分な空白行を1行に圧縮」にするマクロを組んでいるのですが、行頭に不要なスペースがあると、その行はスルーされていました。スペースだけが残っている行をすっきりさせるマクロです。

行頭に半角スペースがあったら削除

あれこれと試行錯誤していたら、2パターンできました。検索と置換後の指定文字列が違うだけで、結果は同じです。

Sub 行頭の半角スペースを削除1()
 
Dim allRange  As Range
Set allRange = ActiveDocument.Range(0, 0)
 
With allRange.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^32([^13])" '検索する文字列
    .Replacement.Text = "^p" '置換後の文字列
    .Wrap = wdFindStop '「文書の初めから検索し直す」をストップ
    .MatchFuzzy = False 'あいまい検索(日)をオフ
    .MatchWildcards = True 'ワイルドカードを使用する
    .Execute Replace:=wdReplaceAll 'すべて置換
End With
 
Set allRange = Nothing
  
End Sub
Sub 行頭の半角スペースを削除2()
 
Dim allRange  As Range
Set allRange = ActiveDocument.Range(0, 0)
 
With allRange.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[^l ]" '検索する文字列
    .Replacement.Text = "" '置換後の文字列
    .Wrap = wdFindStop '「文書の初めから検索し直す」をストップ
    .MatchFuzzy = False 'あいまい検索(日)をオフ
    .MatchWildcards = True 'ワイルドカードを使用する
    .Execute Replace:=wdReplaceAll 'すべて置換
End With
 
Set allRange = Nothing
  
End Sub

補足

  • 「^13」……段落記号

  • 「^32」……半角スペース

  • 「^p」 ……段落記号

  • 「^l」 ……任意指定の行区切り

VBAで思ったように検索ができないとき、ASCコードで記述するとスムーズです。ASCコードは下記のコードで調べられるので、応用もしやすいかと。""内に、調べたい記号などを入力してください。

'半角スペースのASCコードを調べる
MsgBox Asc(" ")

行頭に全角スペースがあったら削除

半角スペースは詰めず、あくまで全角スペースのみに対象を絞っています。

Sub 行頭の全角スペースを削除()
 
Dim allRange  As Range
Set allRange = ActiveDocument.Range(0, 0)
 
With allRange.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[^l ]" '検索する文字列
    .Replacement.Text = "" '置換後の文字列
    .Wrap = wdFindStop '「文書の初めから検索し直す」をストップ
    .MatchFuzzy = False 'あいまい検索(日)をオフ
    .MatchWildcards = True 'ワイルドカードを使用する
    .Execute Replace:=wdReplaceAll 'すべて置換
End With
 
Set allRange = Nothing
  
End Sub

Wordの検索で使える特殊文字

特殊文字は主に2種類あり、検索と置換ダイアログの下部にある「特殊文字」で確認できます。初期設定では「あいまい検索(日)」にチェックがあるため、グレーアウトで選択できないようになっています。

ワイルドカードを使用しないとき

ワイルドカードを使用するとき

注意点

検索と置換後とで、使える特殊文字が多少異なります。検索する文字列にカーソルがある状態と、置換後の文字列にカーソルがある状態で表示される一覧が違うので、試してみてください。