• ベストアンサー

フォーム レポート 表示方法

毎回お世話になっております。 Access上で社員出勤管理を作っていまして、 社員テーブルにグループ番号(1~10)があったときに、フォーム上・レポート上でそのグループごとに表示させるにはどのようにすればよろしいでしょうか? また表示させる時はグループごとに五十音順にしたいと思っております。詳しい全体の構造は http://oshiete1.goo.ne.jp/kotaeru.php3?q=1575942 の#6を見てくださると助かります。 アドバイス宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

続いて、単票フォーム+データシート型フォームの場合です。 前回作成したサブフォーム群の変更で対応します: 1)「SF_出勤予定1」フォームをデザインビューで開く 2)フォームのプロパティシートを開き、「データ」タブの「レコードソース」を以下のSQL文に差し替え: SELECT 出勤予定A.*, [社員一覧].[グループ番号] FROM 出勤予定A INNER JOIN 社員一覧 ON [出勤予定A].[社員ID]=[社員一覧].[社員ID] WHERE ((([出勤予定A].[月度])=[Forms]![MF_出勤予定B]![対象月度])) ORDER BY [社員一覧].[グループ番号], [社員一覧].[社員名]; 3)フォームの詳細領域に、「フィールドリスト」からのドラッグアンドドロップで「グループ番号」を追加 4)上書き保存して「SF_出勤予定1」を閉じる 5)「SF_出勤予定2」と「SF_出勤予定3」の各フォームを、上と同様に編集。  (使用するSQL文は、全て同じです) これで、グループ順・グループ内氏名順で並べ替えた状態で出勤予定が表示されるようになります。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

では、とりあえず今回の帳票フォーム型での対応法を説明します。 ・・・といっても、内容的には、レコードソースのSQLの変更と、表示フィールド(コントロール)の追加、ぐらいですが。 (なので、若干説明を端折ってます) まず、今回直接関係するテーブルの構成の確認から。 <テーブル> ・可否リスト:可否ID、可否 ・社員一覧:社員ID、社員名、グループ番号 ・出勤予定A:社員ID、月度、1日、2日・・・31日 ◎MF_出勤予定AAの作成: 1)新規フォームをデザインビューで開き、フォームヘッダに「対象月度」テキストボックスを設置 2)「MF_出勤予定AA」として保存(仮) 3)フォームのプロパティシートで、レコードソースに以下のSQL文を貼り付け: SELECT [社員一覧].[社員名], 出勤予定A.*, [社員一覧].[グループ番号] FROM 出勤予定A INNER JOIN 社員一覧 ON [出勤予定A].[社員ID]=[社員一覧].[社員ID] WHERE ((([出勤予定A].[月度])=[Forms]![MF_出勤予定AA]![対象月度])) ORDER BY [社員一覧].[グループ番号], [社員一覧].[社員名]; 4)以前と同様にして、「社員ID」コンボボックスと日付系コンボボックスを詳細領域に設置 5)「グループ番号」テキストボックスを詳細領域に設置(コントロールソース=グループ番号) 6)「対象月度」テキストボックスの更新後処理イベントに以下の文を貼り付け: Private Sub 対象月度_AfterUpdate() Requery End Sub 7)フォームのプロパティシートで、「既定のビュー」「削除の許可」「追加の許可」を前回と同様に設定 これで、「対象月度」を更新すると、その月の予定の一覧がグループ順・グループ内氏名順に並べて表示されるはずです。

すると、全ての回答が全文表示されます。
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

DexMachinaです。 前回の一部修正で対応する場合、方法は以下の通りです: (なお、既に「社員一覧」テーブルに「グループ番号」フィールドが追加されていることを前提としています) 1)「MF_出勤予定A」フォームをデザインビューで開く 2)フォームのプロパティシート・「データ」タブで、「レコードソース」に入力済みのSQLを削除(空欄化) 3)フォームヘッダに「対象グループ」テキストボックスを新設 4)「表示」コンボボックスの「クリック時」イベントプロシージャを以下の文に差し替え: Private Sub 表示_Click() If IsNull([対象月度]) = False And IsNull([対象グループ]) = False Then 表示更新 End Sub Private Sub 表示更新() RecordSource = "SELECT 出勤予定A.* FROM 社員一覧 INNER JOIN 出勤予定A ON [社員一覧].[社員ID]=[出勤予定A].[社員ID] WHERE ((([出勤予定A].[月度])=[Forms]![MF_出勤予定A]![対象月度]) And (([社員一覧].[グループ番号])=[Forms]![MF_出勤予定A]![対象グループ]));" DoCmd.GoToControl "社員ID" DoCmd.RunCommand acCmdSortAscending [30日].Visible = (対象月度 <> 2) [31日].Visible = (対象月度 = 1 Or 対象月度 = 3 Or 対象月度 = 5 Or 対象月度 = 7 Or 対象月度 = 8 Or 対象月度 = 10 Or 対象月度 = 12) End Sub これで、「対象月度」と「対象グループ」の各テキストボックスに値を入力して「表示」コマンドボタンをクリックすると、グループ内の社員の、指定月の出勤予定が表示されるようになります。 (どちらかのテキストボックスが空の状態で「表示」をクリックした場合は、画面を更新しないようにしてあります) ところで、No.1601818(データシート型サブフォーム仕様)で回答したものだと、また別の対応が必要になってしまいますが・・・(汗)

CELSIOR_2005
質問者

補足

DexMachina様 大変お世話になっております。 度々ありがとうございます。 グループ表示の件ですが私の説明が不十分だったみたいで申し訳ありません。 フォーム上・レポート上でのグループ表示は月の抽出とは違い、下記のように月を指定し表示させたら予め設定されているグループ順で表示されるようにしたいと思っております。(表示グループ順はユーザーが変更できなくて可) 1月 ----------------- A-○×?○×?○×?----グループC B-○×?○×?○×?----グループC C-○×?○×?○×?----グループC D-○×?○×?○×?----グループA E-○×?○×?○×?----グループA F-○×?○×?○×?----グループA G-○×?○×?○×?----グループB H-○×?○×?○×?----グループB I-○×?○×?○×?----グループB また、No.1601818(データシート型サブフォーム仕様)の件ですが、自分勝手で大変申し訳ありませんが対応の仕方のアドバイスを頂けたら幸いです。 (新規の質問の方がやりやすいようでしたら新規に質問を致します) お手数をお掛け致しますが宜しくお願い申し上げます。

すると、全ての回答が全文表示されます。
回答No.1

サンプルです。 図を利用していますが、ここの掲示板は図が思うように表現できないので、以下をメモ帳などにコピペして閲覧すると見やすくなります。 以下は「サンプル」なので、そちらの解決には至らないかもしれませんが、参考程度にはなると思います。ですので既存のプロジェクトに直ぐに組み込むのではなく、新規にmdbを作成し、そちらで手順を学ぶだけにしてください。 ------------------------------------------------------ ※1 テーブル作成 [テーブルタブにて] ------------------------------------------------------ (1)[グループマスタ]テーブル ・グループID(数値型[長整数]) 【KEY】 ・グループ名(テキスト型[サイズ適当に]) (2)[社員マスタ]テーブル ・社員ID(数値型[長整数]) 【KEY】 ・社員名(テキスト型[サイズ適当に]) ・グループID(数値型[長整数]) ------------------------------------------------------ ※2 データ作成 [テーブルタブにて] ------------------------------------------------------ (1)[グループマスタ]テーブルのデータ ┏グループマスタ┯━━━━━━━┓ ┃[グループID] │[グループ名] ┃ ┣━━━━━━━┿━━━━━━━┫ ┃11      │グループA  ┃ ┠───────┼───────┨ ┃12      │グループB  ┃ ┠───────┼───────┨ ┃13      │グループC  ┃ ┗━━━━━━━┷━━━━━━━┛ (2)[社員マスタ]テーブルのデータ ┏社員マスタ┯━━━━━┯━━━━━━━┓ ┃[社員ID] │[社員名] │[グループID] ┃ ┣━━━━━┿━━━━━┿━━━━━━━┫ ┃1001   │あい   │11      ┃ ┠─────┼─────┼───────┨ ┃1002   │うえお  │13      ┃ ┠─────┼─────┼───────┨ ┃1003   │くけこ  │12      ┃ ┠─────┼─────┼───────┨ ┃1004   │かき   │11      ┃ ┗━━━━━┷━━━━━┷━━━━━━━┛ ------------------------------------------------------ ※3 フォーム作成 [フォームタブにて] ------------------------------------------------------ [グループマスタ]フォーム作成方法 新規作成 ・オートフォーム:単票形式 ・基になるテーブル:グループマスタ さらにそれをデザインで開き直す ツールボックスより、【コントロールウィザード】が凹状態で、【サブフォーム/サブレポート】を選択し、フォーム内詳細部をドラッグする。するとサブフォームウィザードが開始される。 以下、サブフォームウィザードの手順 (1) 既存のテーブルまたはクエリを使用する(T) [次へ(N)]ボタン (2) テーブル/クエリ => 社員マスタ 選択可能なフィールドの全てを選択したフィールドへ追加 (社員ID/社員名/グループID) [次へ(N)]ボタン (3) [独自に設定する]を選択 ・フォーム/レポートのフィールド:グループID ・サブフォーム/サブレポートのフィールド:グループID [次へ(N)]ボタン (4) [完了(F)]ボタン ------------------------------------------------------ ※4 クエリ作成 [クエリタブにて] ------------------------------------------------------ 以下の文をSQLビューに張って、保存【クエリ名:QRY_グループ社員】 http://okweb.jp/kotaeru.php3?q=1545973 の #3にてSQLビュー表示手順 SELECT グループマスタ.グループID ,グループマスタ.グループ名 ,社員マスタ.社員ID ,社員マスタ.社員名 FROM グループマスタ LEFT JOIN 社員マスタ ON グループマスタ.グループID = 社員マスタ.グループID ------------------------------------------------------ ※5 レポート作成 [レポートタブにて] ------------------------------------------------------ ※3のフォーム作成同様に「レポート」/「サブレポート」の関係でも作成できますが、ここでは※4で作成したクエリをベースに作成する方法を載せます。 新規作成 ・オートフォーム:表形式 ・基になるテーブル:QRY_グループ社員 さらにそれをデザインで開き直す [表示(V)]→[並び替え/グループ化の設定(S)] 「並び替え/グループ化」ダイアログでの作業開始  (1)   フィールド/式:グループID   並び替え順序:昇順   グループヘッダ:はい  (2)   フィールド/式:社員ID   並び替え順序:昇順   グループヘッダ:いいえ 「並び替え/グループ化」ダイアログでの作業終了 (これにより、グループIDヘッダエリアが追加される) さらにもっとデザインで修正 ・詳細エリアのグループIDを、グループIDヘッダエリアに移動する ・好みによっては、グループIDヘッダエリアの[改ページ]プロパティを[カレント セクションの前]にすると、より一層いい感じになるかもしれません

CELSIOR_2005
質問者

お礼

大変ご丁寧にご説明ありがとうございます。 是非、参考にさせていただきます。

すると、全ての回答が全文表示されます。

関連するQ&A