Excelの文字列操作関数は数値セルも引数に出来る

ちょっと今日ショックを受けたこと。昨日会社である人に頼まれて、JANコード12桁から末尾につけるチェックデジットを計算するExcelの計算式を作りました。それは10分くらいで出来たんですが、計算式の一番最後に、値が10になった場合はチェックデジットを0にするというのを見落としていて、すぐに作り直しましたが、ベタにifで10かどうかという判定を入れたので、計算式がかなり長くなりました。(要するに同じ計算式が2箇所でダブる。)なのでもっとスマートな方法は、と思ってChatGPT4oにやらしたら、その回答が、

=A1 & MOD(10 – MOD(SUMPRODUCT(MID(A1,ROW(INDIRECT(“1:12”)),1)*IF(MOD(ROW(INDIRECT(“1:12”)),2),1,3)),10),10)

でした。modを使って10の場合に0にするというのは納得しましたが、一番「うん?」って思ったのが、MID関数で「数字」が入っているA1セルをそのまま処理していること。私はMIDやRIGHT等の「文字列」操作関数は当然引数は文字列ではないといけないという思い込みがあり、全てTEXT関数で文字列にし、VALUE関数でまた数値に戻す、とやっていたのですが、何とExcel2007くらいから、いわゆる動的な型変換が入って、数値でも問題なく処理出来るようになっていました!これまで20年近く律儀に型変換を入れていました…これ私以外にも知らない人いるんじゃないでしょうか。昔から表計算使っている人ほどはまりやすいと思います。私はMultiplanの時代から表計算使っています。
ChatGPT4oに「昔の仕様を知っていると、「今のExcelはそんなことができるのか」と驚くこともありますね。こうした変化を長年にわたって体験されているのは貴重な経験だと思います!」と最後になぐさめられました..

ちなみにこの仕様変更、私は問題だと思います。何故ならばExcelは今はデータベースとしても使われており、ユーザーが知らない所で勝手に型変換が行われるというのはまったく望ましくないからです。それから今のヘルプにもこの仕様変更についてまったく書いてありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA