「この集計、関数でできる気はするけど書き方が思い出せない」。関数名を探したり、書き方を調べたりしているうちに、作業の手が止まることはないでしょうか。ChatGPTには、やりたい処理を日本語で伝えて、数式の候補を作ってもらえます。

ただし、AIが出した式やコードをそのまま本番ファイルに貼るのは危険です。合っているように見えて、条件が1つずれているだけで金額が変わることがあります。

そこでこの記事では、架空の小さなデータで検証してから本番に持っていくという流れを、実際にコピーして試せる形で紹介します。関数の例を3つ、VBA(マクロ)の例を1つ、すべて同じ架空データで統一しました。ブラウザのChatGPTに依頼し、返ってきた式やコードをお手元のExcelへ貼り付ける方法です。


ChatGPTでExcelを扱うときの基本の流れ

3ステップだけ覚える

やることは単純で、次の3つの往復です。

  1. 日本語で依頼する(列構成と、やりたいことを書く)
  2. 出力をExcelに貼り付ける(数式ならセルへ、コードなら標準モジュールへ)
  3. 小さな架空データで検証する(期待値と合うか、目視で確かめる)

大切なのは、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で「東かつ入金済」の合計を出す

「東」かつ「入金済」の2行を合計する
R001
12,000
R004
15,000
27,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列は数値で持つ、という前提を守ることが結局いちばん早い対策です。
リクマ

リクマ

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


例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点を見てください。式の説明と元データを見比べながら確認します。

  1. 範囲の行数が揃っているか:D2:D6 と C2:C6 のように、同じ高さになっているか。
  2. 条件の文字列が実データと一致しているか:「入金済」なのか「入金済み」なのか。
  3. 期待値と一致するか:この記事の例なら27000、大口/通常、5000。数字が違えば、式か前提のどちらかが間違っています。
  4. 境界の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 プロパティ)。「アクティブなシート」を対象にするコードは、実行時にどのシートが開いているかで結果が変わるため、初心者のうちは避けたほうが安全です。

リクマ

リクマ

VBAの依頼には、変更してよい範囲も書いておきたいですね。ただし、依頼文の制約だけで安全は保証されません。生成後のコードがその範囲を守っているかまで確認しましょう。

なお列幅の調整は、指定範囲だけでなく列全体に作用します。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,000 8,000 5,000 15,000 0 と桁区切りで表示される
  • 「書式を整えました」のメッセージが出る
  • 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行データで数式を作らせて期待値と照合する。期待どおりに動いたら、依頼文と検証結果も一緒に保存しておくと、次回の作業や担当者への引き継ぎに使えます。