• 締切済み

担当者別にレコードを抽出してレポート印刷するマクロの作成

<テーブル> ID 取引先 状態 担当 担当2 担当3 担当4 1_A商事_継続_鈴木_山田 2_B商事_継続_山田 3_C商事_終了_田中_鈴木_山田_佐藤 というテーブルがあります。 コマンドボタン一つで担当者別にそれぞれの継続中のデータの一覧表を連続してレポートに印刷するマクロを作成することは可能でしょうか。 考えついた方法は, (1)担当者別に人数分の抽出クエリを作成し,そのクエリをレポートソースとした担当者別のレポートを作成する (2)そのレポートを順次印刷していくマクロを作成する ですが,担当者が20人ほどいるので,20個のクエリを作成し,20個のレポートを作成しなければなりません。 また,担当,担当2,担当3全てに名前がある山田さんのような場合には,1~3全ての担当者として抽出したいと思います。 さらに,印刷するレポートのヘッダーに担当者の名前を表示させたいのですが,可能でしょうか。 初めは,パラメータークエリを利用してダイアログボックスに入力する値(担当者名)をレポートに取り込む方法を考えたのですが,毎月決まって打ち出したいレポートが5種類あるので,20人の担当者の分を出力する場合,5種類×20回=100回,パラメータークエリでの入力をすることになるので,あきらめました。 なんだか,欲張りな話ですが,良い方法があればご教示下さい。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

なんかアクセスが出来るのか、クエリを勉強したいのかわからないが、そういう方法もあるが、難しい方法に首を突っ込んで、勉強の方向がそれているように思う。 下記がお勧め。 (1)データシートまたはそのコピーを作り、担当者でソートする。 (2)担当者が変わるまで、印刷シートに明細行部分に印刷項目データを、データシートから採ってきて代入する。 (3)所定行数を超えたら、印刷シートは印刷して、明細部や小計などはクリア、明細行のセットを明細最初行から続ける。 (4)ページ途中で担当者が変わったら、出来上がっている印刷シートは印刷して、明細部や小計などはクリア その後、変わった担当者の明細で上記を繰り返す。 (5)データが終ったら出来上がっている印刷シートは印刷する。 こういうロジックは、昔は先輩から鍛えられたが、最近に独学した人は知らないようだ。

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.5

unionクエリを使う。 クエリ1:SELECT テーブル1.ID, テーブル1.担当 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当) Is Not Null)) クエリ2:SELECT テーブル1.ID, テーブル1.担当2 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当2) Is Not Null)) クエリ3:SELECT テーブル1.ID, テーブル1.担当3 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当3) Is Not Null)) クエリ4:SELECT テーブル1.ID, テーブル1.担当4 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当4) Is Not Null)) クエリ5:SELECT クエリ1.* FROM クエリ1 UNION ALL SELECT クエリ2.* FROM クエリ2 UNION ALL SELECT クエリ3.* FROM クエリ3 UNION ALL SELECT クエリ4.* FROM クエリ4 このクエリ5が担当のどれかに名前があるIDのリストになる。 これを基に新たなクエリを作る。 クエリ6:SELECT クエリ5.担当者, クエリ5.ID FROM クエリ5 ORDER BY クエリ5.担当者, クエリ5.ID とすると、担当者別のIDが求められる。 さらにこれを基にすれば、担当別一覧が作れる。 クエリ5を求めるのに、クエリ1からクエリ4を作らなくても、以下でもできる。 SELECT テーブル1.ID, テーブル1.担当 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当) Is Not Null)) UNION ALL SELECT テーブル1.ID, テーブル1.担当2 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当2) Is Not Null)) UNION ALL SELECT テーブル1.ID, テーブル1.担当3 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当3) Is Not Null)) UNION ALL SELECT テーブル1.ID, テーブル1.担当4 AS 担当者 FROM テーブル1 WHERE (((テーブル1.担当4) Is Not Null));

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.4

補足。 よく陥りやすいのですがこのような場合、顧客が3レコードしかないとMAX3レコードしか出力されないと勘違いしますがSQLの基本は掛け算です担当20名、顧客3件だと60レコードあると仮定されその中でWhere句条件に一致する物が出ます。 なので担当者を複数持つ顧客は先程のサンプルSQLで担当者の数だけ出力されますよ 質問の意図がよく見えなかったのですが多分欲しいのはサンプルのような事かな~と思ってね

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.3

記入漏れ、Where句に AND 状態="継続" を書き忘れ

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

質問の意図がよく見えませんねぇ? 担当者名テーブルは無いの? 無ければ作成したほうが良いでしょうね それで現テーブルを顧客、担当者名テーブルを担当名と仮定して 先ほどと同じように Select 担当名.担当, 顧客.ID, 顧客.取引先 From 顧客, 担当名 Where 担当名.担当 In (顧客.担当,顧客.担当2,顧客.担当3,顧客.担当4) これをレポートで担当、IDでソート 担当ブレイクで改ページすれば良いのでは

0304arabia
質問者

補足

質問の仕方が適切でなく,お手間を取らせてすみません。アクセスに関しては,独学で学んでいるので,全くの素人だと想像して下さい(もう,してると思いますが…)。 やりたい事は, 「フォーム上にコマンドボタンを配置し,そのコマンドボタンをクリックすると,担当者別の継続中のデータの一覧表が印刷される」 ことです。そんなこと,無理だよ!ということであれば,そのように言って下されば,あきらめます。情報が足りないのであれば,足りないところを指摘していただけると助かります。 ご質問の件,担当者テーブルは,ありますが,仮に <テーブル> ID 取引先 状態 担当 担当2 担当3 担当4 1_A商事_継続_鈴木_山田 2_B商事_継続_山田 3_C商事_終了_田中_鈴木_山田_佐藤 のテーブルを〈テーブル1〉とします。 〈テーブル1〉の担当…担当4のフィールドには,〈担当者テーブル〉をデータ型のルックアップウィザードで表示される設定にしました(そもそも,この思考がおかしいのでしょうか?)。 記述していただいた Select 担当名.担当, 顧客.ID, 顧客.取引先 From 顧客, 担当名 Where 担当名.担当 In (顧客.担当,顧客.担当2,顧客.担当3,顧客.担当4) のどこをどうやって直して良いのか分かりません。お手数をおかけしますが,ご教示下さい。

noname#140971
noname#140971
回答No.1

tab1: [ID]_[取引先]_[状態] __1___A商事____1 __2___B商事____1 __3___C商事____0 tab2: [tab1_ID]_[区分]_[担当] _______1______1___鈴木 _______1______2___山田 _______2______1___山田 _______3______1___田中 _______3______2___鈴木 _______3______3___山田 _______3______4___佐藤 クエリ1: [ID]_[取引先]_[状態]_[担当] __1___A商事_______1___鈴木 __1___A商事_______1___山田 __2___B商事_______1___山田 __3___C商事_______0___田中 __3___C商事_______0___鈴木 __3___C商事_______0___山田 __3___C商事_______0___佐藤 SELECT tab1.ID, tab1.取引先, tab1.状態, tab2.担当 FROM tab1 INNER JOIN tab2 ON tab1.ID=tab2.tab1_ID ORDER BY tab2.区分; [イミディエイト] ? DBSelect("SELECT * FROM [クエリ1] WHERE tab1.状態=1 Order BY tab2.担当, tab1.ID",,vbCrLF) 1;A商事;1;山田; 2;B商事;1;山田; 1;A商事;1;鈴木; で、担当者別にそれぞれの継続中のデータの一覧を[イミディエイトウインドウ]に表示しています。

関連するQ&A

  • 【Access2000】レコードの抽出方法

     Access2000を使用してデータベースを作成していますが、抽出条件でつまずいています。  具体的には、  【1】選択クエリーAを基に作成したフォームA(単票形式でレコードを1件ずつ表示)があります。  【2】フォームAの中に単票形式でレポートを出力するマクロボタンが有。  【3】現在はマクロボタンを押すとパラメータで「データNo.?」と入力してもらう形になってレコードを1件抽出する形になっています。    ※画面上に表示されている「データNo.」フィールドの数値を入力してもらう形です。  質問についてですが、今のところはパラメータを入力してもらいレコードを抽出→レポートを出力していますが、パラメータを使わず、現在、フォーム上に表示されているレコード(表示されている1件)を抽出する方法はないかと壁にぶち当たっています。  言い換えれば、レポートを出力する際の元になるクエリの抽出条件で「現在、表示されているレコード」をどのように記述すればいいか、もし御存知の方がいらっしゃいましたら御教示お願いいたします。

  • access2010のレポート印刷について質問です

    選択クエリにて日付で抽出しています。 選択クエリを実行すると、パラメーターの入力画面が表示され、日付を入力すると抽出されます。 その選択クエリをそのままレポートとしてあります。 そのレポートを印刷するにあたり、現在の流れは、フォームの印刷ボタンを押す→パラメーターの入力→レポート表示→ファイルタブから印刷を選択→印刷をクリック→プリンター選択等のプロパティー画面→印刷となっていますが、この手順を、フォームの印刷ボタンを押す→パラメーターの入力→プリンター選択等のプロパティー画面→印刷としたいのですが。 分かる方、是非教えて下さい。 宜しくお願いします。

  • accessのレポートで封筒に住所を印刷したい

    accessを使用しています。 基のテーブルがあり、フォーム・クエリで抽出作業が終わりました。 この抽出データ(住所)を封筒に印刷したいと思うのですが、どのような順序でレポートを作成したら良いのでしょうか? ご回答をお願いいたします!

  • accessのレポートで封筒に住所を印刷

    accessを使用しています。 基のテーブルがあり、フォーム・クエリで抽出作業が終わりました。 この抽出データ(住所)を封筒に印刷したいと思うのですが、どのような順序でレポートを作成したら良いのでしょうか? ご回答をお願いいたします!

  • 抽出したレコードの印刷

    アクセスで条件抽出(例:商品名の中に”高”という文字が含まれるレコードを抽出)したレコードを印刷したいのですが、どう処理したら良いのかわかりません。 抽出条件は毎回変わるのでクエリーは使用せずにinputboxを使用して抽出しています。 抽出したレコードのみをファイルに書き出してそのファイルをレポートにて出力したいのですが…。

  • アクセスで特定のレコードのみのレポートを印刷したいのですが。

    アクセス2003である特定のレコードのみのレポートを印刷したいと思っています。現在開いているフォームのレコードのみを印刷(レポートとして)印刷するには、ファイル→印刷→ページ指定で現在印刷しているのですが、他に方法はないでしょうか?単に「レポートの印刷」とすると全てのレコードが印刷されてしまいます。今のところ特定のレコードのみ印刷するには、まずページ数を調べなければいけないので不便です。せっかくパラメータクエリなどで、そのレコードのフォーム画面を表示させても、レポート印刷につながらないので、どなたか良い方法を教えていただけないでしょうか?よろしくお願いいたします。

  • Access2000でのレポート印刷

    Access2000を使用しています。 データをテーブルに入力してレポート印刷をしたいのですが、テーブルで抽出したデータだけを印刷するにはどうしたらいいのでしょうか? 今、レポート印刷できるのはそのレポートを作成した時点でのテーブル状況が反映されたもので、その後テーブルの操作をしても、それがその都度、レポートに反映されません。よろしくお願いします。

  • 新規レコードから抽出されない。

    アクセス2007で簡単な名簿を作成しています。 テーブルは1個 レコードの内容は、名前、郵便番号、住所1、住所2,会社名、会社郵便番号、会社住所1,会社住所2,入力日、個人・職場 となっています。 フォーム 入力と閲覧を兼ねたフォームを1個作成しています。 クエリー 選択クエリーを2個作っています。 【選択クエリー個人】はレコード「個人」を抽出条件を「個人」としています。 【選択クエリー職場】はレコード「職場」を抽出条件を「職場」としています。 クエリーでは、登録が個人か職場を選択出来るようにしています。 テーブルには、手元にあったエクセルのデータ(xlsx)を読み込ませました。 この時点では、【選択クエリー個人】【選択クエリー職場】どちらのクエリーでも希望通りのデータが抽出出来ました。 実際の運用を初めフォームから入力を始めた所、新規に入力したデータが【選択クエリー個人】【選択クエリー職場】個々のクエリーで抽出されない事に気がつきました。 確認した事 テーブルを確認した所、データは全てテーブルに入力されている。 テーブルで「個人・職場」の列でフィルタを掛けると、新規入力分が抽出されない。 なぜ抽出されないかを知りたい。 入力フォームにて 「個人・職場」の部分はコンボボックスにしています。 テーブルにて 入力フォームを利用せず、テーブルに直接データを入力してもフィルタで抽出されません。 対策 テーブルの内容をいったん全てを「テキスト」でエクスポートしました。 エクスポートしたデータには、フォームから入力したデータも含まれています。 テーブルをコピーして、貼り付けの際「テーブルの構造みの」として新規テーブルを作成。 新規作成したテーブルにエクスポートした「テキスト」データを読み込み。 エクスポートしたテーブルは削除し新規作成したテーブルを同じ名称に変更した。 上記対策を行った後フォームから新規データ入力後、テーブルのフィルタで抽出されるようになり、クエリーで抽出されるようになりました。旧テーブルの時に入力したデータも抽出されます。 アクセスにデータをインポートする際にエクセルのデータとテキストでは違い有るのでしょうか。 上記の対策を行いましたが、この状態で運用して問題ないでしょうか。 同じような経験された方がおればアドバイス頂ければ嬉しく思います。

  • ACCESS 2003 レポート機能で受注書作成

    ACCESS 2003のレポートの機能を使って受注請書を作成しています。 受注番号  お名前  品名  金額 12345    山田    ABC  100 23456    鈴木    ABB  100 23456    鈴木    BCC  200 のようなテーブルがあり、レポートでは受注番号が同じであれば一枚の 受注書にしたいと思っています。 この例ですと山田さん、鈴木さんで二枚の受注書になり、鈴木さんの明細 にはABBとBCCと合計金額が記載されている感じにしたいです。 私が作ったレポートだと鈴木さんも1レコードごとで出てきてしまいます。 同じ受注番号だったら、まとめる方法ないでしょうか? よろしくお願いいたします。   

  • ACCESSクエリの任意のレコードを抽出したい

    初心者ですのでよろしくお願いします。 ACCESS2002で現金出納帳テーブルを作成し、それから科目別のレコードを抽出する選択クエリを作成しました。 (例.交際費クエリ、贈答費クエリ、会議費クエリ等) これらのクエリではVBAで取引レコードごとに残高を算出するようにしています。 期末時点で、これらの科目別クエリの最終残高(一覧表形式の最終行にある残高)をそれぞれ抽出して、別に各科目の期末残高だけをのテーブルかクエリを作成したいのですが、いい方法はありませんでしょうか? よろしくお願いします。

専門家に質問してみよう