ある特殊な条件下での「日本語のみ全角化」
2年ほど前の事案を、思い出しながら再現。
あるリストに入力された文字列について、入力ルールが無かったため、全角と半角が
無秩序に混在していました。
そこで、以下のルールで入力内容を編集することにしました。
- 日本語は全て全角化
- 日本語以外は全て半角化
通常なら、一文字ずつ抜き出して判定・処理するのかもしれませんが、少々面倒です。
そこで、たまたまリスト内に「ひらがな」が無かったことを利用して、このような処理を
行いました。
Sub test() Dim OriginRange As Range Dim targetRange As Range Set OriginRange = Range("B1") Set targetRange = Range("B4") targetRange = StrConv(OriginRange.Text, vbNarrow) targetRange = Evaluate("Phonetic(" & targetRange.Address & ")") End Sub
なお、ふりがなの設定は「全角カタカナ」にしておきます。
今回使用したPhonetic関数は、参照セルの文字列に紐づく変換情報を利用して、ふりがなを表示する関数です。通常このように、漢字も平仮名も全てカタカナになります。
しかし今回のように、OriginRange.Text で表示内容だけを取得することで、ふりがな用の情報が失われるようです。従って、
- ふりがな用情報を一旦除去
- 文字列を全て半角化
- Phenetic 関数で変換 ⇒ 半角が無い「漢字」と、半角カタカナだけが全角化
となったわけです。
なお、当時は WorksheetFunction に Phonetic 関数がなく、Evaluateメソッドで行ったと記憶していたのですが、今確認してみると、Phonetic 関数が含まれていました。従って最終行は、
targetRange = WorksheetFunction.Phonetic(targetRange)
でもOKです(動作確認済み)。
今回はかなり限定的で変則的でしたが、このような用法もあるということで。
参考まで。