いまさら聞けないExcelの使い方講座

【Excel】Copilotが作った数式、そのまま使って大丈夫? 意図した動作をするようにするテク

Copilotに条件を伝えて、自分の用途に合った数式を作ってもらおう

「数式を作って」で終わらせない

 Excelで複雑な数式が必要になった時、Copilotに「○○する数式を作って」と頼めば、すぐに数式を提案してもらえます。複数の関数の組み合わせを自分で考えて試行錯誤するより手軽ですが、生成された数式が自分にとっての正解とは限りません。

 例えば、商品コードが入力された表から「PC」や「MN」といった区分を取り出す数式を作成したいとします。Excelに慣れている人なら、「SUBSTITUTE関数で区切り文字を統一して、先頭から2番目の要素が区分で……」「区切り文字が複数あるから、TEXTSPLIT関数を使って……」などと、考えるでしょう。

商品コードから「PC」や「MN」といった区分を取り出す数式を考えてみましょう

 しかし、20、21行目のように2つ目の区切り文字の後ろが区分になっている商品もあります。このようなケースまで考慮すると、数式は途端に複雑になります。そこで、Copilotに数式を考えてもらうために「A列の商品コードから区分を取り出す数式を教えてください」のように質問すると……、

「A列の商品コードから区分を取り出す数式を教えてください」とCopilotに聞いたところ、SUBSTITUTE / RIGHT / LEFT / FIND関数を組み合わせた数式が提案されました(①)

=RIGHT(LEFT(SUBSTITUTE(A2,")",""),FIND("/",SUBSTITUTE(A2,")",""))-1),2)

 この数式でも、現在のデータから「PC」といった区分を取り出すことはできます。しかし、処理の内容は、「)」を削除して「/」より前の文字列を取り出し、その末尾2文字を区分として取得しています。これは現在のデータからCopilotが推測した処理です。

 問題は、今後入力される商品コードもこの数式で処理できるかということです。例えば、今後の商品コードには「/」を使わない形式が追加されるかもしれません。区分の位置や文字数が変わる可能性もあります。現在のデータで正しく動くことと、今後も使いやすい数式であることは別です。

 今回は、形式の異なる商品コードから「区分」を取り出す数式を例に、条件を追加しながらCopilotと数式を組み立ててみます。

暗黙の条件をCopilotに伝える

 意図通りの数式を得るために、商品コードについて自分が把握しているルールを整理します。今回の商品コードでは、「-」「_」「/」「(」「)」が区切りとして使われています。また、現在のデータでは区分は先頭から2番目または3番目にあり、区分の後ろには年と連番が続きます。この条件をCopilotに伝えて、数式を作り直してもらいます。

次の条件で、A列の商品コードから「区分」を取り出し、C列に表示する数式を作成してください。

  1. 商品コードでは「-」「_」「/」「(」「)」が区切りとして使われている
  2. SUBSTITUTE関数を使って区切り文字を「-」に統一する
  3. 商品コードの末尾は「区分-4桁の年-連番」という並びで、区分より前の要素数は一定ではない
  4. 区分の値は今後増える可能性があるため、具体的な区分名を数式に埋め込まない
  5. 「/」は含まれない場合があるため、「/」の位置を基準にしない
  6. LET関数や正規表現は使わず、できるだけ内容を追いやすい数式にする
  7. 区切り文字を統一する処理と、区分を取り出す処理を1つの数式にまとめる
上記のプロンプトを送信したところ、こちらの意図する考え方に沿った数式が提案されました(②)

 条件を追加すると、Copilotは単に「PC」といった区分を取り出すのではなく、指定した考え方に沿って数式を組み立てました。

=TEXTAFTER(TEXTBEFORE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_","-"),"/","-"),"(","-"),")","-"),"--","-"),"-",-2),"-",-1)

 長い数式ですが、処理している内容は複雑ではありません。まず、SUBSTITUTE関数を重ねて「_」「/」「(」「)」を「-」に置き換えています。「)」の直後に「/」がある場合などは「--」と区切り文字が連続するため、それも「-」に置き換えています。

 例えば、3行目の「NGY(KB)/2026_003」の区切り文字を統一すると、「NGY-KB-2026-003」という形になります。続いて、TEXTBEFORE関数で末尾から2番目の「-」より前を取り出します。

 「NGY-KB」と整えられた文字列から、TEXTAFTER関数で最後の「-」より後ろの「KB」が取り出されます。つまり、区分が先頭から2番目なのか3番目なのかを判定しているわけではなく、区切り文字を統一したうえで、「末尾から見て、区分の後ろには年と連番がある」という規則を利用しています。

今は動く数式にも弱点がある

 ただし、この数式が今後も必ず使えるわけではありません。そこで、数式を作って終わりにせず、Copilotに次のようにも聞いてみます。

商品コードの形式が今後変更された場合、この数式で正しく処理できなくなるケースを教えてください。

今回生成された数式について、正しく処理できなくなるケースが示されました(③)

 今回生成された数式の弱点を確認すると、末尾に新しい要素が追加された場合や、年や連番が欠落した場合、新しい区切り文字が使われた場合などには、正しく処理できなくなる可能性があることがわかりました。

 特に重要なのは、この数式が「4桁の年」を探しているわけではなく、区切り文字を統一したうえで、末尾から3番目に当たる要素を区分として取り出している点です。つまり、「区分-年-連番」という末尾の並びが変わることが、最も大きな弱点です。

 大切なのは、人間側でデータの規則や今後変わる可能性のある条件を整理し、それをCopilotに伝えることです。さらに、完成した数式がどの条件に依存しているのかも確認しておけば、仕様変更によるエラーだけでなく、エラーが表示されないまま意図しない結果になるケースにも気付きやすくなります。