Microsoft Access 掲示板

フォーム上の内容を担当者別で複数レコード登録する方法

26 コメント
views
4 フォロー

初めまして、困り眉と申します。
有識者の方々、どうぞお知恵をかしてください。

フォーム上で入力した内容を、フォーム内の担当者別で1件ずつレコードを登録したいのですが、
この場合はマクロで組むことは可能でしょうか?
フォームの担当者の枠はコンボボックスで計12枠作成しています。
フォームで入力したデータの登録先テーブルでは、担当者の枠は1枠です。

情報不足な点などございましたら、教えてください。
何卒宜しくお願い致します。

困り眉
作成: 2023/06/15 (木) 13:56:51
通報 ...
1

情報不足です。下記の情報を提示してください。

関係するテーブルの名前、フィールド構成、主キー設定を提示してください。

入力するフォームは連結フォームなのか非連結フォームなのか。連結フォームならどのテーブルと連結しているか。

入力するのはどのフィールドなのか(連結の場合)、どのようなデータなのか(非連結の場合)。

登録先のテーブル名、フィールド名。

できれば、それぞれのテーブルのデータ例を提示して、どのようなデータを入力して、どのように反映させるのか例示してもらえると的確な回答が得られやすいでしょう。

3
困り眉 2023/06/19 (月) 14:06:17 ad10d@5908c >> 1

返信遅くなりました。コメントありがとうございます!
情報不足で申し訳ありません。現在の各データは以下の通りです。

テーブル
M 業者情報
 企業ID(主キー) 会社名
M 従業員情報
 従業員ID(主キー) 氏名
M 工事長情報
 工事長ID(主キー) 氏名/作業番号
M 社用車情報
 社用車ID(主キー) 車名
M 業者担当班情報
 担当班ID(主キー) 班名
T 警備報告書DB(今回データを登録したいのはこのテーブルです。)
 伝票No(主キー) 日付 会社名(企業IDと連結) 工事名(工事長IDと連結)
 現場所在地 担当班(担当班IDと連結) 走行距離 始業時間 終了時間 実働時間
 担当警備員(従業員IDと連結) 車種(社用車IDと連結)

T 警備報告書DBのフォームを作成するとき、ウィザードで作成すると担当警備員と車種の枠は1枠にずつになってしまいます。この部分をできれば12枠に増やして、テーブルにデータを格納する際に警備員別でレコードが分かれるように登録したいのです。可能でしょうか?

2
hiroton 2023/06/15 (木) 14:40:52 4ba51@f966d

hatenaさん指摘のように詳細の見えない質問ではありますが、マクロなんか使わなくてもACCESSの基本設計で対応できる案件な気がしますね

サブフォームを含むフォーム (一対多のフォーム) を作成する

4
困り眉 2023/06/19 (月) 14:08:14 ad10d@5908c >> 2

コメントありがとうございます。
リンク先のサイトを拝見いたしましたがまだ作り方がよくわかっていません。
ウィザードから作成可能でしょうか?

5
hiroton 2023/06/19 (月) 14:44:47 81e39@f966d >> 2

多分サブフォームウィザードを使って作ることもできると思いますが、その前にデータベースに関する基本的な知識が必要なようです

T 警備報告書DB(今回データを登録したいのはこのテーブルです。)

警備員別でレコードが分かれるように登録

T 警備報告書DB伝票No主キーとなっています。「レコードが分かれるように」とはレコードを複数(人数分)登録したいということだと思っていますが、その場合伝票Noをどのように登録したいと思っていますか?

6
困り眉 2023/06/19 (月) 15:00:27 ad10d@5908c >> 5

知識不足ですみません。
おっしゃる通り、伝票Noは担当者分だけ同じものが複数登録されます。
伝票Noを主キーに設定しないほうがよさそうですね…

7

T 警備報告書DBのフォームを作成するとき、ウィザードで作成すると担当警備員と車種の枠は1枠にずつになってしまいます。この部分をできれば12枠に増やして、テーブルにデータを格納する際に警備員別でレコードが分かれるように登録したいのです。

担当警備員と車種は一対一で対応していますか。つまり担当警備員が1台の車を運転する。

あるいは、1台の車に複数の担当者が乗車する。

あるいは、特に担当者と車を関連付ける必要はない。

など、2つの関係性を説明してください。

8
困り眉 2023/06/19 (月) 15:14:05 ad10d@5908c >> 7

ご対応ありがとうございます。
担当警備員と車種は1対1になります。

9
hiroton 2023/06/19 (月) 15:31:15 81e39@f966d

なんとなくですけど、「本当にやりたいこと」が「質問に反映できていない」のだと思うんですよね

本題は「一つの警備案件に複数人が従事するから従事した人数分だけデータ登録したい」ということではないですか?

バックグラウンドがないので質問に真っ直ぐ答えようとしてそのままあらぬ方向に飛んで行ってしまっている気がします


フォームの担当者の枠はコンボボックスで計12枠作成しています。

常に12人固定で登録する必要があるのなら、担当警備員フィールドを増やせばいいでしょう。12枠なので「A~L」とか「1~12」とか「01~12」とか適当に添え字をつければいいです

これ、マクロを使わなければなんて思うようなことじゃないですよね?だとすれば・・・となるわけで

「一つの警備案件に複数人が従事するから従事した人数分だけデータ登録したい」

のだろうと思えば、これならよくある「伝票番号1つで複数商品登録できる注文書/請求書を作りたい」と同等の問題になります

10
hiroton 2023/06/19 (月) 15:37:41 81e39@f966d >> 9

もう少しひねった考えをするなら「とにかく12人分登録できればいいが、登録情報から登録したいのでコンボボックスを使いたい」のようなことは考えられます
レコード更新時にマクロ(VBA)でコンボボックスの内容を連結して登録してあげればいいですかね

ただ、このような想定は

フォーム内の担当者別で1件ずつレコードを登録したい

のイメージからかけ離れてしまうのでやはり、「やりたいことはこれではないだろう」となります

11
困り眉 2023/06/19 (月) 15:44:04 ad10d@5908c >> 9

おっしゃる通り、「一つの警備案件に複数人が従事するから従事した人数分だけデータ登録したい」ということで合っています。12枠作成しているのは、1つの警備案件で最大12人稼働する可能性があるためです。
このデータは、担当警備員別でデータを溜めて、最終的には個人別で給与計算等行うためのDBになります。なので、仕組みとしては「伝票番号1つで複数商品登録できる注文書/請求書を作りたい」と同じ形になると思います。

12
りんご 2023/06/19 (月) 16:48:53 935bc@0e907

 リレーションシップの画面のスクショを提示して下さい。リレーションシップの設定が出来なければ諦めましょう。
 その上で、操作画面のスクショを提示して下さい。別スレのようにならないために。

13
困り眉 2023/06/19 (月) 17:01:35 ad10d@5908c >> 12

ご指摘ありがとうございます。
リレーションシップは以下の通りです。画像1

14

まずは、データベース設計の基本である「正規化」というものについて学習しましょう。
「正規化」でWEB検索すると解説ページが山ほど見つかります。
突き詰めると結構深いので、とりあえずなんとなくでもいいので概要を理解するようにしましょう。
Accessに関するものだと、下記あたりを参考にするといいでしょう。

わかる!Access学習4 理解を深めるデータベースの正規化 | 簡単!!Access作成方法の紹介

アクセスデータベース設計の基本(正規化)

正規化 カテゴリーの記事一覧 - もう一度学ぶMS-Access


おっしゃる通り、「一つの警備案件に複数人が従事するから従事した人数分だけデータ登録したい」ということで合っています。12枠作成しているのは、1つの警備案件で最大12人稼働する可能性があるためです。
このデータは、担当警備員別でデータを溜めて、最終的には個人別で給与計算等行うためのDBになります。なので、仕組みとしては「伝票番号1つで複数商品登録できる注文書/請求書を作りたい」と同じ形になると思います。

「正規化」されていないと、「個人別で給与計算等行う」などの集計作業が非常に困難になります。
上記のリンク先などを参考に、とりあえず「正規化」にチャレンジしてみてください。

できたら、どのような形になったか報告してください。

正規化ができたら、リレーションシップの設定をします。
そうすれば、hirotonさんも提案されたメインサブフォーム形式のフォームがウィザードでも作成できます。

16
困り眉 2023/06/20 (火) 16:01:54 ad10d@5908c >> 14

ありがとうございます!
出来次第こちらでご報告いたします。

15
りんご 2023/06/19 (月) 19:33:11 935bc@0e907

>リレーションシップ
担当警備員ですが、XX業者付きの担当警備員、それとも、YY業者1班付きの担当警備員、それとも単なる工事現場の担当警備員、明示できますか?車種(社用車)も同様に明示できますか?

17
困り眉 2023/06/20 (火) 16:04:24 ad10d@5908c >> 15

担当警備員はたんなる工事現場の担当警備員になります。毎日つど担当警備員は変更するので、かちっと決まっているわけではありません。社用車も同様です。

18
りんご 2023/06/20 (火) 21:28:08 935bc@0e907 >> 17

 なるほど、工事現場と日付が決まると、担当警備員が決まったり、社用車が決まったりするのですね。
 毎日都度変更する可能性がある項目を集めた明細テーブルとかちっと決まっている項目を集めた見出しテーブル(時間軸に影響されない項目、会社名や工事名)を作って、例えば、親子関係のリレーションシップを結んでみるとかどうでしょう?正規化にチャレンジしてみて下さい。

19
困り眉 2023/06/21 (水) 18:00:12 ad10d@5908c

皆様、お世話になっております。困り眉です。
進捗をご報告いたします。
現在、正規化を行うために新しくT_担当警備員DBを作成しリレーションシップを見直してみました。
内容は以下の通りです。ご指摘いただけると嬉しいです!よろしくお願いいたします。

20
困り眉 2023/06/21 (水) 18:00:49 ad10d@5908c >> 19

画像1

21
りんご 2023/06/21 (水) 18:12:20 935bc@0e907

警備報告書見出しテーブル:
🔑{伝票No},会社名,工事名
警備報告書明細テーブル:
🔑{伝票明細No},伝票ID,日付,担当班,走行距離,高速道路、始業時間…,担当警備員,社用車

 こんなのを想定していたのですが、、、

23
困り眉 2023/06/27 (火) 09:46:24 ad10d@5908c >> 21

ご指摘ありがとうございます。
頂いた内容をもとにもう一度正規化をしてみます。
共通する項目とそうじゃない項目の分け方がちゃんと出来ていないので、
そこから見直します!ありがとうございます!

22
hatena 2023/06/22 (木) 14:15:08 修正

一応、20 の投稿のリレーションシップの設定で、
フォームウィザードでT_警備報告書DBとT_担当警備員DBから必要なフィールドを追加して、進めていけば、担当警備員データをサブフォームに複数登録できるメイン/サブフォーム形式のフォームは作成できると思います。わからなければ下記を参考にやってみてください。

Accessのフォームのメイン/サブフォームとは | できるネット


ただ、それでいいのかはちょっと疑問に思います。
そちらの業務実態が分からないので、あくまで一般的な想像からですが。

現場には複数の警備員、車両を配置するのだと思いますが、走行距離、始業時間、・・・実働時間は共通でいいのか。(現状は共通にしかできない。)

会社名というのが工事請負会社なら、会社名、現場所在地は、工事情報テーブルの方に入れた方がいいのでは。

あと、「班」というのが、どのようなものなのか。
警備員がものなのか。継続的なものなのか、工事現場やその日ごとに作成されるものなのか。

それらの状況や運用しだいでもっと効率的な設計がありそうな気もします。

24
困り眉 2023/06/27 (火) 09:50:25 ad10d@5908c >> 22

ご指摘ありがとうございます。
もう一度、共通する項目とそうじゃない項目を見直してみます。
参照リンクなどいろいろとお気遣い頂いて本当にありがとうございます。

班というのは、工事請負会社の依頼で仕事を受けた下請け業者のことです。
実際現場ではこの班の方々とお仕事をします。
なので、その日毎に代わっていく項目にはなります。

できればもっと効率的なDBを作って会社のお役に立ちたいです。
なので、なにか非効率的なところや修正したほうがいいと
感じたところなどあれば教えていただけると非常にうれしいです。
いつも本当にありがとうございます!

25

それぞれ会社毎に、特殊な運用実態があることなので、ここの掲示板では言葉だけでのやりとりでは実態を把握するのは困難です。
確実な設計をするとなると、そちらの現状、使用されている書類、運用実態の聞き取り、などの作業も必要になりますので、このような掲示板でのボランティアでの対応では難しいでしょう。

実際に業務運用している人が一番、業務内容を理解しているはずなので、紹介したリンク先を参考にまずはご自身で、設計してみて、その結果、うまく行かない部分、分からない部分が出てきたらピンポイントで質問されたら、具体的に回答が付きやすいと思います。

26
困り眉 2023/06/27 (火) 18:06:02 ad10d@5908c >> 25

ありがとうございます。
聞きたいことが正しくこの場で聞けるように、
再度運用を確認して設計をしてみます!