さくっとエクセレートさくっとエクセレート

データ一覧からの請求書の作り方を徹底解説!エクセル関数とクエリ活用【マクロ不要】

Thumbnail for データ一覧からの請求書の作り方を徹底解説!エクセル関数とクエリ活用【マクロ不要】

はじめに

  • 「毎月、大量のデータ一覧から手作業で請求書を作っていて時間がかかる…」
  • 「マクロ/VBAを使えば自動化できるのは知っているけれど、コードを書くのはハードルが高いし、引き継ぎも不安。

このような悩みをお持ちではないですか?

Excel(エクセル)では、マクロ/VBAを一切使わずに「関数」と「Power Query(パワークエリ)を組み合わせること で、データの一覧から必要なデータのみを抽出して、簡単に請求書を作成する仕組みが作れます。

本記事では、汎用性が高く、誰でもメンテナンスしやすい「脱・手作業」の請求書作成フローを解説します。

Excelのバージョン

本記事は、Excel 2024(ローカルまたは共有フォルダでの運用) を基に作成しています。
環境によっては、UIなどの細かな点が異なる可能性があります。

マクロ/VBA不要!Power Queryを使う理由

Power Queryは「複数行を抽出する処理を、最も安全に実装できるExcel標準機能」です。本記事では、関数とPower Queryを併用します。

Power Query(パワークエリ)とは

Power QueryはExcel標準機能の1つです。
「セル単位で処理をする関数」に対して「テーブル単位で処理をする」イメージで操作します。

» 詳細はこちら

※ 本記事では「Power Query(パワークエリ)を、
見出しでは「パワークエリ」本文では「Power Query」と表記します。

吉峰
吉峰

Power Queryはデータ更新がリアルタイムではなく、「更新」操作が必要 です。注意書きを残しておくと、運用時のトラブルを減らせます。

Power Queryを使う理由は、主に以下の2つです。

  1. 複数セルを一度に出力できる
  2. 難易度が低い
 

1. 複数セルを一度に出力できる

「1つの条件(請求書Noなど)に対して、複数行のデータを抽出し、まとめて出力する」処理において、Power Queryは非常に有用です。

  • 関数の場合:
    • VLOOKUP関数では1セルしか出力できない。
    • スピル機能を使えば複数セルの出力が可能だが、古いExcel(2016未満)では使用できない。
    • スピル機能は、出力範囲に記入済みセルがあると #SPILL! エラーが発生する。
  • Power Queryの場合:
    • 複数セルを一度に出力できる。
    • Excel 2016以降で標準利用可能(2010、2013もアドインで対応可能)
    • 出力先に記入済みセルがあっても、新規の行・列として挿入される。
吉峰
吉峰

今回はPower Queryを、FILTER関数のような感覚で「条件に合う行だけを抜き出す」用途として活用します。

 

2. 難易度が低い

Power Query は、習得難易度が低い点も大きなメリットです。操作のほとんどが画面上のマウス操作(クリックやメニュー選択)で完結し、処理の工程が「ステップ」として表示されるため、後から見直しても内容を把握しやすくなっています。

一方で マクロ/VBA は自由度が高い反面、コード記述が前提となり、属人化・ブラックボックス化しやすい というリスクがあります。

 

ただし関数も併用する

単純な処理のみを行う場面では、関数を積極的に使用します。複雑なネスト構成でなければ、理解・修正が容易で扱いが楽なためです。

吉峰
吉峰

ここでは XLOOKUP 関数をメインに使用していますが、VLOOKUPMATCH + INDEX 関数でも問題ありません。

【完成イメージ】データ一覧から請求書を自動抽出する仕組み

ここでは、データ一覧「請求書明細の中から、指定した「請求書Noに該当する行(レコード)のみを抽出します。

請求書明細と出力テーブルのイメージ

具体的には、Power Queryを使って請求書Noを記入した P_請求書No テーブルの横に、T_請求書明細 テーブルを連結(マージ / 紐づけ)します。

VLOOKUPFILTER 関数で行っている処理をPower Queryでまとめて実施し、複数行を一度に出力するイメージです。

 

マスタテーブルも活用できるように

商品マスタM_商品テーブル)得意先マスタM_得意先テーブル)も用意し、入力補助機能を追加します。

  • M_商品T_請求書明細 の紐づけ
    • 商品IDをドロップダウンリストから選択可能(データの入力規則)
    • 商品ID選択時に、品名・単価などを自動入力(XLOOKUP関数)
  • M_得意先P_得意先ID の紐づけ
    • 得意先IDをドロップダウンリストから選択可能
    • 得意先情報(住所・担当者など)を自動入力(XLOOKUP関数)

P_得意先ID :書類で使用する得意先IDを1つ指定する欄

複数テーブルの紐づけイメージ

作成工程の概要

本記事では、請求書作成システムを「4つの工程」に分けて構築します。

  • 【メイン処理】工程1 パワークエリで明細データから必要項目の抽出 :

    複数書類を含む明細一覧から、特定の請求書Noに紐づくデータのみを抽出

  • 【レイアウト】工程2 書類フォーマットの整形 :

    印刷・PDF出力したときに書類として使えるよう、見た目を整える

  • 【補助機能1】工程3 関数で商品マスタデータを明細に自動記入 :

    商品ID選択により、品名・単価を自動入力。

  • 【補助機能2】工程4 関数で得意先マスタデータを書類に自動記入 :

    得意先ID選択により、住所・担当者を自動入力。

工程の対応場所

工程1 パワークエリで明細データから必要項目の抽出

この工程は最も重要です。この出力テーブルを前提に、以降の工程は進みます。

Power Queryを使い、T_請求書明細 テーブルから必要な請求書Noのデータのみを抽出 し、テーブルとして出力します。

STEP1

テーブルの準備

1つのExcelブックの異なるシートに、次の2つのテーブルを用意します。

  • T_請求書明細 : 請求書の明細データ(複数分の書類データを含む)
  • P_請求書No : 請求書Noの記入欄
テーブルの準備

テーブルの作成方法

【テーブル化の方法】

  1. テーブルにするセルを選択。
  2. 挿入タブのテーブルCtrl + tを選択。

【テーブル名の設定方法】

  1. テーブルのセルを選択。
  2. テーブルデザインタブのテーブル名欄にテーブル名を入力
STEP2

T_請求書明細をPower Queryに事前取り込み

テーブルT_請求書明細を、事前にPower Query内に取り込みます。

T_請求書明細をPower Queryに事前取り込み
STEP3

T_請求書明細P_請求書Noをマージ

テーブルP_請求書NoをPower Queryで取り込み、P_請求書NoT_請求書明細の2つのテーブルを横方向に結合します。

T_請求書明細とP_請求書Noをマージ
吉峰
吉峰

行っていることは VLOOKUP のように、検索値に基づいてデータを紐づけているだけです。

STEP4

結合列の展開

P_請求書Noテーブルに、新規に追加された列を展開します(不要な列は削除)

結合列の展開
STEP5

出力テーブルの整形

必要に応じて、出力時に不要となる列の削除、列名の変更や列の入れ替えを行います。

出力テーブルの整形
STEP6

出力テーブルの配置

Power Queryで作成したテーブルをシートに配置します。

出力テーブルの配置

Power Queryではデータ更新に「更新」操作が必要

Power Queryは、関数と異なりリアルタイム更新は行いません。
元のデータを変更した場合は、以下のいずれかの操作をする必要があります。

  • データタブのすべて更新を選択
  • Power Queryで出力したテーブルを右クリック > 更新を選択
吉峰
吉峰

テーブルの近くに注意書きを残しておくと安心です。

注意書きの例

工程2 書類フォーマット(ひな形)の整形

工程1の出力テーブルを基に、請求書としての体裁を整えます。

STEP1

出力テーブルの列幅の自動変更をOFF設定

Power Queryで出力したテーブルは、デフォルトではデータ更新のたびに列幅が自動調整されてしまいます。レイアウト崩れを防ぐため、この機能を無効化します。

出力テーブルの列幅の自動変更をOFF設定
STEP2

書類フォーマットの用意

請求書の書類フォーマットをブック内に用意し、工程1の「出力テーブル」と「P_請求書Noテーブル」を同一シート内に配置します。レイアウト調整 では、出力テーブル(明細)の列幅を基準にし、その他の項目(宛名や合計欄など)を微調整します。

書類フォーマットの用意

整形のコツ

文字の配置(右/左/中央揃え)インデント、表示形式(通貨や日付)を設定します。
出力テーブルの列に拘束されない要素を挿入したい場合は、図形や「リンクされた図」も活用できます。

STEP3

入力エリアと出力エリアで分割

入力エリア : 作業を行う場所」と「出力エリア : 印刷・PDF出力される場所」「ウィンドウ枠の固定」機能で視覚的に分離し、操作性を高めます。

書類フォーマットの用意
STEP4

出力エリアに印刷範囲を設定

入力用の設定欄などが印刷・PDF出力範囲に含まれないよう、印刷範囲を請求書として出力したい範囲のみに限定します。

出力エリアに印刷範囲を設定
STEP5

印刷設定の微調整

印刷・PDF出力時にレイアウトが崩れないよう、仕上げのカスタマイズを行います。

印刷設定の微調整

工程3 関数で商品マスタデータを明細データに自動記入

ここからは「入力補助」の機能を実装します。商品マスタ(M_商品と連携させて、商品IDを選択できる機能品名や単価を自動で埋める機能 を構築します。

STEP1

テーブルの準備

商品情報を管理するマスタデータを準備します。テーブル化(名前:M_商品もしておきます。

テーブルの準備
STEP2

テーブルの列の「名前定義」

商品ID列の「名前の定義」を行います。プルダウンメニュー(データの入力規則)を設定するときに、構造化参照(テーブル参照)を使用できるようにするためです。

  • 名前 : 商品ID
  • 参照範囲 : =M_商品[商品ID]
テーブルの列の「名前定義」

なぜ「名前の定義」が必要?

Excelの仕様上、後述する「データの入力規則」では、
構造化参照 / テーブル参照(例:M_商品[商品ID]を直接使用できません。
そのため、「名前の定義」を仲介する必要があります。

構造化参照 / テーブル参照を使用すると、
データ範囲が自動的に拡張 します。

STEP3

請求書明細の商品ID列にプルダウンメニュー設定

T_請求書明細テーブルの商品ID列に「データの入力規則」を設定し、プルダウンメニューを使用できるようにします。

  • 入力値の種類 : リスト
  • 元の値 : =商品ID
請求書明細の商品ID列にプルダウンメニュー設定
STEP4

請求書明細テーブルに商品情報を自動記入

選択した商品IDの値に紐づく情報を、XLOOKUP関数で自動取得します。税抜金額は同行の値から計算します。

記入する列と数式

  • 品名列 : =XLOOKUP([@商品ID], M_商品[商品ID], M_商品[品名])
  • 単位列 : =XLOOKUP([@商品ID], M_商品[商品ID], M_商品[単位])
  • 税抜単価列 : =XLOOKUP([@商品ID], M_商品[商品ID], M_商品[税抜単価])
  • 税抜金額列 : =[@数量]*[@税抜単価]
  • 税区分列 : =XLOOKUP([@商品ID], M_商品[商品ID], M_商品[税区分])
請求書明細テーブルに商品情報を自動記入

工程4 関数で得意先マスタデータを書類に自動記入

工程3と同様に「入力補助」の機能を実装します。ここでは得意先マスタ(M_得意先と連携させて、得意先IDを選択できる機能住所・担当者などを自動で埋める機能 を構築します。

STEP1

テーブルの準備

得意先に関する情報を一元管理するマスタと、選択用の入力欄を用意します。

  • M_得意先 : 得意先の詳細データ(得意先ID、得意先名、住所、電話番号、敬称など)
  • P_得意先ID : 請求書を発行する相手を選ぶための入力欄(1セルのみのテーブル)
テーブルの準備
STEP2

テーブルの列の「名前定義」

入力規則(プルダウン)M_得意先 テーブルのIDリストを参照できるよう、得意先ID列を名前定義に追加します。

  • 名前 : 得意先ID
  • 参照範囲 : =M_得意先[得意先ID]
テーブルの列の「名前定義」
STEP3

得意先IDの入力欄にプルダウンメニュー設定

P_得意先ID テーブルのセルに、選択リストを設定します。

  • 入力値の種類 : リスト
  • 元の値 : =得意先ID
得意先IDの入力欄にプルダウンメニュー設定
STEP4

書類フォーマット中に得意先情報を自動記入

関数を使い、入力欄(P_得意先IDで選ばれたIDをキーにして、書類(出力エリア)の宛名欄などに情報が自動挿入されるようにします。

書類フォーマット中に得意先情報を自動記入

記入する列と数式

  • 得意先の社名セル : =XLOOKUP(P_得意先ID[得意先ID], M_得意先[得意先ID], M_得意先[得意先名])
  • 得意先の氏名セル : =XLOOKUP(P_得意先ID[得意先ID], M_得意先[得意先ID], M_得意先[担当者名]) & " " & XLOOKUP(P_得意先ID[得意先ID], M_得意先[得意先ID], M_得意先[敬称])

実務での運用フローと注意点

上記で作成したシステムを使用する際は、以下の手順で請求書を作成できます

  1. データの蓄積
    売上が発生するごとに、T_請求書明細 テーブルに新しい行を追加。

  2. 発行情報の入力

    「入力エリア」にある以下のパラメータを書き換え:

    • P_請求書No : 発行したい番号
    • P_得意先ID: 得意先のID
    • P_請求書情報 : その他の情報(発行日や備考など)
  3. データの更新

    以下のいずれかを行い、テーブルの更新操作を実行。

    • データタブのすべて更新を選択
    • Power Queryで出力したテーブルを右クリック > 更新を選択
  4. 出力

    内容に間違いがないか確認し、印刷・PDF出力を行う。

更新忘れに注意!

値を書き換えただけでは明細テーブルは変わりません。
「書き換えたら更新」をセットで 覚えましょう。

まとめ|Power Queryで請求書作成を効率化しよう

今回は、Excel関数とPower Queryを組み合わせて、マクロ/VBAを使わずに 一覧データから請求書を自動作成する方法 を解説しました。

本システムは主に、関数とPower Queryの強みを組み合わせて構築しています。

  • 関数 : 単純な処理に使用。
  • Power Query : 複数セルを一度に出力する場所に使用。

Power Queryは、マクロ/VBAと比べても
属人化・ブラックボックス化しにくく、学習コストも低いのが特長です。

Excel業務を効率化したい方は、ぜひ活用してみてください。