「請求書作成」のDBとピボットと請求書の関連付けは?

Question 14.6   Previous Next
はじめまして。 雑誌PCing2月号よりサンプルマクロ「請求書作成」をダウンロードしました。
その中でDBとピボットと請求書の関連付けが分かりません。 使い方を教えて下さい。
Answer   Copyright (C) 1999.1.25 永井善王
「関連付け」と言われると、あるシートと他のシートの間にリンクを張っているか、或いは、 他のシートを参照するような式を埋め込んでいるかどうかを、たずねて見えると思ってよいでしょうか?
そういう意味ならば、何もしていません。すべてマクロで処理しています。

マクロの骨組みを説明します。
  1) マクロの変数を設定し、初期化する … ブック名、シート名、消費税率など
  2) 請求書に印刷する日付を入力する … インプットボックスで入力要求
  3) DBの範囲を調べてから、ピボットテーブルを作成する
  4) ピボットテーブルから売上データを順に取り出して、請求書を印刷する

あなたは既に、サンプルマクロを見ましたか。DBからピボットテーブルを作る部分のマクロは、下記のようになっています。
 1. Private Sub ピボットテーブルを作成する()
 2.     Sheets(ピボット).Cells.Clear                'すべてクリア
 3.     Sheets(データ).Select
 4.         下端 = Range(Cells(1, 1), Cells(1, 1)).End(xlDown).Row '下端検出
 5.         Range("A2").Select
 6.         ソース = データ & "!R1C1:R" & 下端 & "C3"
 7.         テーブル先 = "[" & ブック名 & "]" & ピボット & "!R1C1"
 8.         テーブル名 = "請求先別売上"
 9.         ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
10.             ソース, TableDestination:=テーブル先, TableName:=テーブル名
11.         ActiveSheet.PivotTables(テーブル名).AddFields RowFields:="社名", _
12.             ColumnFields:="内容"
13.         ActiveSheet.PivotTables(テーブル名).PivotFields("売上").Orientation _
14.             = xlDataField
15. End Sub
3~4行目で、DBシートの下端行を検出しています。
6~8行目は、ピボットテーブルに必要な変数をセットしています。(6行目はDBシートの範囲、
        7行目はピボットテーブルを作るシート名など、8行目はピボットテーブルの名前)
9~10行目、11~12行目、13~14行目がピボットテーブルを作るためのマクロです。
        くわしい説明は、エクセルのヘルプで見れると思います。

次はピボットテーブルから請求書を作成する段階ですが、これもすべてマクロだけで処理しています。
 1. Private Sub ピボットテーブルから売上データを取り出しながら請求書を印刷する()
 2.     下端 = Sheets(ピボット).Range("B3").End(xlDown).Row       '下端検出
 3.     右端 = Sheets(ピボット).Range("B3").End(xlToRight).Column '右端検出
 4.     Sheets(用紙).Select
 5.         For 縦 = 3 To 下端 - 1                 'ピボットテーブルの3行目~最下行-1
 6.             Range("C22:J31").ClearContents      '明細欄をクリア
 7.             Cells(11, 5) = Sheets(ピボット).Cells(縦, 1) '社名
 8.             貼付行 = 22                         '請求書用紙の金額欄の最上行
 9.             For 横 = 2 To 右端 - 1
10.                 Cells(貼付行, 4) = " " & Sheets(ピボット).Cells(2, 横)  '内容
11.                 Cells(貼付行, 9) = " " & Sheets(ピボット).Cells(縦, 横) '売上
12.                 貼付行 = 貼付行 + 1
13.             Next
14.             小計 = Sheets(ピボット).Cells(縦, 右端) '横計
15.             Cells(貼付行, 6) = "小 計"
16.             Cells(貼付行, 9) = 小計             '小計
17.             消費税 = Application.Round(小計 * 消費税率 / 100, 0)
18.             Cells(貼付行 + 1, 6) = "消費税"
19.             Cells(貼付行 + 1, 9) = 消費税       '消費税
20.             Cells(貼付行 + 2, 6) = "合 計"
21.             Cells(貼付行 + 2, 9) = 小計 + 消費税 '合計
22.             Cells(18, 5) = 小計 + 消費税        'ご請求額
23.             ActiveWindow.SelectedSheets.PrintOut Copies:=1 '印刷
24.         Next
25. End Sub
以下はマクロの、大きい流れだけ説明します。
5~24行目の For~Nextは、ピボットテーブルの3行目(=A社)から始めて、下端行-1行(=C社)に至るまで、1行ずつ反復処理します。
9~18行目の For~Nextは、ピボットテーブルのB列(=内容1)から右端列-1列(=内容3)に至るまで、内容名と金額を取り出して請求書用紙に写します。
17行目は、消費税金額を円未満を四捨五入して計算しています。
23行目で印刷します。

この他の各行のマクロの動作内容は、コメントを読んで理解してください。

Excel VBA Macro