
お世話になっております。
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
No.3ベストアンサー
- 回答日時:
No.2の回答にあるマクロ部分をそのままコピーすると長音部分が
間違っているので、正しく置換されません。
補足のものをコピーして再利用したので、「―-ヾ」にある長音
部分がユニコードの2015(全角ダッシュ)になっていますので、
それ以降の文字も対象にしてしまいます。
訂正したもの(長音に修正)
F.Text = "[0-9a-zA-Zァ-ワー]{1,}"
それと、半角にならないカタカナを含める意味がないので、
' ユニコードの&h30FA : 「ヲ゛」を含める場合
F.Text = "[0-9a-zA-Zァ-" & ChrW(Val("&h30FA")) & "ー-ヾ]{1,}"
は無意味ですので必要ないと思います。
(「ヰ~ヺ」及び「ヽ」と「ヾ」は半角にならないので)
No.2
- 回答日時:
「を」に濁点を付けた「ヺ」が検索対象の文章にあるのですか?
もしも不要なら、ヶを対象にしてはいかが。
F.Text = "[0-9a-zA-Zァ-ヶ―-ヾ]{1,}"
どうしても必要なら
' ユニコードの&h30FA : 「ヲ゛」を含める場合
F.Text = "[0-9a-zA-Zァ-" & ChrW(Val("&h30FA")) & "―-ヾ]{1,}"
で対応できると思います。
No.1
- 回答日時:
メッセージボックスで単語単位で確認しないと駄目なの?
単純に全角英数字と全角カタカナを半角文字にするなら、以下の
マクロでも可能です。
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
ならそのまま書いても問題なく判断されます。
数字→英字→カタカナの順番ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの任意の列をダブル...
-
エクセルの『検索と置換ボック...
-
カンマ( , )をタブに置換したい。
-
エクセルの文字・数字の前後の...
-
文字の列を揃えるには
-
複数のスペースを1つのタブに...
-
エクセル 置換又は関数でかっこ...
-
Excelで全角ハイフンを半角ハイ...
-
エクセル重複削除で綺麗に削除...
-
Word:差し込み印刷時に文字列...
-
ExcelのVBA 正規表現でタブを...
-
1文字だけ置換したい
-
秀丸で余分なスペースを削除したい
-
セルの文字列後ろのスペース削除
-
word 改行マークを印刷時に表示...
-
丸付き数字やローマ数字などの...
-
カンマを改行に変換する方法
-
桐の項目名の変数利用(一括処理)
-
エクセルで濁点カナの変換方法...
-
エクセルの「置換」で1行の部分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマを改行に変換する方法
-
カンマ( , )をタブに置換したい。
-
エクセル重複削除で綺麗に削除...
-
CSVファイルの任意の列をダブル...
-
Word:差し込み印刷時に文字列...
-
Excelで全角ハイフンを半角ハイ...
-
秀丸で余分なスペースを削除したい
-
エクセルの『検索と置換ボック...
-
文字列に含まれているダブルク...
-
文字の列を揃えるには
-
セルの文字列後ろのスペース削除
-
エクセルで濁点カナの変換方法...
-
ワード (word ) 日本語の文字...
-
1文字だけ置換したい
-
word 改行マークを印刷時に表示...
-
検索と置換でチェックを外すこ...
-
テキストでタブを検索してスペ...
-
Excel : テキストボックス中の...
-
桐の項目名の変数利用(一括処理)
-
エクセル 置換又は関数でかっこ...
おすすめ情報
ご回答どうもありがとうございました。
もし可能なら、・や・・・なども変換してしまうようなので、これらを除くことは可能でしょうか?英数字と全角カタカナを別々に指定していた時には、これらは変換の対象になっていませんでした。
リンク先にあるのを参考にして、ァ-ヺまで指定して、そこから・を飛ばして、―-ヾと指定する?のかなあと思いましたが、ヺを入力しても?と入力されてしまいました。
F.Text = "[0-9a-zA-Zァ-ヺ ―-ヾ]{1,}"
みたいなイメージだったんですが?
どうすればいいでしょうか?