- ベストアンサー
Word2000 不要な半角スペースを削除するマクロ作れますか?
Word2000で文章を校正しています。 英数字と日本語の間は半角スペースを入れないのがルールなのですが、 原稿には、不要な半角スペースが大量に含まれており、困っています。 例>> おしえて△goo → おしえてgoo Microsoft△と△Oracle で → MicrosoftとOracleで このような半角スペースを一括で置換するマクロを作ることは (技術的に)可能でしょうか。 また、Word の既存機能を使って、 このような半角スペースを特定することができますでしょうか。 不要なのは、英数字と日本語に挟まれた半角スペースのみです。 ご存じの方がいらっしゃいましたら、 よろしくご教示ください。b
- みんなの回答 (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 コードが入るので、このようなサブルーチン型にしました。
その他の回答 (3)
- enunokokoro
- ベストアンサー率74% (3543/4732)
置換をする前に以下のことを確認してくれませんか。 メニューから[ツール]→[オプション]→[表示]タブに ある[編集記号の表示]で[すべて]にチェックを入れる。 これで半角スペース部分が挿入されたスペースなら、 何らかの編集記号が表示されます。 全く文字間に何も編集記号が無いのなら、メニューの [書式]→[段落]→[体裁]タブにある[文字幅と間隔]の [日本語と英字の間隔を自動調整する]のチェックと、 [日本語と数字の間隔を自動調整する]のチェックが、 入ったままだと日本語と英数字の間にスペースが入る ようになります。 http://web.sfc.keio.ac.jp/~t03920hm/ahoWord/aw_ejkan.htm [ Ctrl+A ]キーで全選択し、上記のチェックを外して みて下さい。英数字と日本語に挟まれた半角スペース が消えませんか? 全選択する前にどこかの段落で試しても良いですね。
お礼
意図的に入力された半角スペースの為、この方法では削除することができませんでしたが、このような技があるとは知りませんでした。 とても勉強になりました。 回答いただき、ありがとうございます。
- papayuka
- ベストアンサー率45% (1388/3066)
一応、 検索する文字列に ([!A-Za-z])△([A-Za-z]) または ([A-Za-z])△([!A-Za-z]) 置換後の文字列に \1\2 (△は半角空白の意味) でオプションのワイルドカードを使用するにチェックを入れて置換したら、サンプルに関しては置換されたけど、、、 正規表現はまったく自信ないです、、、(^^;
お礼
ありがとうございます。 無事解決しました。
- popesyu
- ベストアンサー率36% (1782/4883)
Wordでも正規表現を使った置き換えでできるんじゃないんですかね。 http://homepage2.nifty.com/zaco/rexp/rexp02.html http://homepage2.nifty.com/buckeye/software/helps/st/pages/regular.html Wordで正規表現を使ったことがないのでどこまでできるかは知りませんが。
お礼
ありがとうございます。 無事解決しました。
お礼
おおおおおおおっ!! 素晴らしい。 見事に、一発で日本語と英数字の間の半角だけが削除されました。 コードまで書いていただいてありがとうございました。 このやり方で対応しようと思います。 マイクロソフトのサポートページ、私も参照してみます。