ある特殊な条件下での「日本語のみ全角化」

2年ほど前の事案を、思い出しながら再現。

あるリストに入力された文字列について、入力ルールが無かったため、全角と半角が
無秩序に混在していました。

そこで、以下のルールで入力内容を編集することにしました。

  1. 日本語は全て全角化
  2. 日本語以外は全て半角化

通常なら、一文字ずつ抜き出して判定・処理するのかもしれませんが、少々面倒です。
そこで、たまたまリスト内に「ひらがな」が無かったことを利用して、このような処理を
行いました。

f:id:Infoment:20180725231432p:plain

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

なお、ふりがなの設定は「全角カタカナ」にしておきます。

f:id:Infoment:20180726064456p:plain

今回使用したPhonetic関数は、参照セルの文字列に紐づく変換情報を利用して、ふりがなを表示する関数です。通常このように、漢字も平仮名も全てカタカナになります。

f:id:Infoment:20180726063912p:plain

しかし今回のように、OriginRange.Text で表示内容だけを取得することで、ふりがな用の情報が失われるようです。従って、

  1. ふりがな用情報を一旦除去
  2. 文字列を全て半角化
  3. Phenetic 関数で変換 ⇒ 半角が無い「漢字」と、半角カタカナだけが全角化

となったわけです。

なお、当時は WorksheetFunction に Phonetic 関数がなく、Evaluateメソッドで行ったと記憶していたのですが、今確認してみると、Phonetic 関数が含まれていました。従って最終行は、

        targetRange = WorksheetFunction.Phonetic(targetRange)

でもOKです(動作確認済み)。

今回はかなり限定的で変則的でしたが、このような用法もあるということで。

参考まで。