- 締切済み
2バイト文字を一括削除するマクロ
英語と日本語が混在しているdocファイルがあり、 日本語のみ一括削除したいと思っております。 日本語(=2バイト文字)を一括削除するマクロはあるでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- TTak
- ベストアンサー率52% (206/389)
下記のように、Functionプロシージャをサブルーチンとして使い、BYTE2_FINDを実行してみてください。 成功する場合は、MsgBox関数の直後に削除のコードを入れてみてはいかがでしょう? Sub BYTE2_FIND() Dim myText As String Dim i As Integer For i = 1 To ActiveDocument.Characters.Count myText = Selection.Text If LenMbcs(myText) > 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend If MsgBox("2バイト文字が見つかりました。続けますか?", vbYesNo) = vbNo Then Exit Sub End If End If Selection.MoveRight Next i End Sub Function LenMbcs(ByVal str As String) '2バイト判別Function LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function
- TTak
- ベストアンサー率52% (206/389)
ドキュメントの各文字を順々にLenB関数でチェックしてゆく方法があります。 Function LenMbcs(ByVal str As String) '2バイト判別Function LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function ただ、これをループ処理にかけ、削除してゆくことになりますが、長文になると遅くなります。 試してみては如何でしょう。
- SortaNerd
- ベストアンサー率43% (1185/2748)
Wordは使っていないのでネット上の情報によりますが、 恐らく、ワイルドカードを使用して、 [! -~] を空白に置き換えればよいと思います。 ちなみにこれはアクセント付きアルファベットも削除します。
補足
ありがとうございます。 さっそく試してみました。きれいに削除できるのですが、 同時に、ソフトリターンも削除されてしまい、複数の英文がひとつに なってしまう現象が起きてしまいます。 ソフトリターンは含まないやり方はご存知でしょうか。
補足
ご連絡ありがとうございました。 上記でマクロを作成してみました。 ただ、私自身ほとんどマクロの知識がないため、 上記でのマクロでは、エラーが出て使用できない状態です。 Fuction~End Function部分で新規マクロを作成すれば宜しいのですよね? すみませんが、追加で他の文言も登録、等々ありましたらご連絡いただけると大変助かります。