いまさらそんなニーズはあるのか?と思わる方はおられるとは思いますが、お客様の都合でメインフレーム時代から「カタカナは半角に決まっている。数字とアルファベットもね。」とおっしゃられる方は多数います。お客様は神様ですので「御意」というしかない訳です。今回はその変換をエクセルの関数に落とし込んだものを紹介します。
やりたい事
ポイントになるのは「ひらがなは全角だけどカタカナは半角にしたい。」と言う事です。
標準関数ではこの仕様はサポートされていませんので自分で関数を作るしかありません。
考え方
- 「漢字とひらがな以外」を紐解きます。カタカナかアルファベットか数字か記号と言う事に考えます
- 半角に変換したい対象の文字列を作成します。今回は以下に設定しました
カタカナ:ァ,ア,ィ,イ,ゥ,ウ,ヴ,ェ,エ,ォ,オ,ヵ,カ,ガ,キ,ギ,ク,グ,ヶ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン
アルファベット: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
記号:!,#,$,%,&,',(,),*,+,-,.,/,:,;,<,=,>,?,@,[,\,],^,_,{,|,},。,、,, - 対象の文字列を配列に落とし込み、変換したい文字列の左端から右端まで合致をチェックし、合致すれば半角に変換します。
作成した関数
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を始めた方は「ナゼこんなことするの?」と思われるかもしれませんが、慣習とは捨てられないものの様です。
この記事へのコメントはありません。