- ベストアンサー
Excel VBAでカタカナは全角、それ以外は半角に統一する方法
- Excel VBAを使用して、セル内の文字列をカタカナは全角、それ以外は半角に統一する方法について質問があります。
- 現在、セルにはカタカナ、数字、漢字、文字が混在しています。全角と半角を統一するため、まずはすべてを半角に変換し、その後カタカナだけを全角に変換しようと考えています。
- しかし、現在の方法では「ッ」「ァ」などの小さい文字や、「ー(長音)」が正しく全角に変換されません。また、濁音が「ス゛」と2文字に分割されてしまう問題も発生しています。修正するためには、これらの文字を列挙し、Replace関数などを使用して個別に修正する必要があります。実際には大変な作業ですが、他に効果的な方法はないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> また、「ズ」など濁音が「ス゛」と2文字になって そりゃもちろん・・半角変換後に「一文字ずつ全角に変換」していますから、 濁点や半濁点も「1文字」として全角に変換しちゃいますよね。 じゃぁどうしましょう?ということで、 逆の手順で考えてみると上手くいくかも? Sub test() Dim e As Range Dim f As Integer Dim rData As Variant, ansData As Variant Range("A1:A10").Select For Each e In Selection ansData = "" rData = StrConv(e.Value, vbWide) For f = 1 To Len(rData) If Asc(Mid(rData, f, 1)) < -32097 Then ansData = ansData & StrConv(Mid(rData, f, 1), vbNarrow) Else ansData = ansData & Mid(rData, f, 1) End If Next f e.Value = ansData Next e End Sub さぁ、何を逆に考えたでしょう(笑)。 簡単に解説してみると、 ・すべて全角に変換 ・一文字ずつ取り出しながら ・Ascで変換した文字コードが「-32097=“ぁ”」より小さかったら ・半角に(出来るものは)変換 ・それ以外は ・そのまま ・文字列長分繰り返し ・セルに戻す という作業です。 文字コードに関しては以下でご確認ください。 http://charset.7jp.net/jis.html “日本語”で最初に出てくる文字は「ぁ」で、 そのコードを10進数に変換したのが「-32097」です。 上記ではこの「-32097」より小さい数字は「日本語以外=半角に変換」としています。 ちなみに・・StrConv(Narrow)では「半角にできない記号」は無視されますので、 日本語より先に出てくる「数学記号や矢印」などは考慮しなくて大丈夫と思われます。 参考までにどうぞ。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
> 実は最初に、すべてを「全角→半角」にするようマクロ作成したのですが 元のデータを用いて、 For f = 1 To Len(e.Value) ループの中でIF文使って判定しているけど、 Select Case で列挙したほうが作りやすいと思います。 (実行時間コストがかかるかも?) 1文字先読みして、濁音・半濁音だったらセットで判定させる。
お礼
早速の回答ありがとうございます。 select case を使うということですか。 参考にしてみます。 ありがとうございました。
お礼
文字コードを利用する方法は思いつきませんでした。 これで、半角にしたいものに対応できそうですね。 助かりました。ありがとうございました。