【2025年9月】
外部から送られてきたデータに「半角と全角の混在」や「セル内改行」などが含まれていた場合、そのまま処理できない場合があります。そうしたデータを整形するのって、実務では頻繁に起こります。そんなときにマクロを活用しているという声が多いので、それをAIに作ってもらう検証をしました。詳しくは、下記のページをご覧ください。
さて、今回は、そうした整形処理を数式でやってみようと。さっそくAIに作ってもらいましょう。
Sheet1のセル範囲A2:A5にデータが入力されています。データは「ABC-100」のような形式ですが、"英字", "記号", "数値"の一部が全角で入力されているものがあります。それら「半角と全角が混在」されているデータを、すべて半角に統一して同じ行のB列に代入する数式を作って。
=TEXTJOIN("",,UNICHAR(MID(CODE(A2),1,1)-IF(OR(AND(CODE(A2)>=65281,CODE(A2)<=65374),CODE(A2)=12288),65248,0))) ただし、Excel標準関数のみでは全角→半角変換は直接できません。 上記は1文字目のみの例です。 複数文字を一括で変換したい場合、以下のように各文字ごとに処理するカスタム関数(LAMBDA)を使います。 Excel 365 でLAMBDAが使える場合、名前付き関数として以下を登録し、B2に =TOHALFWIDTH(A2) と入力してください。 LAMBDA定義例(名前: TOHALFWIDTH): =LAMBDA(txt, TEXTJOIN("", , MAP(MID(txt,SEQUENCE(LEN(txt)),1), LAMBDA(c, LET( code, CODE(c), UNICHAR( IF( code=12288, 32, IF(AND(code>=65281,code<=65374), code-65248, code) ) ) ) ) ) ) ) この方法でA2:A5の全角英数字・記号・スペースを半角に統一できます。な、なんか…いきなり、どうしたのでしょうか。
ただし、Excel標準関数のみでは全角→半角変換は直接できません。
サービス問題だったのに。もっと、違う言い方をするべきだったのかな?
セルA1に「ABC-100」のようなデータが入力されています。このデータを「ABC-100」のように、"英字", "記号", "数値"のすべてを半角にする数式を作って。
'Sheet1' の A1:B5 を調べ、1 つの数式を確認して 選択したセル に挿入します: =REGEXREPLACE($A$2:$A$5,"[A-Za-z0-9-]",LAMBDA(x,UNICHAR(CODE(x)-65248))) 全角の英数字や記号を半角に統一して、データの表記ゆれを解消します。
今度は正規表現ですか。だったら
全角のカタカナや英数字を、半角に変換するワークシート関数を教えて。
Excel標準のワークシート関数のみで「全角カタカナや英数字」を すべて半角に変換する関数はありません。 (以下、LAMBDA関数の話なので略)
同じプロンプトで、ChatGPTに聞いてみます。
ASC 関数(半角に変換) =ASC(A1) A1 に全角のカタカナ・英数字・記号などが入っていると、それを半角に変換します。 対応例: 「ABC」 → 「ABC」 「アイウ」 → 「アイウ」 注意点 ASC 関数は日本語環境の Excel でのみ動作します(日本語IMEが有効な環境)。 全角の 漢字 や ひらがな は変換できません。 半角カナに変換されるため、見た目や用途に注意が必要です(例:「アイウ」→「アイウ」)。
GoogleのGeminiに聞いてみます。
Excelで全角のカタカナや英数字を半角に変換するには、ASC関数を使います。
Claudeに聞いてみます。
Excelで全角文字を半角に変換するワークシート関数は ASC関数 です。
もう一度、Copilotに聞いてみます。
Excel標準のワークシート関数のみでは「全角カタカナや英数字」をすべて半角に変換する 関数はありませんが、Excel 365 以降でLAMBDA関数とMAP関数を使えば、下記のような カスタム関数(名前付き関数)で対応できます。 (以下、LAMBDA関数の話なので略)
Excelの、ASC関数について教えて。
ASC関数は、Excelの日本語環境で使える関数で、全角(全幅)文字を半角(半幅)文字に 変換します。主に全角の英数字やカタカナ、記号などを半角に変換する際に使います。 =ASC(A2) A2セルに「ABC-100」と入力されている場合、この式は「ABC-100」と半角に変換します。
アンジャッシュの"すれ違いコント"を見ているようです。もう、この件は終わりにします。
Sheet1のセルA1に、「Bill Gates」のように姓と名の間が半角スペースで区切られたデータがあります。このデータの"半角スペース"だけを"全角スペース"に変換する数式を作って。
=SUBSTITUTE(A1, " ", " ")
こっちは予想どおりです。もしかすると、ASC関数って日本語環境でしか使えないので、AIは誤解していたのかな?なんか疲れたので、先にいきます。
Sheet3に、セル内改行されているセルがあります。セル内改行の前と後ろに分割する数式を作って。
以下の数式を使って、セル内改行の「前」と「後ろ」に分割できます。 改行前(例:B2セルに入力) =IFERROR(INDEX(TEXTSPLIT(A2,CHAR(10)),1,1),"") 改行後(例:C2セルに入力) =IFERROR(INDEX(TEXTSPLIT(A2,CHAR(10)),1,2),"")
もしかして、嫌がらせをされているのでしょうか。俺、なんかした?AIの中で、VBA担当と数式担当が変わったのかな。1つの数式でやってもらいましょう。
Sheet3に、セル内改行されているセルがあります。セル内改行の前と後ろに分割する、1つの数式を作って。
数式担当は、お忙しいようです。答えてくれるまで続けます。
=TEXTSPLIT(A2,CHAR(10))
ですよね。なんで最初は、TEXTSPLIT関数の結果を、わざわざINDEX関数で分割したのでしょう。もし"前だけ"とか"後ろだけ"っていうなら分かるけど。それに、今度のにはIFERROR関数がありません。さっきと違って、エラーは想定していないのでしょうか。なんか、うるさい客だから「はいはい、これでいいんでしょ」って言われた感が否めないです。
これは、そもそも数式だけで行うのは難しいです。でも、一応聞いてみます。
Sheet4のセル範囲A2:A4はセル結合されています。セル内の文字を、別の列で3行に分割する数式を作って。なお、分割した3つのセルには、すべて結合セルと同じ文字列を表示してください。
=$A$2 この数式を、分割先の3行(例:B2:B4)すべてに入力してください。すべて「田中」と表示されます。
ああ、やっぱりそうだ、間違いない。私、AIの数式担当に嫌われているんだ。覚えはないけど、たぶん何か気に障るようなことを言ったんでしょうね。すみませんでした、今後は気をつけますので許してください。あの、もうけっこうです。自分でやりますから。お手数を煩わせて申し訳ありません。
たぶん私が悪いんでしょうけど、今回は数式担当様の機嫌が良くなかったようです。いずれにしても、VBAでは、こちらのやりたいことを察してくれるのに対して、数式を作ってもらうのは、なかなかに大変だということです。少し間を空けて、また検証してみます。そうだ、今度は何か手土産を持って行こうw お酒好きかな?