• 締切済み

半角カナならば(Excel)

Excelで、A1にある文字列の中の各文字を次の条件で変換するためにB1に数式を設定する場合、 (1)半角カナは全角カナに変換 (2)半角カナでない文字はそのまま(何も変換しない) B1に設定する数式は以下のようなものが考えられると思われますが、 =LET(x,MID(A1,SEQUENCE(LEN(A1)),1), CONCAT(IF(・・・, JIS(x), x))) この・・・にくる「半角カナならば」の条件が思い浮かばないのですが、お分かりの方いらっしゃったら教えていただけますか。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.7

時間があり、興味を惹かれたので、 VBAコードを書いてみました。 よかったら試してみてください。 Option Explicit Function KanaChange(t As String) As String Dim sPos As Long Dim tLen As Long Dim WorkStr As String sPos = 1 WorkStr = "" tLen = Len(t) Do If tLen = 0 Then KanaChange = "" Exit Function End If If tLen <= sPos Then Exit Do If ((Mid(t, sPos, 1) >= "ヲ") And _ (Mid(t, sPos, 1) <= "ン")) Then If ((Mid(t, sPos + 1, 1) = "゙") Or _ (Mid(t, sPos + 1, 1) = "゚")) Then WorkStr = WorkStr & StrConv(Mid(t, sPos, 2), vbWide) sPos = sPos + 2 Else WorkStr = WorkStr & StrConv(Mid(t, sPos, 1), vbWide) sPos = sPos + 1 End If Else WorkStr = WorkStr & Mid(t, sPos, 1) sPos = sPos + 1 End If Loop If ((Right(t, 1) <> "゙") And _ (Right(t, 1) <> "゚")) Then If ((Right(t, 1) >= "ヲ") And _ (Right(t, 1) <= "ン")) Then WorkStr = WorkStr & StrConv(Right(t, 1), vbWide) Else WorkStr = WorkStr & Right(t, 1) End If End If KanaChange = WorkStr End Function

  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.6

ガ👉ガ になりますが、それでよければ =LET(x,MID(A1,SEQUENCE(LEN(A1)),1),CONCAT(IF(x>"z",JIS(x), x))) アルファベットz より大きければ、カナにすればいいです。

回答No.5

訂正 誤:半角2文字も全角2文字も 正:半角2文字も全角1文字も

回答No.4

追記。 PHONETIC()関数を用いた場合、半角の「カ゛」の2文字が、全角の「ガ」の1文字に変換されるので、A1に、半角の「カ゛」の2文字が入っていると LENB(PHONETIC(A1)<>LENB(A1) が成り立ちません。 半角2文字も全角2文字もLENBは「2」を返すので、上手く判定出来ません。 1文字づつ分解して判定すれば問題ありませんが、そうすると、濁点や半濁点の混じった半角カナの文字列が、濁点半濁点付きの全角文字に変換されません。半角の「カ゛」の2文字が、全角の「カ゛」の2文字に変換されてしまい、上手く全角の「ガ」1文字になってくれません。 VBAで関数を自作した方が早そうです。

回答No.3

PHONETIC()関数とLENB()関数を用います。 PHONETIC()関数は ・半角カタカナは全角カタカナにする ・全角ひらがなは全角カタカナにする ・それ以外の文字は何もしない という関数です。 A1セルに何か入れて LENB(PHONETIC(A1))<>LENB(A1) が成り立てば、A1に「半角カタカナ」が入っていたと判定出来ます。 この条件が成り立つのは「半角カナが全角カナに変換された時だけ」なので。 なおPHONETIC()関数が「全角ひらがなは全角カタカナにする」という「余計な処理」をしなかったなら、質問者さんの要求仕様そのままなので、PHONETIC()関数一発で簡単に変換できたのですが。

回答No.2

セキュリティーリスクを考えても既に完璧な回答が出ておりますがその他の方法として ・APIを使用  https://excelapi.org/docs/language/halfkana-kana/ ・VBAで関数化する などの方法もございます。 ご参考になれば幸いです。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.1

ちょっと苦労しましたが、これでできました。 =LET(x,MID(A1,SEQUENCE(LEN(A1)),1), CONCAT(IF((UNICODE(x)>=65377)*(UNICODE(x)<=65439), JIS(x), x))) IFの条件式でTRUE/FALSEの配列になるのがキモですね。 最初、IFの条件に AND(UNICODE(x)>=65377,UNICODE(x)<=65439) と記述したのですが、これだとAND({真偽の配列}, {真偽の配列})になってしまい失敗しました。 ちなみに濁音(゙)半濁音(゚)はそれぞれ1文字になります。