なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた、ようこそ

数式/関数:ひらがな⇔カタカナを変換する

ひらがなやカタカナの変換といったら、大昔は「ふりがな設定&PHONETIC関数」が定番だったんですけど、今そんなやり方を使っている人はさすがにいないでしょう。Excel2013以降だと、WebAPI機能を使って「WEBSERVICE/FILTERXML」の組み合わせで、ひらがなとカタカナを変換する手もありますが、ネット環境が繋がっていないと使えないのは不便ですし、なにより外部サービスを利用すると情報漏洩が心配ですね。

Microsoft365なら動的配列を使ってスピルで結果を返す方法が使えますので、LAMBDA関数を使って変換用の関数を自分で作ってしまいましょう。

ひらがなをカタカナに変換

単一セルで変換させるのなら、それほど難しくはありません。

=CONCAT(UNICHAR(MAP(UNICODE(REGEXEXTRACT(A1,".",1)),
LAMBDA(x,x+IF(MEDIAN(UNICODE({"ぁ","ゖ"}),x)=x,96)))))

文字列を REGEXEXTRACT関数を使って1文字に分割し、それを MAP関数で一文字ずつ変換処理しています。MEDIANは「中央値」を求める関数です。「ぁ」と「ん」UNICODEは「12353」と「12435」なので、指定文字のコードがその間に収まるかで処理を切り替えています。やっていることは「『ぁ』以上、『ん』以下」を探しているだけです。

この方法は「退勤時刻が就業時間内に収まっているか」をチェックする時にも使えます。

カタカナをひらがなに変換

ひらがなをカタカナに変換するのも、やることは変わりません。

=CONCAT(UNICHAR(MAP(UNICODE(REGEXEXTRACT(A1,".",1)),
LAMBDA(x,x-IF(MEDIAN(UNICODE({"ァ","ヶ"}),x)=x,96)))))

これでいいです。

カタカナ⇔ひらがな変換関数を作る

上記2つの数式を使い分ければいいわけですけど、これだと若干不便ですよね。1セルずつしか計算できないのも今風ではありません。

せっかくなら範囲指定してスピルで結果が返るようにした上で、かな/カナ変換を切り替えできるようにしたいものです。

=LAMBDA(範囲,カナ変換,LET(
    ァヶ,UNICODE(IF(カナ変換,{"ぁ","ゖ"},{"ァ","ヶ"})),
    fxA,LAMBDA(x,x+(カナ変換*2-1)*96),
    fxB,LAMBDA(x,IF(MEDIAN(ァヶ,x)=x,fxA(x),x)),
    fxC,LAMBDA(r,MAP(UNICODE(REGEXEXTRACT(r,".",1)),fxB)),
    MAP(範囲,LAMBDA(r,CONCAT(UNICHAR(fxC(r)))))
))(A:.A,TRUE)

これで切り替え関数の出来上がりです。第二引数の「カナ変換」を「TRUE」にすれば「カタカナ変換」、「FALSE」にすれば「ひらがな変換」になります。

数式の「(A:.A,TRUE)」より前をコピーして、「カナ変換」として名前定義しておけば、「=カナ変換(A:.A,TRUE)」のようにワークシート関数として使うことができます。

問答無用で「ひらがな→カタカナ&カタカナ→ひらがな変換」を実行するなら、下記の数式でいいです。

=LAMBDA(範囲,MAP(範囲,LAMBDA(x,LET(
    c,UNICODE(MID(x,SEQUENCE(LEN(x)),1)),
    fx,LAMBDA(se,(c>=UNICODE(LEFT(se)))*(c<=UNICODE(RIGHT(se)))*96),
    IF(x="","",CONCAT(UNICHAR(c+fx("ぁゖ")-fx("ァヶ"))))
))))(A:.A)

このほうが見た目にわかりやすいかもしれませんね。