「この集計、関数でできる気はするけど書き方が思い出せない」。関数名を探したり、書き方を調べたりしているうちに、作業の手が止まることはないでしょうか。ChatGPTには、やりたい処理を日本語で伝えて、数式の候補を作ってもらえます。
ただし、AIが出した式やコードをそのまま本番ファイルに貼るのは危険です。合っているように見えて、条件が1つずれているだけで金額が変わることがあります。
そこでこの記事では、架空の小さなデータで検証してから本番に持っていくという流れを、実際にコピーして試せる形で紹介します。関数の例を3つ、VBA(マクロ)の例を1つ、すべて同じ架空データで統一しました。ブラウザのChatGPTに依頼し、返ってきた式やコードをお手元のExcelへ貼り付ける方法です。
ChatGPTでExcelを扱うときの基本の流れ
3ステップだけ覚える
やることは単純で、次の3つの往復です。
- 日本語で依頼する(列構成と、やりたいことを書く)
- 出力をExcelに貼り付ける(数式ならセルへ、コードなら標準モジュールへ)
- 小さな架空データで検証する(期待値と合うか、目視で確かめる)
大切なのは、3の確認までをひとまとまりの作業にすることです。5行程度の架空データなら、自分でも計算できるので、AIの出力と照合しやすくなります。
依頼文には「列構成」と「期待値」を書く
ChatGPTへの依頼で結果が大きく変わるのは、次の3点を書くかどうかです。
- どのシートの、どの列に、何が入っているか(列名と、データが何行目から始まるか)
- 何を出したいか(合計なのか、判定なのか、引っ張ってくるのか)
- 答えがいくつになるはずか(分かっていれば書く。合っているか確認しやすくなります)
逆に、初心者のうちは「日付をまたいだ集計」「二次元配列を返す複雑な数式」といった高度なお題は避けたほうが安全です。読めない式は検証もできません。まずは1つのセルに1つの答えが返るシンプルな形から始めてください。
機密情報は入力しない、が大前提
実際の顧客名・取引金額・従業員情報をチャット欄に貼るのは避けてください。まずは自社の情報管理ルールを確認し、生成AIの業務利用が許可されているか、どこまで入力してよいかを把握しておきます。
OpenAIの設定には、データコントロールからモデル改善への利用をオフにできる項目があります(OpenAI Data Controls FAQ)。オフにしても会話履歴自体は残りますし、何よりこの設定は「機密を入力してよい」という許可ではありません。設定画面の表記は更新されることがあるので、名称を暗記するより「どこまで入力するか」の線引きを自分で持つほうが実用的です。
そして実務上、機密は入れなくても困りません。次に示すような列構成と架空データだけで、数式の作成を依頼できます。返ってきた式の正しさは、別途確認します。
共通の練習データ「売上一覧」
関数例はMicrosoft 365などの対応版を前提にし、XLOOKUPが使えない版には代替式を示します。依頼時にはExcelの版とWindows/Mac/Web版のどれかも添えてください。
この記事の例はすべて、次の架空データを使います。新規ブックを1つ作り、シート名を 売上一覧 に変更して、A1から貼り付けてください。
| 伝票ID | 商品 | 担当区分 | 売上金額 | 入金状況 |
|---|---|---|---|---|
| R001 | 商品A | 東 | 12000 | 入金済 |
| R002 | 商品B | 西 | 8000 | 未入金 |
| R003 | 商品A | 東 | 5000 | 未入金 |
| R004 | 商品C | 東 | 15000 | 入金済 |
| R005 | 商品B | 西 | 0 | 未入金 |
A列が伝票ID、B列が商品、C列が担当区分、D列が売上金額、E列が入金状況です。貼り付け後に、A1が「伝票ID」、A2が「R001」になっていることを確認してください。以下の式は、この配置を前提にしています。
- 使う範囲は A1:E6 の1シートのみ。1行目がヘッダー、データは2〜6行目の5行。
- 売上金額(D列)は数値として入力します。「12,000円」のような文字列にはしません。
- 入金状況(E列)は「入金済」「未入金」の2種類だけ。表記ゆれはない前提です。
- 伝票IDは重複なし。R005は金額が0という点が後で効いてきます。
- 実在のデータではありません。検証専用のダミーです。
例1:SUMIFSで「東かつ入金済」の合計を出す
12,000R004
15,00027,000
5行の練習データから求める期待値です。ほかの3行は条件に合わないため、合計に含めません。
依頼文
Excelの数式を作ってください。シート「売上一覧」のA1:E6にデータがあります。1行目がヘッダーで、A列=伝票ID、B列=商品、C列=担当区分、D列=売上金額、E列=入金状況です。データは2行目から6行目までの5行です。C列が「東」かつE列が「入金済」の行について、D列の売上金額を合計する数式を教えてください。同じシートのG2に入力します。
出力される式と期待値
入力セル:G2
=SUMIFS(D2:D6,C2:C6,"東",E2:E6,"入金済")
期待値:27000(R001の12000+R004の15000)
確認しておきたい境界条件
SUMIFSは合計する範囲を最初に書き、そのあとに「条件範囲」「条件」をペアで並べます。条件が1つだけのSUMIFとは引数の順序が違うので、AIの出力をそのまま信用せず順番を目視で確認してください(Microsoft: SUMIFS 関数 / SUMIF 関数)。
- 範囲の高さを揃える:合計範囲と条件範囲は同じ行数にします。
D2:D6に対してC2:C7のようにずれると正しく動きません。 - 表記ゆれで合計が変わる:E2だけを「入金済み」に変えるとR001が外れ、合計は15000になります。E2とE5の両方を「入金済み」にすると0です。試したあとは両方を「入金済」に戻してください。
- 該当0件でも0が返る:たとえば条件を「南」に変えると結果は0です。「合計が0円」なのか「1件もない」のかは、この式だけでは区別できません。件数も見たいならCOUNTIFSを別セルに置きます。
例2:IFで10,000円以上かどうかを判定する
依頼文
同じ「売上一覧」で、D列の売上金額が10000以上なら「大口」、そうでなければ「通常」と表示する数式を作ってください。F2に入力してF6までコピーします。
出力される式と期待値
入力セル:F2(F6までコピー)
=IF(D2>=10000,"大口","通常")
| セル | 元の金額 | 期待値 |
|---|---|---|
| F2 | 12000 | 大口 |
| F3 | 8000 | 通常 |
| F4 | 5000 | 通常 |
| F5 | 15000 | 大口 |
| F6 | 0 | 通常 |
確認しておきたい境界条件
IFは「条件」「真のときの値」「偽のときの値」の3つを渡すだけの関数です(Microsoft: IF 関数)。シンプルなぶん、間違いは条件式のほうに出ます。
- ちょうど10000は「大口」:
>=と>で結果が変わります。試しにD3を10000に書き換えると、F3は「大口」になるはずです。ここが仕様どおりかを確かめたら、D3は元の8000に戻してください。 - 空欄は0として扱われる:D列が空のセルは「通常」になります。空欄を別扱いにしたいなら、その旨を追加で依頼します。
- 文字列が混ざると崩れる:D列に「12,000円」のような文字が入ると、数値比較が意図どおりになりません。D列は数値で持つ、という前提を守ることが結局いちばん早い対策です。
例3:XLOOKUPで伝票IDから金額を引く
依頼文
同じ「売上一覧」で、A列の伝票IDを検索して、その行のD列の売上金額を返す数式を作ってください。見つからないときは「該当なし」と表示してください。完全一致で検索します。
出力される式と期待値
入力セル:G5
=XLOOKUP("R003",A2:A6,D2:D6,"該当なし")
期待値:5000
入力セル:G6
=XLOOKUP("R999",A2:A6,D2:D6,"該当なし")
期待値:該当なし
入力セル:G7
=XLOOKUP("R005",A2:A6,D2:D6,"該当なし")
期待値:0
「0」と「該当なし」を区別する
3つ目のR005が、この例でいちばん大事なところです。R005はこの架空の一覧に存在し、金額が0円です。一方R999は存在しない伝票です。この2つを同じ表示にしてしまうと、経理の確認作業で判断を誤ります。
XLOOKUPは4番目の引数で「見つからなかったとき」の表示を指定できるので、"該当なし" を渡しておけば、0円との区別がはっきりつきます。
そのほかの注意点
- 完全一致が既定:XLOOKUPは指定しなければ完全一致で探します。あいまい検索を意図せず使ってしまう事故が起きにくい関数です。
- 重複IDは最初の1件だけ:同じ伝票IDが2行あると、この記事の式では上にあるほうが返ります。IDが一意である前提を崩さないでください。
- 使えるバージョンがある:XLOOKUPはMicrosoft 365、Excel 2021/2024、Web版などで利用できますが、Excel 2016/2019にはありません(Microsoft: XLOOKUP 関数)。
古いExcelを使っている場合の代替
社内のPCがExcel 2016や2019なら、上の式を入れても #NAME? エラーになります。その場合はChatGPTにこう追加で頼んでください。
会社のExcelが2019でXLOOKUPが使えません。同じ結果になるように、VLOOKUPの完全一致で書き直してください。見つからないときは「該当なし」と表示したいです。
入力セル:G5
=IFERROR(VLOOKUP("R003",A2:D6,4,FALSE),"該当なし")
期待値:5000
ポイントは2つあります。1つ目は最後の引数 FALSE。これが完全一致の指定で、省略すると意図しない近似一致になります。2つ目は 4 という数字で、これは範囲 A2:D6 の左から4列目(D列)という意味です。あとから列を挿入すると数字がずれて壊れるので、レイアウトを変えたときは必ず再確認してください。
この代替式のIFERRORは、未該当以外のエラーも「該当なし」に置き換えます。式や参照範囲の誤りまで隠れることがあるため、確認時はVLOOKUP部分だけでも実行し、エラーの原因を確認してください。
なお、VLOOKUPは検索する列(伝票ID)が範囲のいちばん左にある必要があります。今回のA列がIDなので、この構成はそのまま使えます(Microsoft: VLOOKUP 関数)。
AIの出力を検証する手順
数式が返ってきたら、貼る前に次の4点を見てください。式の説明と元データを見比べながら確認します。
- 範囲の行数が揃っているか:
D2:D6とC2:C6のように、同じ高さになっているか。 - 条件の文字列が実データと一致しているか:「入金済」なのか「入金済み」なのか。
- 期待値と一致するか:この記事の例なら27000、大口/通常、5000。数字が違えば、式か前提のどちらかが間違っています。
- 境界の1件を作って試したか:ちょうど10000、金額0、存在しないID。
そして、本番ファイルでいきなり試さないこと。練習用の新規ブックで動きを確認し、納得してから本番の列に合わせて書き換えます。
エラーが出たときの追加質問プロンプト
うまくいかないときは、「動きません」とだけ書いても改善しません。何を入れて、何が返って、何を期待していたかの3点をそのまま伝えるのがコツです。
エラー表示が出た場合
さきほどの数式をG2に入れたところ
#VALUE!と表示されました。データはシート「売上一覧」のA1:E6で、D列は数値、E列は「入金済」か「未入金」の文字列です。原因の候補と、修正した数式を教えてください。
結果が期待値と違う場合
=SUMIFS(D2:D6,C2:C6,"東",E2:E6,"入金済")を入れましたが、27000になるはずが0になります。C列の値は「東」「西」、E列の値は「入金済」「未入金」です。原因として考えられるものを3つ挙げて、確認方法も教えてください。
式の意味が分からない場合
この数式を、Excel初心者向けに引数ごとに1行ずつ日本語で説明してください。専門用語には短い補足を付けてください。
3つ目は地味ですが重要です。意味の分からない式を業務に残さない。担当者が代わったときに直せないファイルは、それ自体がリスクになります。
ChatGPTにVBAを書かせるときの安全ルール
関数の次はマクロ(VBA)ですが、ここからは慎重さの必要度が一段上がります。数式の誤りも判断や集計に影響しますが、マクロは複数セルの値の書き換えや削除など、より広い操作をまとめて実行できるからです。
依頼の時点で、次の制約を明示してください。
- 新規の作業用ブックで試す(本番ファイルでは絶対に試さない)
ThisWorkbookで対象ブックを限定する(開いている他のブックに触らせない)- シート名も限定する(今回なら「売上一覧」だけ)
- 値と数式は変更しない。書式だけ
- 外部通信・自動保存・削除・自動実行をしない
- 対象シートがなければメッセージを出して停止する
ThisWorkbook.Worksheets("シート名") という書き方で対象を1シートに絞り込めます(Microsoft: ThisWorkbook プロパティ)。「アクティブなシート」を対象にするコードは、実行時にどのシートが開いているかで結果が変わるため、初心者のうちは避けたほうが安全です。
なお列幅の調整は、指定範囲だけでなく列全体に作用します。A1:E6だけを整えたい今回の目的には合わないので、依頼から外しています。
実践:書式だけ整える短いマクロ
依頼文
Excel VBAのコードを作ってください。次の条件を厳密に守ってください。
・ThisWorkbookのシート「売上一覧」だけを対象にする
・A1:E1(見出し行)を太字にする
・D2:D6(売上金額)の表示形式を桁区切りにする
・セルの値と数式は一切変更しない
・列幅は変更しない
・シート「売上一覧」がなければメッセージを出して処理を中止する
・シートが保護されていればメッセージを出して処理を中止する
・外部通信、ファイルの保存、削除、自動実行はしない
・標準モジュールに貼り付けて手動で実行します
コード
Option Explicit
Sub Format_UriageIchiran()
Dim ws As Worksheet
Dim shtName As String
shtName = "売上一覧"
' このコードを入れたブック(ThisWorkbook)の中だけを探す
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(shtName)
On Error GoTo 0
' シートが無ければメッセージを出して中止
If ws Is Nothing Then
MsgBox "シート「" & shtName & "」が見つかりませんでした。" & vbCrLf & _
"シート名を確認してから、もう一度実行してください。", _
vbExclamation, "処理を中止しました"
Exit Sub
End If
' シートが保護されていればメッセージを出して中止
If ws.ProtectContents Then
MsgBox "シート「" & shtName & "」は保護されています。" & vbCrLf & _
"管理ルールと保護の理由を確認してください。", _
vbExclamation, "処理を中止しました"
Exit Sub
End If
' 見出し行だけを太字にする
ws.Range("A1:E1").Font.Bold = True
' 売上金額の「表示形式」だけを整える(値は変更しない)
ws.Range("D2:D6").NumberFormat = "#,##0"
MsgBox "シート「" & shtName & "」の書式を整えました。" & vbCrLf & _
"値と数式は変更していません。", vbInformation, "完了"
End Sub
このコードが触るのは太字(Font.Bold)と表示形式(Range.NumberFormat)の2つだけです。表示形式はあくまで「見せ方」なので、D6の0は 0 と表示され、値は0のまま変わりません。データが空でも、書式が設定されるだけでエラーにはなりません。
ご注意:このコードは記事執筆時点でExcel実機での実行を行っていません。必ず新規の練習用ブックで動作を確認し、業務ファイルに適用する前にご自身の環境で検証してください。
新規テストブックに入れる手順
まずWeb版のExcelではVBAの作成・実行・編集ができません。マクロ付きブックを開いて通常の編集をすることはできますが、コードを扱うにはデスクトップ版のExcelが必要です(Microsoft: Excel for the web での VBA マクロ)。
1. 練習用ブックを用意する
新しいブックを作り、シート名を 売上一覧 に変更して、先ほどの表をA1:E6に入力します。既存の業務ファイルは使いません。
2. 開発タブを表示する
開発タブは既定では表示されていません(Microsoft: マクロを作成する(クイックスタート))。
- Windows:ファイル → オプション → リボンのユーザー設定 → 右側の一覧で「開発」にチェック → OK(開発タブを表示する)
- Mac:Excel → 環境設定 → リボンとツールバー → 「開発」にチェック → 保存(Excel for Mac の開発タブ)
3. 標準モジュールを作る
開発タブ → Visual Basic をクリックしてVBEを開きます。左側のプロジェクト一覧で、今回の練習用ブックに対応する「VBAProject」を選択してください。別のブックやPERSONAL.XLSBを選ばないことが大切です。その状態で 挿入 → 標準モジュール を選ぶと、コード用の入力画面が出ます。左側の一覧が見えない場合は 表示 → プロジェクト エクスプローラー を選びます。
4. コードを貼り付ける
上のコードを丸ごとコピーして、この白い画面に貼り付けます。貼り付けたらVBEを閉じてExcelに戻ります。
5. .xlsm形式で保存する
ファイル → 名前を付けて保存 → ファイルの種類で 「Excel マクロ有効ブック(.xlsm)」 を選びます。通常の.xlsxで保存するとコードが消えるので、ここは必ず確認してください(Microsoft: マクロを保存する)。
実行して結果を確かめる
開発タブ → マクロ → 一覧から Format_UriageIchiran を選択 → 実行(Microsoft: マクロを実行する)。
期待する結果は次のとおりです。
- A1:E1の見出しが太字になる
- D2:D6が
12,0008,0005,00015,0000と桁区切りで表示される - 「書式を整えました」のメッセージが出る
- A2:E6の値は1つも変わっていない
シート名をわざと 売上一覧2 に変えてから実行すると、「見つかりませんでした」というメッセージが出て何も起きないはずです。ここも合わせて試しておくと、コードの安全性を自分の目で確認できます。
マクロのセキュリティ設定について
「すべてのマクロを有効にする」という設定はおすすめしません。組織が定めた設定を保ち、警告が出た場合は対象ブックのコードを確認したうえで、社内ルール上許可されている範囲で実行してください。自作ブックでも、AIから貼り付けたコードの内容確認は必要です(Microsoft: マクロのセキュリティ設定を変更する)。
設定を変更できない場合は、管理者へ利用目的を相談してください。WindowsとMacで設定画面や警告の表記は異なります。操作が止まったことだけを理由に、保護を一括解除しないようにします。
そのままコピーできる依頼テンプレート
最後に、この記事で使った依頼の型をまとめておきます。角括弧の中を書き換えるだけで使えます。
関数を頼むとき
Excelの数式を作ってください。
シート名:[シート名]
範囲:[A1:E6](1行目がヘッダー、データは[2]行目から[6]行目)
列構成:A列=[伝票ID]、B列=[商品]、C列=[担当区分]、D列=[売上金額]、E列=[入金状況]
やりたいこと:[C列が「東」かつE列が「入金済」の行のD列を合計したい]
入力するセル:[G2]
期待する答え:[27000]
会社のExcelのバージョン:[Microsoft 365 / 2019 など]
利用環境:[Windows / Mac / Web版]
空欄・該当なし・重複の扱い:[業務のルールを書く]
数式と、各引数の意味を初心者向けに1行ずつ説明してください。
VBAを頼むとき
Excel VBAのコードを作ってください。次の制約を厳密に守ってください。
・ThisWorkbookのシート「[シート名]」だけを対象にする
・[やりたい処理を1つだけ書く]
・セルの値と数式は変更しない
・対象シートがなければメッセージを出して中止する
・外部通信、保存、削除、自動実行はしない
・標準モジュールに貼り付けて手動実行します
コード全体と、実行後に何がどう変わるかを教えてください。
なお、こうした個別作業の効率化を「どの業務から手を付けるか」という全体計画に落とし込みたい場合は、ExcelとAIを軸にした業務改善ロードマップのほうで進め方を整理しています。
よくある質問
ChatGPTが出した数式が、Excelに貼ると動きません。
まず、全角スペースが混ざっていないか、先頭の = が抜けていないかを確認してください。それでも直らない場合は、エラー表示(#NAME? #VALUE! など)をそのまま伝えて聞き直します。#NAME? は関数名が認識されていないサインで、XLOOKUPのようにお使いのバージョンに存在しない関数を使ったときによく出ます。その場合は「Excel 2019で使える書き方に直してください」と伝えれば、VLOOKUPなどの代替案が返ってきます。
会社のExcelでXLOOKUPが使えるか、どう調べればいいですか。
まず使用中のExcelの製品名・バージョンを確認します。この記事の練習データを入力済みなら、空いているH2へ =XLOOKUP("R003",A2:A6,D2:D6,"該当なし") と完成した式を入れ、5000が返るかを確認する方法もあります。途中までの式では判定できません。XLOOKUPはMicrosoft 365、Excel 2021/2024、Web版などで利用でき、Excel 2016/2019では利用できません。社内でバージョンが混在している場合は、誰が開いても動くようにVLOOKUPで統一しておくのが無難です。
実際の売上データを貼らないと、正しい数式を作ってもらえないのでは?
その必要はありません。まずは列構成・データの型・条件・例外を伝え、実際の表にある特徴を再現した架空データで依頼できます。本番へ移す際は範囲だけでなく、空欄・表記ゆれ・重複・数値が文字列になっていないかも確認してください。5行で動いたことだけで、本番の全件が正しいとは判断できません。
まとめ
この記事でお伝えしたことは、次の3点に集約されます。
1つ目は、依頼のしかた。 列構成・やりたいこと・期待値を書けば、ChatGPTが作った式を自分の目的と照合しやすくなります。逆にこれがないと、それらしいけれど自社に合わない式が出てきます。
2つ目は、検証のしかた。 5行の架空データを1つ持っておき、SUMIFSなら27000、XLOOKUPならR003で5000・R005で0・存在しないIDで「該当なし」といった期待値と突き合わせます。とくに「0」と「該当なし」の区別、「以上」と「より大きい」の境界は、本番で金額の判断を左右する部分です。
3つ目は、VBAの安全な始め方。 新規の練習用ブックで、ThisWorkbook とシート名で対象を絞り、値も数式も変えない書式整形から入る。外部通信・保存・削除・自動実行はさせない。依頼した制約をコードが守っているか確かめ、変更範囲を理解してから使いましょう。
まずは1つだけ試してみてください。この記事の依頼テンプレートをコピーして、いま手作業でやっている集計を1つ選び、架空の5行データで数式を作らせて期待値と照合する。期待どおりに動いたら、依頼文と検証結果も一緒に保存しておくと、次回の作業や担当者への引き継ぎに使えます。



リクマ
境界の1件を自分で作って試すのがおすすめです。「10000以上」と「10000より大きい」は別の条件。式を直す前に、どちらが業務のルールなのかを決めておきましょう。