様々な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)に置き換えることができます。
空白文字の処理にお困りの方は是非お試しください。




















この記事へのコメントはありません。