小さい会社の1人SEの開発記というか奮戦記

  1. Excel
  2. 1685 view

漢字とひらがな以外を半角に変換する【Excel VBA】

いまさらそんなニーズはあるのか?と思わる方はおられるとは思いますが、お客様の都合でメインフレーム時代から「カタカナは半角に決まっている。数字とアルファベットもね。」とおっしゃられる方は多数います。お客様は神様ですので「御意」というしかない訳です。今回はその変換をエクセルの関数に落とし込んだものを紹介します。

やりたい事

ポイントになるのは「ひらがなは全角だけどカタカナは半角にしたい。」と言う事です。

標準関数ではこの仕様はサポートされていませんので自分で関数を作るしかありません。

考え方

  1. 「漢字とひらがな以外」を紐解きます。カタカナかアルファベットか数字か記号と言う事に考えます
  2. 半角に変換したい対象の文字列を作成します。今回は以下に設定しました
    カタカナ:ァ,ア,ィ,イ,ゥ,ウ,ヴ,ェ,エ,ォ,オ,ヵ,カ,ガ,キ,ギ,ク,グ,ヶ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン
    アルファベット:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
    数字:1,2,3,4,5,6,7,8,9,0
    記号:!,#,$,%,&,',(,),*,+,-,.,/,:,;,<,=,>,?,@,[,\,],^,_,{,|,},。,、,,
  3. 対象の文字列を配列に落とし込み、変換したい文字列の左端から右端まで合致をチェックし、合致すれば半角に変換します。

作成した関数

Function カナ英数字半角化(TXT_MOJI As String)

‘ 変数宣言
Dim ARY_KATAKANA ‘ カタカナ返還対象文字列
Dim ARY_ALPHABET ‘ アルファベット変換対象文字列
Dim ARY_NUMBER ‘ 数字変換対象文字列
Dim ARY_SYMBOL ‘ 記号変換対象文字列
Dim i As Long ‘ カウンタ

‘半角化対象文字列
ARY_KATAKANA = Split(“ァ,ア,ィ,イ,ゥ,ウ,ヴ,ェ,エ,ォ,オ,ヵ,カ,ガ,キ,ギ,ク,グ,ヶ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン”, “,”)
ARY_ALPHABET = Split(“A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z”, “,”)
ARY_NUMBER = Split(“1,2,3,4,5,6,7,8,9,0”, “,”)
ARY_SYMBOL = Split(“!,#,$,%,&,',(,),*,+,-,.,/,:,;,<,=,>,?,@,[,\,],^,_,{,|,},。,、,,”, “,”)

‘カタカナ置換ブロック
For i = 0 To UBound(ARY_KATAKANA)
TXT_MOJI = Replace(TXT_MOJI, ARY_KATAKANA(i), StrConv(ARY_KATAKANA(i), vbNarrow))
Next i

‘大文字アルファベット置換ブロック
For i = 0 To UBound(ARY_ALPHABET)
TXT_MOJI = Replace(TXT_MOJI, ARY_ALPHABET(i), StrConv(ARY_ALPHABET(i), vbNarrow))
Next i

‘小文字アルファベット置換ブロック
For i = 0 To UBound(ARY_ALPHABET)
TXT_MOJI = Replace(TXT_MOJI, StrConv(ARY_ALPHABET(i), vbLowerCase), StrConv(StrConv(ARY_ALPHABET(i), vbLowerCase), vbNarrow))
Next i

‘数字置換ブロック
For i = 0 To UBound(ARY_NUMBER)
TXT_MOJI = Replace(TXT_MOJI, ARY_NUMBER(i), StrConv(ARY_NUMBER(i), vbNarrow))
Next i

‘記号置換ブロック
For i = 0 To UBound(ARY_SYMBOL)
TXT_MOJI = Replace(TXT_MOJI, ARY_SYMBOL(i), StrConv(ARY_SYMBOL(i), vbNarrow))
Next i
TXT_MOJI = Replace(TXT_MOJI, Chr(-32408), Chr(34)) ‘ ”の置換

カナ英数字半角化 = TXT_MOJI

End Function

まとめ

もしセルB2のデータを変換したい場合は =カナ英数字半角化(B2) として使えます。

変換したくない文字は対象文字列から外すか、もしくは変換ブロックをまるごとコメントアウトして頂ければその分が変換されなくなります。

最近SEを始めた方は「ナゼこんなことするの?」と思われるかもしれませんが、慣習とは捨てられないものの様です。

Excelの最近記事

  1. 日本語をエンコードする【Excel VBA】

  2. 商品コードなど長い数値だけの文字列を指数表示させない【Excel VBA】

  3. VBAで改行を指定する【Excel】

  4. 入力規則のプルダウン連携【Excel】

  5. 最短手順で計算式を保護する【Excel】

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


お薦め書籍

最近の記事

  1. Access

    Accessの数値型ではまる・・・。
  2. Excel

    日本語をエンコードする【Excel VBA】
  3. Access

    クエリで日付から曜日を算出する。【Access】
  4. PCパーツ

    ASUS AMD Ryzen 4000 シリーズ搭載小型ベア…
  5. Microsoft365

    コンデジをTeamsのWebカメラに使う
  6. SQL Server

    SQL文で今日から7日前までを指定する