■動機
エクセル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) してから、半角カタカナ→全角で良いんじゃないかな?  (^^;
まあ、独自の変換も自由自在にする手段のベースとして、覚え書き。