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

PR
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つです。
「セル単位で処理をする関数」に対して「テーブル単位で処理をする」イメージで操作します。

参考:» Excelのクエリとは?パワークエリでできること【活用例・業務改善方法】

吉峰
吉峰

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に該当する行(レコード)のみを抽出します。

請求書明細データ一覧から指定した請求書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 Power Queryで明細データから必要項目の抽出

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

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

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

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

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

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

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

請求書作成システムを構成する4つの構築工程の対応箇所を示す図

工程1 Power Queryで明細データから必要項目の抽出

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

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

STEP.1

テーブルの準備

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

  • T_請求書明細:請求書の明細データ(複数分の書類データを含む)
  • P_請求書No:請求書Noの記入欄
複数回分の請求明細が蓄積されたT_請求書明細テーブル
抽出したい請求書番号を指定するP_請求書Noテーブル

テーブルの作成方法

【テーブル化の方法】

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

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

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

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

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

  1. Excelの[データ]タブから[テーブルまたは範囲から]を選択してT_請求書明細を取り込む画面

    テーブルのセルを選択し、[データ] タブの [テーブルまたは範囲から] をクリック

  2. Power Queryエディターで[閉じて読み込む]メニュー内の[閉じて次に読み込む...]を選択する画面

    Power Queryエディターで [閉じて次に読み込む…]をクリック

  3. [データのインポート]ダイアログボックスで[接続の作成のみ]を選択してOKを押す画面

    [接続の作成のみ] を選択して [OK] をクリック

STEP.3

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

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

  1. P_請求書Noのセルを選択し[データ]タブの[テーブルまたは範囲から]をクリックする画面

    対象のセルを選択し、[データ] タブの [テーブルまたは範囲から] をクリックします。

  2. Power Queryエディターで[クエリのマージ]ボタンをクリックする画面

    Power Queryエディターで [P_請求書No] が選択されていることを確認し、[クエリのマージ] をクリックします。

  3. マージダイアログで結合対象にT_請求書明細を選び、請求書No列同士を紐付ける画面

    [マージ] 画面で [T_請求書明細] を選択し、双方の [請求書No] 列をクリックして紐付けたら、結合の種類([左外部])を確認して [OK] をクリックします。

吉峰
吉峰

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

STEP.4

結合列の展開

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

Power Queryエディターで結合された列の展開ボタンを押し、必要な列を選択する画面

結合列を展開し、必要な列だけを選択します。不要な列はチェックを外して削除します。

STEP.5

出力テーブルの整形

必要に応じて、テーブルの出力時に不要となる列の削除、列名の変更や列の入れ替えを行います。下記は例です。

Power Queryエディターで [請求書No] 列を選択し、[行の削除] をクリックして列を削除
[行番号] 列をダブルクリックし、[番号] に列名を変更
STEP.6

出力テーブルの配置

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

Power Queryエディターの画面左上にある[閉じて読み込む]ボタン

[閉じて読み込む] をクリックし、Power Queryエディターを閉じます。

[データのインポート]ダイアログで[テーブル]を選び読み込み先のセルを指定する画面

[データのインポート] ダイアログで [テーブル] を選択し、出力先(配置したい位置の左上のセル)を指定して出力します。

Power Queryではデータ更新に [更新] 操作が必要

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

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

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

シート上に配置した「更新操作が必要」という旨の注意書きテキスト

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

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

STEP.1

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

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

1. テーブルを選択し、[テーブルデザイン] タブの [プロパティ] をクリックします。
2. [外部データ範囲のプロパティ] ダイアログの [列幅の調整] のチェックを外して [OK] をクリックします。
STEP.2

書類フォーマットの用意

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

出力テーブルとP_請求書Noを同一シート内に配置した請求書のレイアウト画面

整形のコツ

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

STEP.3

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

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

「ウィンドウ枠の固定」を設定し、画面左側に「入力エリア」を配置した画面
画面右側に印刷・出力対象となる「出力エリア」を配置した画面
STEP.4

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

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

セル範囲を選択し[ページレイアウト]タブの[印刷範囲]から[印刷範囲の設定]を選択する画面

印刷範囲に設定したいセル列(出力エリア)を選択し、[ページレイアウト] タブの [印刷範囲] > [印刷範囲の設定] をクリックします。

[ページレイアウト]タブの[拡大縮小印刷]で「横」を「1ページ」に設定する画面

印刷範囲に設定したいセル列(出力エリア)を選択した状態で、[ページレイアウト] タブの [拡大縮小印刷] > [横] を 1ページ に設定します。

改ページプレビューで青い枠線が正しい出力範囲を囲んでいるか確認する画面

[改ページプレビュー] 表示にして、書類の出力エリアのみが印刷範囲に設定されていることが確認できたらOKです。

STEP.5

印刷設定の微調整

印刷・PDF出力時にレイアウトが崩れないよう、仕上げのカスタマイズ(横方向の中央寄せ設定)を行います。

1. [ページレイアウト] タブ > [ページ設定] グループの詳細設定ボタンをクリックします。
2. [余白] タブで [ページ中央] の [水平] にチェックを入れます。

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

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

STEP.1

テーブルの準備

商品ID・品名・単価などを一元管理するM_商品テーブル

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

STEP.2

テーブルの列の [名前の定義]

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

「名前の定義」ダイアログで名前を「商品ID」、参照範囲を「=M_商品[商品ID]」に設定する画面
  • 名前商品ID
  • 参照範囲=M_商品[商品ID]

なぜ [名前の定義] が必要?

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

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

STEP.3

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

「データの入力規則」ダイアログで「リスト」を選択し、元の値に「=商品ID」を設定する画面

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

  • 入力値の種類リスト
  • 元の値=商品ID
STEP.4

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

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

記入する列と数式

  • 品名列:=XLOOKUP([@商品ID], M_商品[商品ID], M_商品[品名])
  • 単位列:=XLOOKUP([@商品ID], M_商品[商品ID], M_商品[単位])
  • 税抜単価列:=XLOOKUP([@商品ID], M_商品[商品ID], M_商品[税抜単価])
  • 税抜金額列:=[@数量]*[@税抜単価]
  • 税区分列:=XLOOKUP([@商品ID], M_商品[商品ID], M_商品[税区分])
XLOOKUP関数を使って商品IDから品名・単位・単価が自動反映された明細テーブル

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

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

STEP.1

テーブルの準備

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

  • M_得意先:得意先の詳細データ(得意先ID、得意先名、住所、電話番号、敬称など)
  • P_得意先ID:請求書を発行する相手を選ぶための入力欄(1セルのみのテーブル)
得意先名や住所などの基本情報を管理するM_得意先テーブル
発行先の得意先IDを指定するP_得意先IDの入力セル
STEP.2

テーブルの列を [名前の定義] に追加

「名前の定義」ダイアログで名前を「得意先ID」、参照範囲を「=M_得意先[得意先ID]」に設定する画面

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

  • 名前得意先ID
  • 参照範囲=M_得意先[得意先ID]
STEP.3

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

P_得意先ID テーブルのセルを選択し、[データ] タブの [データの入力規則] をクリックして選択リストを設定します。

  • 入力値の種類リスト
  • 元の値=得意先ID
「P_得意先ID」テーブルのセルを選択し、[データ] タブの [データの入力規則] をクリックします。
[データの入力規則] ダイアログの [設定] タブで、[入力値の種類] を [リスト] に、[元の値] を `=得意先ID` に設定し、[OK] をクリックします。
STEP.4

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

関数を使い、入力欄(P_得意先IDで選ばれた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出力を行う。

更新忘れに注意!

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

Excelでの請求書管理が負担になってきたら

今回紹介した方法では、Excelの関数とPower Queryを組み合わせることで、マクロ/VBAを使わずに請求書作成の仕組みを構築できます。Excelだけで完結するため、既存の業務フローに合わせやすいのがメリットです。

一方で、実際は請求書の作成後も、以下のようなさまざまな作業が発生します。

  • 請求書をメールで送付 / 請求書を郵送する
  • 取引先から届いた請求書を受領・管理する
  • 入金状況を確認する
  • 入金消込を行う

請求書の作成だけでなく、請求業務全体を効率化したい場合は、専用のクラウド請求書サービスを利用する方法があります。

CLOUDPAPERという選択肢

請求業務専用のクラウドサービスとして、CLOUDPAPERがあります。クラウド上で請求書・見積書・発注書・領収書などを作成できるのに加え、メール送付・郵送、請求書受領、入金消込なども行えるのが特徴です。

Excelでの請求業務や書類管理に手間を感じている場合は、CLOUDPAPERの機能を無料で試してみるとよいでしょう。

» CLOUDPAPERを無料で試してみる

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

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

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

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

Power Queryは、マクロ/VBAと比べても属人化・ブラックボックス化しにくく、学習コストも低いのが特長です。Excel業務を効率化したい方は、ぜひ活用してみてください。

参考:» Excelのクエリとは?パワークエリでできること【活用例・業務改善方法】

Excelで請求書作成だけでなく、仕組み構築の手間を省き、送付・管理までまとめてクラウド化したい場合は、CLOUDPAPERのようなクラウド請求書サービスも有用です。

» CLOUDPAPERを無料で試してみる