本文へスキップ

ARTICLEAI活用・業務効率化小さな会社のWeb戦略室

ExcelとAIの合わせ技|関数・マクロをChatGPTに作らせる方法

ExcelとChatGPTを組み合わせて、関数やVBAマクロを作る方法をまとめました。コピーして使える依頼文、SUMIFS・IF・XLOOKUPの例、マクロの貼り付け方、結果の確かめ方まで紹介します。

中山Nutrits 代表

公開日更新日

CHAPTERS
12章
READ
UPDATED
2026.10.18
ExcelとAIの合わせ技|関数・マクロをChatGPTに作らせる方法 のアイキャッチ画像

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

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

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


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

3つのステップだけ覚える

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

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

大切なのは、3の確認までを1つの作業にすることです。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つです。

  • 最後の引数 FALSE は、完全一致の指定です。省くと、思わぬ近似一致になります。
  • 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のまま変わりません。データが空でも、書式が設定されるだけで、エラーにはなりません。

出典:Font.Bold/Range.NumberFormat

ご注意:このコードは記事執筆時点で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(VBAの編集画面)を開きます。左のプロジェクトの一覧で、今回の練習用ブックの「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つだけ書く]
・セルの値と数式は変更しない
・対象シートがなければメッセージを出して中止する
・外部通信、保存、削除、自動実行はしない
・標準モジュールに貼り付けて手動実行します
コード全体と、実行後に何がどう変わるかを教えてください。

Nutritsでも、決まった形の表を使う自動化の例を作りました。2026年8月、見積依頼のメールから、見積書のテンプレートへ内容を写す流れです。テンプレートの項目は5つで、PDFにするところまでを、自動で実演できる形にしました。

テンプレートは、ExcelとNumbers(Mac向けの表計算ソフト)で用意しました。この流れは、AI講座の題材として使いました。項目の決まった表を先に用意する点は、この記事で列の構成を先に伝えるのと同じ考え方です。

こうした作業の効率化を、「どの業務から手をつけるか」という全体の計画に落とし込みたい場合もあるでしょう。その進め方は、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行のデータで数式を作らせ、期待する値と照らし合わせましょう。期待どおりに動いたら、依頼文と確認の結果も一緒に保存しておくと、次の作業や担当者への引き継ぎに使えます。

WRITTEN BYこの記事を書いた人

代表 中山

Nutrits 代表中山

埼玉県川越市を拠点に、中小企業のホームページ制作・Web改善・AI活用支援・EC・店舗送客支援を行っています。

ホームページは、作って終わりではありません。大切なのは、公開したあとにどう活用し、どう改善し、問い合わせや売上、店舗への来店につなげていくかです。代表メッセージより
保有資格
Google 広告 検索広告 Googleアナリティクス LINE公式アカウント Basic G検定
会社概要・代表メッセージ

FREE DIAGNOSIS

無料Web診断で、サイトの課題と改善の優先順位を整理します。

サイトの課題と改善の優先順位を整理してお届けします。無理な営業は行いません。

  1. 01現状の課題を可視化
  2. 02改善の優先順位をご提案
  3. 03最短3営業日でご報告

まずは相談したい方は お問い合わせ LINEで相談