FC2ブログ


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Excel上で全角英数字は半角、半角カタカナは全角にするVBA

印刷業界にいると、それはもう素敵なデータ(笑)を貰う機会が多いわけです。
で、それをこつこつと印刷用ソフトに使える形のデータにするのもDTPの仕事だったりするわけです。
たいがいさくらエディタなどで置換してしまうんですが、そのためだけにテキスト形式に書き出すのめんどいし、
かといってテキストエディタ立ち上げてコピペしたことによって人的なミスが起こるかもしれないし。。
というわけで、Excel上でそのたぐいのことはやってしまいましょう。

コードをざっと紹介すると、VBScriptを参照・正規表現を利用してまず全角文字すべてを半角にします。
そうすると、全角カタカナも半角にしてしまうので、処理後に半角カタカナになったものを全角に再変換します。
ワークシートそのものでなく、列単位で変換したい場合はActiveSheet.UsedRangeをselectionに変更すればOK。
その場合は、変換したい範囲を選択してから実行してください。


テスト環境はWindowsXP,バージョンは2007です。
このブログのタイトルは「Win for DTP」ですからMacでの動作は当然保証しません。
あしからず。

Sub 全角英数字半角化_半角カタカナ全角化()


Dim i As Long
Dim strPattern As String, str As String
Dim Re As Variant, rematch As Variant, match As Variant
Dim r As Range

Application.ScreenUpdating = False

i = MsgBox("シート全体の英数字を半角に、半角カタカナは全角にしますか?", vbYesNo + vbQuestion)
If i = vbYes Then

Set Re = CreateObject("VBScript.regExp")
'先にアルファベット・カタカナを全て全角から半角へ
strPattern = "[A-Za-z0-9]"
With Re
.Pattern = strPattern
.Ignorecase = True
.Global = True
For Each r In ActiveSheet.UsedRange '選択範囲のみに実行したい場合はこの行のActiveSheet.UsedRangeをselectionに変更
If .test(r.Formula) Then
r = StrConv(r, vbNarrow)
End If
Next r
End With
'ここから半角カタカナを全角処理

strPattern = "([" & Chr(166) & "-" & Chr(223) & "]+)"
With Re
.Pattern = strPattern
.Global = True
For Each r In ActiveSheet.UsedRange '選択範囲のみに実行したい場合はこの行のActiveSheet.UsedRangeをselectionに変更
Set rematch = .Execute(r)
For Each match In rematch
str = StrConv(.Replace(match, "$1"), vbWide)
r.Value = Replace(r.Value, match, str)
Next
Next

Set Re = Nothing

End With

Else: MsgBox "処理を中止します", vbInformation

End If

End Sub


スポンサーサイト

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿

管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。