Access初心者が社員明細フォームの作成方法について質問

このQ&Aのポイント
  • Accessを始めて3週間の初心者です。現在、社員の在籍中の職級推移を残すための社員明細フォームを作成しています。具体的には、TBL_職級期間一覧というテーブル内の複数レコードを表示するフォームです。フォームには社員No、開始日、終了日、職級名が表示されます。
  • フォーム作成にあたり、IDフィールドを振り、社員Noで絞り込みや昇順・降順で表示させる順番を可変させることを考えています。
  • しかし、DLOOKUPなどを試してみましたが、うまくいきません。アクセス初心者のため、ご教示いただけると幸いです。
回答を見る
  • ベストアンサー

フォーム内のテキストボックスに複数レコードを表示

いつも大変お世話なっております。Accessを始めて3週間の初心者です。 今、社員の在籍中の職級推移を残すための社員明細フォームを作成しています。 社員数数百名。 フォーム名:社員明細 テーブル名:TBL_職級期間一覧 テーブルには 以下のようなレコードが並んでいます。 IDはオートナンバー型を振っています。 年度が替わって、職級が変化すればレコードが追加されます。 (ID 586のように001234 さんのレコードが追加)  ID  社員No    開始     終了    職級名  1  001234  2004/04/01 2008/03/31   S3  2  001234  2008/04/01 2012/03/31   S2  3  001234  2012/04/01 2015/03/31   S1  4  005678  1998/04/01 2003/03/31   T6  5  005678  2003/04/01 2005/03/31   T5  6  005678  2005/04/01 2013/03/31   T4  7  005678  2013/04/01 2016/03/31   T3  ・  ・  ・ 586  001234  2015/04/01 2016/03/31   K5 これらを添付写真のようにフォームに表示させる方法がわかりません。 IDを振ったのは社員Noで絞り込み、昇順・降順で表示させる順番を 推移の新しい順、古い順に可変させられるのでは・・?と思ったので IDフィールドを付けました。 いろいろ検索し=DLOOKUPを使ったりと試してみましたが、よくわかり ませんでした。 何卒お力添えをお願い致します。

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

  • ベストアンサー
回答No.2

メインフォームのなかに表形式のサブフォームを埋め込むという設計するするといいでしょう。ウィザードで簡単にできます。 社員マスターテーブルはありますよね。 まず、リレーションシップの設定で、社員マスターテーブルと「TBL_職級期間一覧」を「社員No」同士で結合しておきます。(詳細は下記参照) リレーションシップの設定 - もう一度学ぶMS-Access http://www.accessdbstudy.net/entry/20140820/p1 次にフォームウィザードで、社員マスターテーブルから、「社員NO」フィールドを選択、 「TBL_職級期間一覧」からそれ以外のフィールドを選択して、「次へ」をクリックして、 「サブフォームがあるフォーム」のオプションを選択します。 あとは、ウィザードの指示通りに設定して「次へ」ボタンをクリックしていけばご希望のフォームが完成します。(詳細は下記参照) メイン・サブフォームの作り方 http://sun.ac.jp/prof/hemmi/DataBase/Form_Tsukurikata-MainSub.htm

vesper580109
質問者

お礼

hatena1989さん ご回答頂きありがとうございました。 サブフォームを使った方法の勉強になりました。 サブフォームを使うと、見た目が希望のとおりとはいきませんでしたが 結果は問題なく表示されましたので、ご教示頂いた方法で進めようと 思います。 助かりました。ありがとうございます。

その他の回答 (1)

  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

まず最初に社員番号を選択させるフォームを作成する。 フォームのソースにTBL_職級期間一覧を元にした社員Noだけのクエリーを指定すればテキストボックスじゃなくドロップダウンリストやリストボックスが使える。 次に職歴一覧のフォームを作成し、フォームのソースには直前のフォームで指定した社員Noからの抽出クエリーを指定。 あとは、明細にクエリーの各項目を指定。 ※ウィザードを使えば手間が省けるかもしれません。 表示させるだけなら各項目のプロパティで編集不可など適時指定してください。 ザッとですが、こんな感じです。 TBL_職級期間一覧から社員番号だけのクエリーを作ると、同じ番号が複数出てくることもありますが、その場合は「GROUP BY」を使って纏めさせましょう。 ※私は面倒くさい時はSQLで直接記述するもので(笑) 選択クエリーでは、抽出条件にフォームのテキストボックスなどを指定できます。 そうすると、入力したコードとか、ドロップダウンリストで選択された値で抽出させることが可能となります。 フォームから別のフォームを表示させる時はマクロを使用します。 VBAでコードを記述することも出来ますが、初心者には敷居が高いと思うのでマクロが良いでしょう。 私はAccess Version2.0でかなり踏み込んだところまで覚えたので、最新バージョンのことはよくわかりません。 基礎をバッチリ覚えていれば、最新バージョンでも異なるところを感じ取り、使いながら覚えられるので・・・

vesper580109
質問者

お礼

bardfishさん ご回答ありがとうございました。 なかなかわかりづらく、もっと勉強が必要と感じましたが、 社員番号でドロップダウンリストを作り、必要な社員番号分の 職級期間一覧を表示させることができました。 いろんなアイデアをお持ちなので、自分も引き出しをもっと 増やしていきたいと思います。 助かりました。ありがとうございました。

関連するQ&A

  • Access非連結フォームから複数レコード挿入

    お世話になっております。 Access2003を使用しております。 <テーブル ”商品マスターT”> code   shouhin =========================== 1    チョコ 2    ラムネ 3    ジュース 4    団子 5    ガム <フォーム "商品入力フォーム"(非連結・単票フォーム)>      商品コード       商品名 1行目 [非連結(テキスト0)] [=DLookUp("shouhin","商品マスターT","code=" & [テキスト0])] 2行目 [非連結(テキスト1)] [=DLookUp("shouhin","商品マスターT","code=" & [テキスト1])] 3行目 [非連結(テキスト2)] [=DLookUp("shouhin","商品マスターT","code=" & [テキスト2])] 4行目 [非連結(テキスト3)] [=DLookUp("shouhin","商品マスターT","code=" & [テキスト3])] 5行目 [非連結(テキスト4)] [=DLookUp("shouhin","商品マスターT","code=" & [テキスト4])]  商品コードを入力すると商品マスターTより商品名を引っ張ってきます。 <テーブル "履歴T"> code2   shouhin2 ==============================  データは空です 上記のものがあるときに商品入力フォームで入力した行数分だけ テーブル履歴Tにレコード追加したいのですが・・・ そういったことは可能でしょうか?非連結フォームから複数レコード追加は難しいでしょうか? 以上宜しくお願いします。

  • Accessのフォームで思った順番でレコードが表示されない

    こんにちは Accessのフォームで受注管理を作成しています。 メインフォームには ・伝票番号 ・顧客番号、顧客名 ・担当部署、担当者名 サブフォームに ・明細番号、商品ID、商品名、単価、個数、金額 としていますがフォームを開くと伝票番号順にレコードが並ぶのが希望なのですが顧客番号順に並びます。 例)希望 伝票No 1  顧客番号 001 ・・・・・ 伝票No 2  顧客番号 010 ・・・・・ 伝票No 3  顧客番号 009 ・・・・・ 伝票No 4  顧客番号 001 ・・・・・ 現状 伝票No 1  顧客番号 001 ・・・・・ 伝票No 4  顧客番号 001 ・・・・・ 伝票No 3  顧客番号 009 ・・・・・ 伝票No 2  顧客番号 010 ・・・・・ 伝票番号順にしたい場合どこを確認すればよいかご存知の方がおられましたらご教示いただけますようお願いいたします。

  • ACCESS フォーム設計

    ACCESS2003を使用して、基本情報と明細のテーブルとフォーム設計をしています。基本テーブルに担当者IDと氏名があり、明細テーブルにも担当者IDと氏名があります。明細のフォームで、担当者IDを入力したら、基本情報にある担当者名を自動表示し、明細テーブルに書き込みたいのですが、=DLookup("[氏名]", "[基本情報]", "[担当者ID] = " & Forms("明細")("[担当者ID]")) を指定しても、うまく動作しません。明細フォームの氏名のコントロールソースを空白にしても、テーブルとリンクしてもだめです。 又、明細の更新フォームとして、担当者IDを入力したら、該当レコードの内容を全て表示し、変更内容を入力後、同一主キーでUPDATEモードで書き込む方法も教えてください。

  • メインレコード1件に対する複数画像を、フォーム上で表示させるには

    Access2003で、画像の管理をしています。 現在、テーブルは1つ(t_名簿)だけで、[名簿ID][氏名][パス名]の項目があります。 フォーム上にイメージコントロールを配置して、入力されたパス名から、別フォルダに格納してある画像を表示させています。これは問題なくできました。 しかし画像が無限に増えていくので、現在の様に「1レコードにつき1枚の画像」ではなく、「1件のメインレコードに対し複数の画像」という風にしたいと思います。 t_名簿→[名簿ID][氏名] t_パス→[パスID][名簿ID][パス名] このようにテーブルを2つにし、サブフォームのあるメインフォームを作成しました。 このような状態で、フォーム上で複数の画像を表示させることは可能でしょうか? サブフォームに3件のパス名があれば、3枚の画像を表示させるといった風です。 イベントのコードをどのように書けばよいのか検討がつかないので、教えて頂ければと思います。 直接画像を埋め込むという方法も試しましたが、ファイルサイズが大きくなりすぎて快適に作業ができませんでした。 なので、パス名から画像を表示させたいと思っています。

  • フォームに新規レコードを入力できない

    アクセス2000 ウィンドウズ98 1.テーブル T_Master ID(主キー)、名前、住所 2.テーブル T_Detales ID(主キー)、基本ID、日付、金額 リレーション→T_MasterのID(主キー)=T_Detalesの基本ID(1対多) 結合プロパティ→2 フォーム(データシートビュウ) 名前  住所  日付  金額 山本  港区  3/19  3000 山本  港区  3/20  2000 山本  港区  3/22  4000 田中  新宿  2/17  1000 田中  新宿  1/17  1200 田中  新宿  3/22  1500 石井  横浜  3/22  4000 という具合に表示されています。 さらにフォーム開くときにフィルターによって、 名前  住所  日付  金額 山本  港区  3/19  3000 田中  新宿  3/22  1500 石井  横浜  3/22  4000 という具合に3月中のデータのみ表示されるようにしています。 最後の行(石井)のあとに新しい顧客が発生したら、追加できるように作成するにはどうしたら作成できますか? 現在のところ、「石井」の後ろに新規顧客を入れようとすると、当然ながら "レコードが追加できません。テーブル'~'の結合キーがレコードセットにありません。" と表示されます。 IDフィールド(オートナンバー)を作っても見ましたが、同じエラーがでて、新規登録できませんでした。 T_Masterに顧客を新規に登録すると同時に、明細をT_detailesに書きこむ方法があれば、教えてください。

  • フォーム内で複数のレコードを表示

    アクセスで、表形式のサブフォーム(S_フォーム)を作成し、データを入力するとテーブル(T_明細)に追加されるようになっています。これをサブフォームのテキストボックスに入力するのではなく、別のクエリ(Q_クエリ)にあるデータを実行ボタンを押すことでサブフォームのテキストボックスに表示するようにし、テーブルのレコード(何件もある)を入力させていきたいと思っています。下記のようにコードをまず作成してみました。 Public Db As Database Public rs As Recordset Private Sub 実行_Click() Dim Temp_count As Integer Dim I As Integer Set Db = CurrentDb Set rs = Db.OpenRecordset("Q_クエリ", dbOpenDynaset) Temp_count = DCount("ID", "Q_クエリ") For I = 1 To Temp_count If IsNull(rs![氏名]) = False Then 氏名テキスト = rs![氏名] If IsNull(rs![住所]) = False Then 住所テキスト = rs![住所] rs.MoveNext Next I End Sub すると、ループした内容が全て同じテキストボックスに上書きされていき、結局1つのレコードしか追加できない状態です。入力操作でENTERしていくとサブフォーム内で複数のレコードが入力出来るように、出来ないでしょうか??良い記述があれば教えてください。お願い致します。

  • Accessフォームの新規レコードについて

    いつもお世話になっています。 Access2000でフォーム作成をしているときにちょっと詰まってしまいました。 クエリからフォームの作成を行うと、フォームの新規レコードの追加ができないんです! テーブルからフォームを作成する場合は新規レコードの追加は可能でした。 クエリがあるとどうしても新規レコードの追加ができなくなってしまいます。 クエリからフォームを作成して、新規レコードの追加を行えるようにすればどうしたらいいんでしょうか? よろしくお願いします。

  • Access フォームの表示順をなおしたい

    いつもお世話になっています。 Access フォームを利用していたのですが、テーブルの既存データを更新してから、そのフォームでのデータ表示順が変わってしまいました。 レコードにはIDとして番号データがあるので、小さい順にフォームに表示させたいと思います。 ちなみに、元となるテーブルはID番号が小さい順に並んでいます。 よろしくお願いします。

  • Access2007 「レコードを追加できません」

    Access2007で困っております。 フォーム上からテキスト型のデータを入力しようとしても 「レコードを追加できません、テーブル’T_アルバム’の結合キーがレコードセットにありません。」 と表示されうまく入りません。 【テーブル構成】 ★が主キー (1)T_アルバム ★アルバムID テキスト型 アルバム名 テキスト型 ジャンルID テキスト型 ソースID テキスト型 アーティストID テキスト型 (2)T_曲目 ★曲ID テキスト型 曲名 テキスト型 トラックNo テキスト型 アルバムID テキスト型 (3)MT_アーティスト ★アーティストID テキスト型 アーティスト名 テキスト型 (4)MT_ジャンル ★ジャンルID テキスト型 ジャンル名 テキスト型 (5)MT_ソース ★ソースID テキスト型 ソース名 テキスト型 【リレーション】 ※いずれも参照整合性付き (1)T_アルバム アルバムID --- (2)T_曲目 アルバムID (1)T_アルバム アーティストID --- (3)MT_アーティスト アーティストID (1)T_アルバム ジャンルID --- (4)MT_ジャンル ジャンルID (1)T_アルバム ソースID --- (5)MT_ソース ソースID フォーム作成のために「Q_アルバム情報入力」をつくりました。 アルバムID T_アルバム アルバム名 T_アルバム アーティストID MT_アーティスト アーティスト名 MT_アーティスト ジャンルID MT_ジャンル ジャンル名 MT_ジャンル ソースID MT_ソース ソース名 MT_ソース この「Q_アルバム情報入力」を使って、フォームウィザードからフォームを作成し、 アルバムIDやアルバム名を入力しようとすると 「レコードを追加できません、テーブル’T_アルバム’の結合キーがレコードセットにありません。」 と表示されます。 他のフィールドは値が入力できますが、これら2つのフィールドのみ入力できません。 なお、各テーブルのフィールドには予めデータが入っている状態です。 宜しくお願い致します。

  • レコードセレクタをクリックすると詳細フォームを表示

    このサイトに何度か、登校しています。eternallyと言います。 さて、質問の内容というのが、ACCESS2010のレコードセレクタについてです。 【Aテーブル】 ID  会社名  ソフト名  ソフトの説明 1   AAAAA BBBBB CCCCCCCC 2 DDDDD EEEEE FFFFFFFFF 3 GGGGG HHHGH IIJIIII 【Bテーブル】 ID 金 額  所有有無 1  50,000 X 2 35,000 ○ 3  70,000  × Aテーブルの内容をそのまま、フォームAとして帳票フォームで表示しています。 ここでフォームAのレコードセレクタをクリックすると、Bテーブルを関連付けた フォームBの内容を表示したいのです。 他のサイトで調べましたが、 同じテーブルをレコードセレクタで表示させる方法は見つかったのですが、 違うテーブルを表示させる方法がみつからなかったので、このサイトで聞いてみようと思いました。 Private Sub Form_Click() Forms!フォームA.Filter = "ID=" & Me!ID Forms!!フォーム.FilterOn = True End Sub 上はフォームAのレコードセレクタをクリックすると、 詳細フォームを表示する場合のVBAです。 フォームBの場合はエラーになって、動いてもくれません。 「フォームBが見つかりません。」というエラーです。 どうぞ、よろしくお願いします。

専門家に質問してみよう