様々なWord文書を扱っていると、下図のように“同じ空白のように見えても実は違う文字”に遭遇することがあります。
今回はそんな空白文字を同じ文字に統一(もしくは削除)するWordマクロを紹介します。
Option Explicit Public Sub Sample() ReplaceSpace 2 '空白文字を全角スペースに置換 MsgBox "処理が終了しました。", vbInformation + vbSystemModal End Sub Public Sub ReplaceSpace(Optional ByVal Opt As Long = 0) '空白文字置換 'Opt 0:削除 , 1:半角スペース(U+0020)に置換 , 2:全角スペース(U+3000)に置換 Dim spaces As Variant Dim src As String, tgt As String Dim i As Long Select Case Opt Case 0: tgt = "" Case 1: tgt = ChrW(&H20) Case 2: tgt = ChrW(&H3000) Case Else MsgBox "引数Optには 0 - 2 の値を指定してください。", vbExclamation + vbSystemModal Exit Sub End Select '空白文字の定義 'http://en.wikipedia.org/wiki/Space_%28punctuation%29 参照 spaces = Array(&H20, _ &HA0, _ &H1680, _ &H180E, _ &H2000, _ &H2001, _ &H2002, _ &H2003, _ &H2004, _ &H2005, _ &H2006, _ &H2007, _ &H2008, _ &H2009, _ &H200A, _ &H200B, _ &H200C, _ &H200D, _ &H202F, _ &H205F, _ &H2060, _ &H3000, _ &HFEFF) src = "[" For i = LBound(spaces) To UBound(spaces) src = src & ChrW(spaces(i)) Next src = src & "]" ReplaceStr src, tgt End Sub Private Sub ReplaceStr(ByVal SourceString As String, ByVal TargetString As String) '文字置換 With ActiveDocument.Content.Find .ClearFormatting .Text = SourceString With .Replacement .ClearFormatting .Text = TargetString End With .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True .MatchFuzzy = False .Execute Replace:=wdReplaceAll End With End Sub
上記マクロを実行すると、文書の中にある空白文字をすべて全角スペース(U+3000)に置き換えることができます。
空白文字の処理にお困りの方は是非お試しください。
この記事へのコメントはありません。