• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルvba カタカナは全角、それ以外は半角に)

Excel VBAでカタカナは全角、それ以外は半角に統一する方法

このQ&Aのポイント
  • Excel VBAを使用して、セル内の文字列をカタカナは全角、それ以外は半角に統一する方法について質問があります。
  • 現在、セルにはカタカナ、数字、漢字、文字が混在しています。全角と半角を統一するため、まずはすべてを半角に変換し、その後カタカナだけを全角に変換しようと考えています。
  • しかし、現在の方法では「ッ」「ァ」などの小さい文字や、「ー(長音)」が正しく全角に変換されません。また、濁音が「ス゛」と2文字に分割されてしまう問題も発生しています。修正するためには、これらの文字を列挙し、Replace関数などを使用して個別に修正する必要があります。実際には大変な作業ですが、他に効果的な方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.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)では「半角にできない記号」は無視されますので、 日本語より先に出てくる「数学記号や矢印」などは考慮しなくて大丈夫と思われます。 参考までにどうぞ。

kidibotkbg
質問者

お礼

文字コードを利用する方法は思いつきませんでした。 これで、半角にしたいものに対応できそうですね。 助かりました。ありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 実は最初に、すべてを「全角→半角」にするようマクロ作成したのですが 元のデータを用いて、 For f = 1 To Len(e.Value) ループの中でIF文使って判定しているけど、 Select Case で列挙したほうが作りやすいと思います。 (実行時間コストがかかるかも?) 1文字先読みして、濁音・半濁音だったらセットで判定させる。

kidibotkbg
質問者

お礼

早速の回答ありがとうございます。 select case を使うということですか。 参考にしてみます。 ありがとうございました。

関連するQ&A