■動機
エクセルVBAで半角カタカナを全角に変換したい。条件は下記。
・ 半角英数は半角のままとする。
・ 濁点は、ガ(2字)→ガ(1字)とする。
・ 濁点は、ガ(2字)→カ゛(2字)は不可。
サイトを探したが見つからない、上記条件を満たさない、コードが難しいやら長いやら、解説も難解長文。素人の自分にはもっと短くて分かり易いコードが欲しい。低速でも構わない。力技で解決した。改行ナシなら僅か9行。調整も容易。
---------------------------------------
Sub 半角カタカナを全角に変換()
対象字 = "アガャAaあ1バ" '(確認用)
半カナ = "ガ,ギ,グ,ゲ,ゴ,ザ,ジ,ズ,ゼ,ゾ,ダ,ヂ,ヅ,デ,ド,バ,ビ,ブ,ベ,ボ,パ,ピ,プ,ペ,ポ" _
& ",ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ,サ,シ,ス,セ,ソ,タ,チ,ツ,テ,ト,ナ,ニ,ヌ,ネ,ノ" _
& ",ハ,ヒ,フ,ヘ,ホ,マ,ミ,ム,メ,モ,ヤ,ユ,ヨ,ラ,リ,ル,レ,ロ,ワ,ヲ,ン" _
& ",ァ,ィ,ゥ,ェ,ォ,ャ,ュ,ョ,ッ,ー,。,「,」,、,・" '濁点文字は最初に置かなければならない。
全カナ = "ガ,ギ,グ,ゲ,ゴ,ザ,ジ,ズ,ゼ,ゾ,ダ,ヂ,ヅ,デ,ド,バ,ビ,ブ,ベ,ボ,パ,ピ,プ,ペ,ポ" _
& ",ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ,サ,シ,ス,セ,ソ,タ,チ,ツ,テ,ト,ナ,ニ,ヌ,ネ,ノ" _
& ",ハ,ヒ,フ,ヘ,ホ,マ,ミ,ム,メ,モ,ヤ,ユ,ヨ,ラ,リ,ル,レ,ロ,ワ,ヲ,ン" _
& ",ァ,ィ,ゥ,ェ,ォ,ャ,ュ,ョ,ッ,ー,。,「,」,、,・"
半角配列 = Split(半カナ, ",") 'Splitで分けて格納
全角配列 = Split(全カナ, ",")
For aaa = 0 To UBound(半角配列) '要素数=UBound:半角=全角。
対象字 = Replace(対象字, 半角配列(aaa), 全角配列(aaa))
Next aaa
Range("A1") = 対象字 '(確認用)
End Sub
---------------------------------------
■感想
ガ→ガ(2字→1字)はかなり大変だった。
上記コードは自分の中では「決定版」。
お役に立ったら、励みになるので「いいね」をお願いします。 m(__)m
■おまけ
上記と同時に、全角英数→半角英数も変換してみた。
--------------------------------
Sub 何でも好きに変換するコード()
対象字 = ",iアガャAaあ1バ"
半カナ = "ガ,ギ,グ,ゲ,ゴ,ザ,ジ,ズ,ゼ,ゾ,ダ,ヂ,ヅ,デ,ド,バ,ビ,ブ,ベ,ボ,パ,ピ,プ,ペ,ポ" _
& ",ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ,サ,シ,ス,セ,ソ,タ,チ,ツ,テ,ト,ナ,ニ,ヌ,ネ,ノ" _
& ",ハ,ヒ,フ,ヘ,ホ,マ,ミ,ム,メ,モ,ヤ,ユ,ヨ,ラ,リ,ル,レ,ロ,ワ,ヲ,ン" _
& ",ァ,ィ,ゥ,ェ,ォ,ャ,ュ,ョ,ッ,ー,。,「,」,、,・" '濁点文字は最初に置かなければならない。
全カナ = "ガ,ギ,グ,ゲ,ゴ,ザ,ジ,ズ,ゼ,ゾ,ダ,ヂ,ヅ,デ,ド,バ,ビ,ブ,ベ,ボ,パ,ピ,プ,ペ,ポ" _
& ",ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ,サ,シ,ス,セ,ソ,タ,チ,ツ,テ,ト,ナ,ニ,ヌ,ネ,ノ" _
& ",ハ,ヒ,フ,ヘ,ホ,マ,ミ,ム,メ,モ,ヤ,ユ,ヨ,ラ,リ,ル,レ,ロ,ワ,ヲ,ン" _
& ",ァ,ィ,ゥ,ェ,ォ,ャ,ュ,ョ,ッ,ー,。,「,」,、,・"
全英数 = "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" _
& ",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,-,!,?,."
半英数 = "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" _
& ",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,-,!,?,.," '半角カンマ「,」は後述
原字集 = 半カナ & "," & 全英数
換字集 = 全カナ & "," & 半英数
原字配列 = Split(原字集, ",") 'Splitで分けて格納
換字配列 = Split(換字集, ",") '半角カンマ「,」は格納出来ないので最後に対処
For rrr = 0 To UBound(原字配列) '要素数= UBound:原字=換字
対象字 = Replace(対象字, 原字配列(rrr), 換字配列(rrr))
Next rrr
対象字 = Replace(対象字, ",", ",") '半角カンマ「,」の対処
Range("A1") = 対象字
End Sub
--------------------------------
こうなると何でもアリですね。 でもこれは、StrConv(対象字 , vbNarrow) してから、半角カタカナ→全角で良いんじゃないかな? (^^;
まあ、独自の変換も自由自在にする手段のベースとして、覚え書き。