【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種類あり、検索と置換ダイアログの下部にある「特殊文字」で確認できます。初期設定では「あいまい検索(日)」にチェックがあるため、グレーアウトで選択できないようになっています。
ワイルドカードを使用しないとき
ワイルドカードを使用するとき
注意点
検索と置換後とで、使える特殊文字が多少異なります。検索する文字列にカーソルがある状態と、置換後の文字列にカーソルがある状態で表示される一覧が違うので、試してみてください。