すぐに役立つエクセルVBAマクロ集 - すぐマク
すぐに役立つ Excel VBA マクロ集 Excel VBA Macro
FAQ
Google
 
Home |  What's New! |  Gallery |  Introduction |  Service |  Profile 500連発・組み方講座フォロー Big Color Pallet
[広告]
 
Excel VBA Macro
Excel DownLoad
© 1997 - 2007
Yoshioh Nagai.
All RightsReserved.
HappyTech & Co., Ltd.
www.happy500z.com
Excel VBA Macro ・ 印刷 ・ FAQ
「請求書作成」のDBとピボットと請求書の関連付けは? Click Here! Click Here!
Question 14.6 印刷 Previous Next
はじめまして。 雑誌PCing2月号よりサンプルマクロ「請求書作成」をダウンロードしました。
その中でDBとピボットと請求書の関連付けが分かりません。 使い方を教えて下さい。
Answer   Copyright (C) 1999.1.25 Yoshioh Nagai
「関連付け」と言われると、あるシートと他のシートの間にリンクを張っているか、或いは、 他のシートを参照するような式を埋め込んでいるかどうかを、たずねて見えると思ってよいでしょうか?
そういう意味ならば、何もしていません。すべてマクロで処理しています。

マクロの骨組みを説明します。
  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行目で印刷します。

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