こんばんは。
私は、もう少し複雑なものを、ここで発表していますが、検索したら出てくるとは思います。
Excel用も出てくるはずです。質問の文章は、厳密に、WordなのかExcelなのか読み取れませんが、比較的コードが少ないWordを書いておきます。あくまでも私のオリジナルです。
その前に、通常の文章の修正の場合は、本来、文字種の揺れの問題ですから、
ツール-オプション-文章構成の詳細設定
いくつかの揺れのチェック
カタカナ設定-全角統一
英文字設定-半角統一
で、検出は出来るはずです。全角数字は、ここでは出させませんが、どこかに半角の数字を入れれば、出てくるはずです。
以下は、Word用マクロとして、2003年に、雑誌社のサポートサイトで、私が発表したものを加工したものです。その後、あまり、内容については検証されていません。理由は、ここでは、もう少し複雑な質問が出ているからです。また、コードの変数の FChr, LChr は、本来はね必要ないのですが、ネットでは、半角カタカナが使えないので、以下のようにしました。
試してみましたが、文書校正ツールに引っかからないようなので、出来ているように思います。
>「Excelの関数を使えば良い」
それは、何かの間違いだと思います。なお、Excelは、またコードが違います。
Sub HankakuZenkaku()
Dim t As Integer
Dim myMsg As String
Dim FChr As String
Dim LChr As String
Selection.HomeKey Unit:=wdStory '文書の先頭に
On Error GoTo Errmsg:
With Selection.Find
.ClearFormatting
.Text = ""
.Replacement.Text = ""
.MatchFuzzy = False
'半角カタカナ
FChr = Chr("&HA6") '半角ヲ
LChr = Chr("&HDF") '半角゜
While .Execute(FindText:="[" & FChr & "-" & LChr & "]{1,}", _
Wrap:=wdFindContinue, MatchWildcards:=True) = True
Selection.Range.CharacterWidth = wdWidthFullWidth
t = t + 1
Wend
'数字
While .Execute(FindText:="[0-9]{1,}", _
Wrap:=wdFindContinue, MatchWildcards:=True) = True
Selection.Range.CharacterWidth = wdWidthHalfWidth
t = t + 1
Wend
'アルファベット
While .Execute(FindText:="[A-z]{1,}", _
Wrap:=wdFindContinue, MatchWildcards:=True) = True
Selection.Range.CharacterWidth = wdWidthHalfWidth
t = t + 1
Wend
Selection.HomeKey Unit:=wdStory '文書の先頭に
If t > 0 Then
myMsg = t & "語、変換しました。"
Else
myMsg = "変換するべき文字はありませんでした。"
End If
MsgBox myMsg, vbInformation
End With
Exit Sub
Errmsg:
MsgBox "エラー!: " & Err.Description, vbExclamation
End Sub
お礼
御返事・御礼が遅れまして、大変失礼致しました。 引き続いての御回答、ありがとうございます。 Wordのマクロの参考書はやはり僅少な事、納得致しました。そんなにも世間での需要が無いというのは、意外でした。「Wordで実践...」は自分も先日買ってみたのですが、まだまだです。 「全角の色々な記号を半角に揃える」は、意外に奥が深いというか、難しい話だった事を理解しました。以前は、環境の関係で、気軽にフリーウェアのツールで対処していたのですが、今は手が縛られている為に苦労しています。 少しずつ、勉強してみたいと思います。ありがとうございます。