• ベストアンサー

Word2000 不要な半角スペースを削除するマクロ作れますか?

Word2000で文章を校正しています。 英数字と日本語の間は半角スペースを入れないのがルールなのですが、 原稿には、不要な半角スペースが大量に含まれており、困っています。 例>> おしえて△goo → おしえてgoo Microsoft△と△Oracle で → MicrosoftとOracleで このような半角スペースを一括で置換するマクロを作ることは (技術的に)可能でしょうか。 また、Word の既存機能を使って、 このような半角スペースを特定することができますでしょうか。 不要なのは、英数字と日本語に挟まれた半角スペースのみです。 ご存じの方がいらっしゃいましたら、 よろしくご教示ください。b

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんには。 >英数字と日本語の間は半角スペースを入れないのがルールなのですが、 通常は、和字とANSIの間には半角スペースを入れるはずですが。 正規表現の話が出ていましたので、一応、正規表現で行いました。Wordのワイルドカードは似ていますが、正規表現とは違います。特に、「*」「?」が違うように思います。もしかしたら、ワイルドカードで出来るかもしれませんが、あまり期待できないような気がします。 それと、国内のWeb サイトに参考になるようなWord VBAは出ていないと思います。ただし、Word97のサンプルは、どこかの出版社のサイトには残っているはずです。ただ、早い話、マイクロソフト・サポートには、まだぎっしり、Word VBAのコードが残っています。整理されていないのが、残念です。 なお、以下は、Word 2003を使って作っていますが、メソッドのプロパティ等は、Word2000のそれとチェックはしております。Wordマクロは、Excelとは違い、戻すことが可能ですが、一応、バックアップはしておいてください。 '--------------------------------------------------------------- Sub OneByteSpaceDeleteProc()  Dim objRegExp As Object  Dim myPattern As Variant  Dim ReplaceWords As String  Dim Matches As Object  Dim Match As Object  Set objRegExp = CreateObject("VBscript.RegExp")  '  Selection.HomeKey Unit:=wdStory  Selection.EndKey Unit:=wdStory, Extend:=wdExtend  '和字の半角カタカナは省きます。  For Each myPattern In Array("[、-龍]\s+[0-~]+", "[0-~]+\s+[、-龍]")  With objRegExp   .Global = True   .IgnoreCase = True   .Pattern = myPattern   If .Test(Selection) Then    Set Matches = .Execute(Selection)    For Each Match In Matches     '半角、vbBinaryCompare     ReplaceWords = Replace(Match.Value, " ", "", , , vbBinaryCompare)     myReplace Match.Value, ReplaceWords    Next Match    End If   End With  Next myPattern   Selection.HomeKey Unit:=wdStory   MsgBox "終了", 64  Set objRegExp = Nothing End Sub 'Wordのプロパティは、省略しないでくださいね。 Sub myReplace(SearchWd As String, ReplaceWd As String)  Selection.Find.ClearFormatting   Selection.Find.Replacement.ClearFormatting   With Selection.Find     .Text = SearchWd     .Replacement.Text = ReplaceWd     .Forward = True     .Wrap = wdFindContinue     .Format = False     .MatchCase = False     .MatchWholeWord = False     .MatchByte = True     .MatchAllWordForms = False     .MatchSoundsLike = False     .MatchWildcards = False     .MatchFuzzy = False   End With   Selection.Find.Execute Replace:=wdReplaceAll End Sub p.s. そのまま、Selection をReplace で置き換えようとすると、置き換えるたびに、CR コードが入るので、このようなサブルーチン型にしました。

2006papiko
質問者

お礼

おおおおおおおっ!! 素晴らしい。 見事に、一発で日本語と英数字の間の半角だけが削除されました。 コードまで書いていただいてありがとうございました。 このやり方で対応しようと思います。 マイクロソフトのサポートページ、私も参照してみます。

その他の回答 (3)

回答No.3

置換をする前に以下のことを確認してくれませんか。 メニューから[ツール]→[オプション]→[表示]タブに ある[編集記号の表示]で[すべて]にチェックを入れる。 これで半角スペース部分が挿入されたスペースなら、 何らかの編集記号が表示されます。 全く文字間に何も編集記号が無いのなら、メニューの [書式]→[段落]→[体裁]タブにある[文字幅と間隔]の [日本語と英字の間隔を自動調整する]のチェックと、 [日本語と数字の間隔を自動調整する]のチェックが、 入ったままだと日本語と英数字の間にスペースが入る ようになります。 http://web.sfc.keio.ac.jp/~t03920hm/ahoWord/aw_ejkan.htm [ Ctrl+A ]キーで全選択し、上記のチェックを外して みて下さい。英数字と日本語に挟まれた半角スペース が消えませんか? 全選択する前にどこかの段落で試しても良いですね。

2006papiko
質問者

お礼

意図的に入力された半角スペースの為、この方法では削除することができませんでしたが、このような技があるとは知りませんでした。 とても勉強になりました。 回答いただき、ありがとうございます。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

一応、 検索する文字列に  ([!A-Za-z])△([A-Za-z]) または ([A-Za-z])△([!A-Za-z]) 置換後の文字列に  \1\2 (△は半角空白の意味) でオプションのワイルドカードを使用するにチェックを入れて置換したら、サンプルに関しては置換されたけど、、、 正規表現はまったく自信ないです、、、(^^;

2006papiko
質問者

お礼

ありがとうございます。 無事解決しました。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

Wordでも正規表現を使った置き換えでできるんじゃないんですかね。 http://homepage2.nifty.com/zaco/rexp/rexp02.html http://homepage2.nifty.com/buckeye/software/helps/st/pages/regular.html Wordで正規表現を使ったことがないのでどこまでできるかは知りませんが。

2006papiko
質問者

お礼

ありがとうございます。 無事解決しました。

関連するQ&A