- ベストアンサー
Accessで1つのフィールドに複数の選択肢を設ける
Accessで、1つのフィールドで複数選択可能な選択肢を設ける方法はあるのでしょうか? たとえば、スタッフのシフトを表す「何時から何時」という項目を複数作りたいのです。 自分の想定しているものでは、チェックボックスで複数選択できるようにしたいと思っています。 テーブルでできなくても最終的にフォームで登録時に実現できればいいと思っています。 アドバイスをよろしくお願い申し上げます。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
#1 です。 勤務シフトというので てっきり ”1日間の時間 ”と思ってましたが ”年月日の期間 ”ですか それなら 少し工夫が要ります。 ”勤務(担当)期間 " 等のテーブルを造ります。 フィールドは [ ID ] 設定しなくてもOKですが ・・・ [担当者名] [開始日時] [終了日時] [ 登録日 ] 初期値 = Today() [ 修正日 ] 変更時に = Today() 後は各自の勤務期間を入力するだけです。 Aさん、Bさんが それぞれ期間を離れて 勤務する時も対応出来ます。 複数登録すれば良いのですから。 期間終了後有る程度に日にち後に 該当するレコードを削除すれば 管理も楽です。 私は これを使って 配属職人 と 下請け職人 合計30~50人 を何処の現場へ 派遣するるか を 現場の要望する期間に "空いてるか ?”を確認しもう一つは ”技能職種レベル ”も 個人フィールドにありますのでこれを検索参照しながら 予定を ”ガンチャート ”で表示して使ってます。 参考になれば幸いです。
その他の回答 (10)
- ISO96968
- ベストアンサー率42% (34/80)
再度・・#1です。 余談ですが ISO96968 は ”アイエスオー クルクルパー ”と読んで下さい。 ISO 関連 で苦労したので ・・・・ Access では 色々な関数が利用できます。 しかし 年度を跨ぐ連続した ”月 ”を 対象にするなら 少なくても ”年月 ”の文字は必要ですね。例えば ”2007-12 ”とか ”2008-03 ”とか・・・これらの文字列から 年度と 月を 日付に変換する関数は有りますが 扱うには 多少のテクニックが要ります。 詳しくは ヘルプ等で 確認して下さい。 汎用性を考慮すると ”日付型 ”でデーターを持つのが良いのですが。 文字列型 でも出来ない事は有りません。 文字列もPC内部では ”大きさ ”を比較してるのですから 簡単にご希望の ”3月 ”開始 ”5月 ”終了でも 動くとは思いますが・・・ 先に述べた様に 年度が替わることも考慮に入れないといけません。 また 入力形式は 一定でないと 思うようには結果が出ません。 ”3月 ”と ”5月 ”の様に全角と半角の比較をすると 結果は・・? 一度やってみて下さい。 後は Mounth 関数 Yea 関数 等を 使う手もありますが 詳細は ヘルプや 参考書で確認をしておいて下さい。 それでも旨く行かないときは ”どこで つまずいてるのか ”が解る様なご質問をされると 優秀なサポートを受けられると思います。 私も Access は勉強中です。お互いに 頑張りましょう。
補足
ありがとうございます。 Mounth→Month、Yea→Yearでよろしいですね? なるほど、データ量の比較という面では別にテキストでもかまわないわけですか・・・ 自分が登録したいのは「毎年期間が固定されているもの」なので、 またぐ場合は「11月から来年の2月」とだけ登録すればOKです。 それをどう理解させるかですね・・・ まあ1970年と1971年で登録して月だけを呼び出せばOKだと思います。 あとはフォームをどう構成するか、何と何をリレーションさせるかですね…
- ISO96968
- ベストアンサー率42% (34/80)
#1 です。 ご指摘ありがとうございます。 ガントチャートでしたね。 ながれとしては・・ 検索したい指定日が Aさんの 開始日と終了日の間にあるか? を調べればいいのです。 ガントチャートでは 開始日に ”< ”、期中には ”= ”、終了日には ”>”を 表中に表示しております。 >あと、「Aさんは4~6月と12月」とする場合は >4~6月と12~12月を違うレコードで登録すれば済むのでしょうか はい! なんどでも登録します。 それで行けるはずですが・・・ もう少しのようですね。頑張って下さい。
お礼
しばらく待ってみましたが最終的な回答が得られなかったため締め切ります。 あとは自分で何とか… ISO96968さんをはじめとする皆様、ありがとうございました。
補足
たびたびありがとうございます。もう少しで完成・・・だと思います。 自分としては簡単なデータベースなので、「○月」だけをテキストで登録しようとしていましたが、 期間という概念をデータベースに理解させるという面でも 日付/時刻型で○月1日~△月31日 のように登録したほうがいいのでしょうか。 (絞り込むなら○月1日で検索すればでますし) これでテーブル開発が完了すれば、あとは対象が登録されているテーブルとリレーションシップでつないでフォームを構成してあらかた完成です。
- Funatarou
- ベストアンサー率50% (4/8)
実際に管理されるデータはどのようなものでしょうか? シフトみたいに一日の間で、ある程度パターンが決まっているものなのか、 空室状況の照会のように年月日まで管理するものなのか。 業務内容について触れられないのであれば、ある程度類似した例で紹介していただければと思います。 年月日を管理するのであればISO96968さんがおっしゃるように開始と終了の両日付を持たせます。 検索条件は、 指定した日付が[開始日時]以上 かつ(AND) 指定した日付が[終了日時]以下 で指定すれば良いかと思われます。 具体的な式は、検索して調べてみてください
- ISO96968
- ベストアンサー率42% (34/80)
#1 です。 訂正します。 誤>”技能職種レベル ”も 個人フィールドにありますので 正>”技能職種レベル ”も 個人テーブル にありますので すんませんでした。
- Funatarou
- ベストアンサー率50% (4/8)
>具体的に意味がよくわからないのです・・・ 具体的に言うと下記のようになります。 わかり易くするため、あえて主キーとなるコードを一部省いてますが・・・ <従業員テーブル> 名前 年齢 住所 Aさん 20 ○○町~~ Bさん 27 ××市~~ Cさん 35 △△村~~ ・・・ <シフトテーブル> 名前 勤務コード Aさん パターン1 Aさん パターン2 Bさん パターン1 Cさん パターン1 Cさん パターン3 ・・・ <勤務パターンテーブル> 勤務コード 時間 パターン1 09:00~12:00 パターン2 12:00~15:00 パターン3 15:00~18:00 ・・・ 上記の場合、<従業員テーブル>一人に対して<シフトテーブル>で複数の勤務パターンが存在しています(1対多)。 一人当たりの勤務パターンが増えても減っても<シフトテーブル>のレコード追加/削除でメンテできます。 検索条件はシフトテーブルの勤務コードフィールドに対して条件を指定します。 例えば09:00~の従業員を抽出したい場合は条件をパターン1で検索すればいいわけです。 多分これがいわゆる教科書どおりの作りだと思われます。 「テーブルの正規化」で検索しましょう。 こんな感じの参考ページが見つかると思います。
補足
ありがとうございます。 なるほど、こうすれば確かに便利ですね・・・データ量も減りますし。 自分としては たとえば、「パターンAが3月~6月 Bが4月~10月だったとして5月に当てはまるものを探すことができる」ようにしたいと思っています。 そのためには「3月~6月に3,4,5,6月が含まれること」を理解させる必要があるので、相当難しくなってきますよね。(素人見解ですが) 自分が想定しているのは・・ 植物の名前、種植え~開花までの期間を登録した簡単なデータベースを作るとします。 ○○草 3月~9月 ○○花 10月~3月 △△草 2月~5月・8月~10月 のように複数の植物を登録していき、4月を検索して、当てはまる植物の一覧を参照できる形です。(登録されていないものは表示しない)
- Funatarou
- ベストアンサー率50% (4/8)
なるほど、意図はわかりました。 ただ、ANo3で書いたとおり、作りとしてはあまり良くないと思いますよ。 勤務パターンが変更になった時など何かとメンテナンスが不便になると思います。 一人で複数の勤務パターンを持つのであれば、1対多のテーブルで一人辺りの勤務パターンを複数レコードで管理した方が絶対いいです。 おっしゃる絞込み検索についても、こちらの方が実現しやすいはずですしね。 どうしても、テキストの連結にこだわるのであれば、 ・追加クエリに式を入れる。 ・VBでコントロールする。 などの方法になります。 これらはネットで調べればすぐわかると思いますが、その前にテーブルの正規化を調べたほうが、労力的にも楽ですよ。 是非、ご検討ください。
補足
ありがとうございます。 >> 一人で複数の勤務パターンを持つのであれば、1対多のテーブルで、一人辺りの勤務パターンを複数レコードで管理した方が絶対いいです。 具体的に意味がよくわからないのです・・・ テキストの連結にはこだわらない(印刷などするわけではない)ので… 要するに別テーブルに存在するパターンを全て登録してリレーションシップでつなぐということですか?
- toshichan7
- ベストアンサー率19% (21/106)
シフト時間のエリアが固定されてるなら、コード化するやり方もあるかも知れません。 例えば、5シフトあって、第2,3シフトを連勤した場合、 01100 とするとか。
- Funatarou
- ベストアンサー率50% (4/8)
質問者様の意図を理解できてなかったらごめんなさい。 1フィールドに対して[yes/no]型を複数選択は無理です。 フィールド型をテキスト型にした上で、フォーム上でチェックを付けた項目を連結/テキスト作成してテーブルに保存する。 と言うのは駄目なのでしょうか?(作りとしては良くない) 例↓ <フォーム> 名前:Aさん シフト:9:00~12:00にチェック、12:00~15:00にもチェック ボタンイベントの際に連結して↓ <レコード> Aさん 9:00~12:00,12:00~15:00 こういうことですか?違います? ちなみに、1フィールドに複数の[yes/no]型で選択するのは何か事情があるのですか? 通常はISO96968さんがおっしゃるように勤務パターンをコード化して勤務パターンテーブルとリレーションさせると思います。
補足
アドバイスいただきありがとうございます。 なるほど、やはりCHRONOS_0さんも仰せのとおりチェックボックス型は無理なのですね・・・ -----引用----- <フォーム> 名前:Aさん シフト:9:00~12:00にチェック、12:00~15:00にもチェック ボタンイベントの際に連結して↓ <レコード> Aさん 9:00~12:00,12:00~15:00 ------------ これは全くそのとおりです。自分は最終的にこれを求めています。 表を作ったりするだけだったら別々の項目でもいいのかもしれませんが、自分は「項目(ここではシフト)を対象に絞込み検索を行える」ことを想定しています。 例:「時間帯A、Bがオン」「時間帯Aがオンの中でBはオフ」を検索できる 正直自分はAccessに手をつけたばかりなもので、「コード化」や「ボタンイベント」などはまったくわかりません。 「コード化」とは、ここではパターンテーブルに全てのパターンを登録するということなのですか? 引き続きアドバイスをお待ちしております。
- CHRONOS_0
- ベストアンサー率54% (457/838)
できません 出来たとしてもそのようなものは非常に使いづらいものになるでしょうし 2つに分ければ済むだけの話ですから今後もサポートされることはないでしょうね
- ISO96968
- ベストアンサー率42% (34/80)
”シフト体系 ”と云う名前(他に適当な名前を付けて下さい)のテーブルを造ります。 そこに シフトID (オートナンバー) シフト名 ( Aシフト Bシフト 等 ) 時間帯 備考 のフィールドを作成してテーブルにデーターを入れます。 これを 勤務計画表 での 適用シフト 等のフィールドで コンボボックスで シフト名を選択して 登録する事で 実現できます。 詳しくは Access のヘルプに書かれて居ますが・・・・ 英語で造られた物を 日本語に直してますので こなれた日本文では ないので 慣れるまでは どんな意味? と思うことが 多いですが 丁寧に造られてますので 努力して 理解して 下さい。
補足
アドバイスいただき、ありがとうございます。 コンボボックスと書かれていますが、それでは1つの内容しか選択できないので自分の考えているものとは異なっています。 自分の説明不足だと思いますが、「シフト」は単純な例であって、「1フィールドの中で複数項目(Yes/No型)があり、複数の選択が可能」なのがが前提です。 例としてまたシフトを引っ張ってきますが、 「Aさんは9:00~12:00と12:00~15:00のシフトをまたいでいる」などのデータを登録したいのです。
補足
おお、ありがとうございます。 別に勤務シフトとかは例で期間は固定されているものなので(下の植物の例みたいに)登録日・修正日は必要ないとしてこれでいけそうです。 ただこう登録しても開始~終了までつながっている(3月~5月には3,4,5月が含まれている)ことを理解させるにはどうすればいいのでしょうか?(検索に使います。) あと、「Aさんは4~6月と12月」とする場合は 4~6月と12~12月を違うレコードで登録すれば済むのでしょうか。 とりあえず土台のようなものは見えてきたような気がします。 引き続きアドバイスなどお待ちしております。 #ガンチャートってガントチャートでいいんですよね?