仕事と子育てを両立。働くママを、もっと笑顔に!>>

お世話になっております。
word2013で、下記のようにネットで誰かが作成していた全角カタカナを半角カタカナに置換するマクロがあり、これにプラスして、全角英数字から半角英数字(数字とアルファベッドのみで記号等は不要)に置換できるようにししたいと思っています。

下記マクロのF.Text を
F.Text = "[0-9a-zA-Z" & ChrW(Val("&h30FA")) & "]{1,}"
このようにすれば、半角英数字に置換できましたが、さらにこれに半角カタカナの検索、置換も行いたいのですが、うまくいきません。
例えば、単純に2つを合わせて、
F.Text = "[ァ- 0-9a-zA-Z" & ChrW(Val("&h30FA")) & "]{1,}"
では、無理でした。
どうすれば、両方いけるでしょうか?多分可能ですよね?

とりあえず、今は、英数字置換用とカタカナ置換用を2つ作っておいて、片方の処理が終わったらcallでとばして、もう一方の置換に進むようにしたら一応できましたが、まとめれるならまとめたいです。

誰かが作ったものなので、私はF.Textの内容はよく分かりません。前半は、ワイルドカードで検索していることが分かったので英数字置換用に改造できましたが、後ろの & ChrW(Val("&h30FA")) & "]{1,}"は、何をしているのでしょうか?
この辺りも変更が必要なのでしょうか?

もし分かる方がいればよろしくお願いいたします。

Sub 全角カタカナを半角カタカナへ置換()
Dim F As Find
Dim Ans

Set F = Selection.Find
Call Target(F)

F.Text = "[ァ-" & ChrW(Val("&h30FA")) & "]{1,}"

Selection.HomeKey Unit:=wdStory

Do While F.Execute = True
With Selection
Ans = MsgBox(.Text & "を半角にしますか?", vbYesNoCancel)
If Ans = vbYes Then
.Words(1).Case = wdHalfWidth
.Collapse Direction:=wdCollapseEnd
ElseIf Ans = vbCancel Then
End
End If
End With
Loop
End Sub

Sub Target(F)
With F
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.MatchByte = False
.MatchFuzzy = False
.MatchWildcards = True
End With
End Sub

質問者からの補足コメント

  • ご回答どうもありがとうございました。
    もし可能なら、・や・・・なども変換してしまうようなので、これらを除くことは可能でしょうか?英数字と全角カタカナを別々に指定していた時には、これらは変換の対象になっていませんでした。
    リンク先にあるのを参考にして、ァ-ヺまで指定して、そこから・を飛ばして、―-ヾと指定する?のかなあと思いましたが、ヺを入力しても?と入力されてしまいました。
    F.Text = "[0-9a-zA-Zァ-ヺ ―-ヾ]{1,}"
    みたいなイメージだったんですが?
    どうすればいいでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/03/15 00:16

A 回答 (3件)

No.2の回答にあるマクロ部分をそのままコピーすると長音部分が


間違っているので、正しく置換されません。
補足のものをコピーして再利用したので、「―-ヾ」にある長音
部分がユニコードの2015(全角ダッシュ)になっていますので、
それ以降の文字も対象にしてしまいます。


訂正したもの(長音に修正)

F.Text = "[0-9a-zA-Zァ-ワー]{1,}"



それと、半角にならないカタカナを含める意味がないので、
' ユニコードの&h30FA : 「ヲ゛」を含める場合
F.Text = "[0-9a-zA-Zァ-" & ChrW(Val("&h30FA")) & "ー-ヾ]{1,}"
は無意味ですので必要ないと思います。
(「ヰ~ヺ」及び「ヽ」と「ヾ」は半角にならないので)
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
試してみた限りで、これで思ったように動作しそうです。
助かりました。

お礼日時:2018/03/16 00:19

「を」に濁点を付けた「ヺ」が検索対象の文章にあるのですか?


もしも不要なら、ヶを対象にしてはいかが。

F.Text = "[0-9a-zA-Zァ-ヶ―-ヾ]{1,}"

どうしても必要なら

' ユニコードの&h30FA : 「ヲ゛」を含める場合
F.Text = "[0-9a-zA-Zァ-" & ChrW(Val("&h30FA")) & "―-ヾ]{1,}"

で対応できると思います。
    • good
    • 0

メッセージボックスで単語単位で確認しないと駄目なの?


単純に全角英数字と全角カタカナを半角文字にするなら、以下の
マクロでも可能です。

Sub 全角英数字及びカタカナを半角に()
 Dim myRange As Range

 Set myRange = ActiveDocument.Range(0, 0)
  With myRange.Find
   .Text = "[0-9a-zA-Zァ-ヾ]{1,}"
   .MatchWildcards = True

    Do While .Execute = True
     myRange.CharacterWidth = wdWidthHalfWidth
     myRange.Collapse wdCollapseEnd
    Loop

  End With
 Set myRange = Nothing

End Sub

どうしても質問にあるマクロを使いたいのなら、F.Textの部分を
以下のように修正します。
F.Text = "[0-9a-zA-Zァ-ヾ]{1,}"

参考サイト
Word2010:ワイルドカードを使った文字種ごとの検索について
http://www.office-qa.com/Word/wd212.htm
[ワイルドカード]で指定する文字種の順番は、[記号と特殊文字]
ダイアログの順番で指定するのが基本です。
全角長音「ー」を意味するChrW(Val("&h30FA"))の部分も、Word
ならそのまま書いても問題なく判断されます。
数字→英字→カタカナの順番ですね。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング