• ベストアンサー

Accessで1つのフィールドに複数の選択肢を設ける

Accessで、1つのフィールドで複数選択可能な選択肢を設ける方法はあるのでしょうか? たとえば、スタッフのシフトを表す「何時から何時」という項目を複数作りたいのです。 自分の想定しているものでは、チェックボックスで複数選択できるようにしたいと思っています。 テーブルでできなくても最終的にフォームで登録時に実現できればいいと思っています。 アドバイスをよろしくお願い申し上げます。

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

  • ベストアンサー
  • ISO96968
  • ベストアンサー率42% (34/80)
回答No.7

#1 です。 勤務シフトというので てっきり ”1日間の時間 ”と思ってましたが ”年月日の期間 ”ですか それなら 少し工夫が要ります。 ”勤務(担当)期間 " 等のテーブルを造ります。 フィールドは [ ID ] 設定しなくてもOKですが ・・・        [担当者名]        [開始日時]        [終了日時]        [ 登録日 ] 初期値  = Today()        [ 修正日 ] 変更時に = Today() 後は各自の勤務期間を入力するだけです。 Aさん、Bさんが それぞれ期間を離れて 勤務する時も対応出来ます。 複数登録すれば良いのですから。 期間終了後有る程度に日にち後に 該当するレコードを削除すれば 管理も楽です。 私は これを使って 配属職人 と 下請け職人 合計30~50人 を何処の現場へ 派遣するるか を 現場の要望する期間に "空いてるか ?”を確認しもう一つは ”技能職種レベル ”も 個人フィールドにありますのでこれを検索参照しながら 予定を ”ガンチャート ”で表示して使ってます。 参考になれば幸いです。

flyngsword
質問者

補足

おお、ありがとうございます。 別に勤務シフトとかは例で期間は固定されているものなので(下の植物の例みたいに)登録日・修正日は必要ないとしてこれでいけそうです。 ただこう登録しても開始~終了までつながっている(3月~5月には3,4,5月が含まれている)ことを理解させるにはどうすればいいのでしょうか?(検索に使います。) あと、「Aさんは4~6月と12月」とする場合は 4~6月と12~12月を違うレコードで登録すれば済むのでしょうか。 とりあえず土台のようなものは見えてきたような気がします。 引き続きアドバイスなどお待ちしております。 #ガンチャートってガントチャートでいいんですよね?

その他の回答 (10)

  • ISO96968
  • ベストアンサー率42% (34/80)
回答No.11

再度・・#1です。 余談ですが ISO96968 は ”アイエスオー クルクルパー ”と読んで下さい。 ISO 関連 で苦労したので ・・・・ Access では 色々な関数が利用できます。 しかし 年度を跨ぐ連続した ”月 ”を 対象にするなら 少なくても ”年月 ”の文字は必要ですね。例えば ”2007-12 ”とか ”2008-03 ”とか・・・これらの文字列から 年度と 月を 日付に変換する関数は有りますが 扱うには 多少のテクニックが要ります。 詳しくは ヘルプ等で 確認して下さい。 汎用性を考慮すると ”日付型 ”でデーターを持つのが良いのですが。 文字列型 でも出来ない事は有りません。 文字列もPC内部では ”大きさ ”を比較してるのですから 簡単にご希望の ”3月 ”開始 ”5月 ”終了でも 動くとは思いますが・・・ 先に述べた様に 年度が替わることも考慮に入れないといけません。 また 入力形式は 一定でないと 思うようには結果が出ません。  ”3月 ”と ”5月 ”の様に全角と半角の比較をすると 結果は・・? 一度やってみて下さい。 後は Mounth 関数 Yea 関数 等を 使う手もありますが 詳細は ヘルプや 参考書で確認をしておいて下さい。 それでも旨く行かないときは ”どこで つまずいてるのか ”が解る様なご質問をされると 優秀なサポートを受けられると思います。 私も Access は勉強中です。お互いに 頑張りましょう。

flyngsword
質問者

補足

ありがとうございます。 Mounth→Month、Yea→Yearでよろしいですね? なるほど、データ量の比較という面では別にテキストでもかまわないわけですか・・・ 自分が登録したいのは「毎年期間が固定されているもの」なので、 またぐ場合は「11月から来年の2月」とだけ登録すればOKです。 それをどう理解させるかですね・・・ まあ1970年と1971年で登録して月だけを呼び出せばOKだと思います。 あとはフォームをどう構成するか、何と何をリレーションさせるかですね…

  • ISO96968
  • ベストアンサー率42% (34/80)
回答No.10

#1 です。 ご指摘ありがとうございます。 ガントチャートでしたね。 ながれとしては・・ 検索したい指定日が Aさんの 開始日と終了日の間にあるか? を調べればいいのです。 ガントチャートでは 開始日に ”< ”、期中には ”= ”、終了日には ”>”を 表中に表示しております。 >あと、「Aさんは4~6月と12月」とする場合は >4~6月と12~12月を違うレコードで登録すれば済むのでしょうか はい! なんどでも登録します。 それで行けるはずですが・・・ もう少しのようですね。頑張って下さい。

flyngsword
質問者

お礼

しばらく待ってみましたが最終的な回答が得られなかったため締め切ります。 あとは自分で何とか… ISO96968さんをはじめとする皆様、ありがとうございました。

flyngsword
質問者

補足

たびたびありがとうございます。もう少しで完成・・・だと思います。 自分としては簡単なデータベースなので、「○月」だけをテキストで登録しようとしていましたが、 期間という概念をデータベースに理解させるという面でも 日付/時刻型で○月1日~△月31日 のように登録したほうがいいのでしょうか。 (絞り込むなら○月1日で検索すればでますし) これでテーブル開発が完了すれば、あとは対象が登録されているテーブルとリレーションシップでつないでフォームを構成してあらかた完成です。

回答No.9

実際に管理されるデータはどのようなものでしょうか? シフトみたいに一日の間で、ある程度パターンが決まっているものなのか、 空室状況の照会のように年月日まで管理するものなのか。 業務内容について触れられないのであれば、ある程度類似した例で紹介していただければと思います。 年月日を管理するのであればISO96968さんがおっしゃるように開始と終了の両日付を持たせます。 検索条件は、 指定した日付が[開始日時]以上  かつ(AND) 指定した日付が[終了日時]以下 で指定すれば良いかと思われます。 具体的な式は、検索して調べてみてください

  • ISO96968
  • ベストアンサー率42% (34/80)
回答No.8

#1 です。 訂正します。 誤>”技能職種レベル ”も 個人フィールドにありますので 正>”技能職種レベル ”も 個人テーブル にありますので すんませんでした。

回答No.6

>具体的に意味がよくわからないのです・・・ 具体的に言うと下記のようになります。 わかり易くするため、あえて主キーとなるコードを一部省いてますが・・・ <従業員テーブル> 名前   年齢  住所  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で検索すればいいわけです。 多分これがいわゆる教科書どおりの作りだと思われます。 「テーブルの正規化」で検索しましょう。 こんな感じの参考ページが見つかると思います。

flyngsword
質問者

補足

ありがとうございます。 なるほど、こうすれば確かに便利ですね・・・データ量も減りますし。 自分としては たとえば、「パターンAが3月~6月 Bが4月~10月だったとして5月に当てはまるものを探すことができる」ようにしたいと思っています。 そのためには「3月~6月に3,4,5,6月が含まれること」を理解させる必要があるので、相当難しくなってきますよね。(素人見解ですが) 自分が想定しているのは・・ 植物の名前、種植え~開花までの期間を登録した簡単なデータベースを作るとします。 ○○草 3月~9月 ○○花 10月~3月 △△草 2月~5月・8月~10月 のように複数の植物を登録していき、4月を検索して、当てはまる植物の一覧を参照できる形です。(登録されていないものは表示しない)

回答No.5

なるほど、意図はわかりました。 ただ、ANo3で書いたとおり、作りとしてはあまり良くないと思いますよ。 勤務パターンが変更になった時など何かとメンテナンスが不便になると思います。 一人で複数の勤務パターンを持つのであれば、1対多のテーブルで一人辺りの勤務パターンを複数レコードで管理した方が絶対いいです。 おっしゃる絞込み検索についても、こちらの方が実現しやすいはずですしね。 どうしても、テキストの連結にこだわるのであれば、 ・追加クエリに式を入れる。 ・VBでコントロールする。 などの方法になります。 これらはネットで調べればすぐわかると思いますが、その前にテーブルの正規化を調べたほうが、労力的にも楽ですよ。 是非、ご検討ください。

flyngsword
質問者

補足

ありがとうございます。 >> 一人で複数の勤務パターンを持つのであれば、1対多のテーブルで、一人辺りの勤務パターンを複数レコードで管理した方が絶対いいです。 具体的に意味がよくわからないのです・・・ テキストの連結にはこだわらない(印刷などするわけではない)ので… 要するに別テーブルに存在するパターンを全て登録してリレーションシップでつなぐということですか?

回答No.4

シフト時間のエリアが固定されてるなら、コード化するやり方もあるかも知れません。 例えば、5シフトあって、第2,3シフトを連勤した場合、 01100 とするとか。

回答No.3

質問者様の意図を理解できてなかったらごめんなさい。 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さんがおっしゃるように勤務パターンをコード化して勤務パターンテーブルとリレーションさせると思います。

flyngsword
質問者

補足

アドバイスいただきありがとうございます。 なるほど、やはり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)
回答No.2

できません 出来たとしてもそのようなものは非常に使いづらいものになるでしょうし 2つに分ければ済むだけの話ですから今後もサポートされることはないでしょうね

  • ISO96968
  • ベストアンサー率42% (34/80)
回答No.1

”シフト体系 ”と云う名前(他に適当な名前を付けて下さい)のテーブルを造ります。 そこに シフトID (オートナンバー)     シフト名 ( Aシフト Bシフト 等 )     時間帯     備考 のフィールドを作成してテーブルにデーターを入れます。 これを 勤務計画表 での 適用シフト 等のフィールドで コンボボックスで シフト名を選択して 登録する事で 実現できます。 詳しくは Access のヘルプに書かれて居ますが・・・・ 英語で造られた物を 日本語に直してますので こなれた日本文では ないので 慣れるまでは どんな意味? と思うことが 多いですが 丁寧に造られてますので 努力して 理解して 下さい。

flyngsword
質問者

補足

アドバイスいただき、ありがとうございます。 コンボボックスと書かれていますが、それでは1つの内容しか選択できないので自分の考えているものとは異なっています。 自分の説明不足だと思いますが、「シフト」は単純な例であって、「1フィールドの中で複数項目(Yes/No型)があり、複数の選択が可能」なのがが前提です。 例としてまたシフトを引っ張ってきますが、 「Aさんは9:00~12:00と12:00~15:00のシフトをまたいでいる」などのデータを登録したいのです。

関連するQ&A

  • Access コンボボックスの複数選択

    Access2007を勉強中の初心者です。 「空白のフォーム」から作成したコンボボックスで、複数選択が可能になるような設定はありませんか? テーブル項目の「ルックアップ」「複数の値を許可」を許したテーブルから作成したフォームでは、コンボボックスで複数の値を選択可能になりますが、「空白のフォーム」から作成した場合にはできないのでしょうか。 リストボックスではスペースをとってしまう為、コンボボックスで行いたいです。 言葉足らずな内容かもしれませんし、大変お手数をおかけしますが、よろしくお願いいたします。

  • 複数選択するとテーブルに反映されなくなります

    ソフトはACCESS2000です。 フォームでの入力で、リストボックスから複数選択できるようにしているのですが、そうすると、元のテーブルへ選択したデータが反映されません。 複数選択をしないにすれば、問題なく反映されます。 そもそも、複数選択で、1つのフィールドに反映させることはできないのでしょうか。 いや、そんなことない、できる、なら、どこをどうすれば良いでしょうか。 ※お礼は月曜以降になりますが、よろしくお願いいたします。

  • Access クエリの最大項目数

    教えてください。 開発環境はAccess97です。 複数テーブルを互いに結合し、一つの選択クエリー[A]を 作成した後、フォーム[B]に関連付けて[B]上のテキスト ボックスで[A]のデータを表示したいと思います。 (一つのテキストボックスは一つの項目を表示する) 選択クエリーのフィールド数は最大128個までしか 設定できないと思うのですが、 フォーム[B]に一度に300個程度のデータを表示するには どうすればよいのでしょうか? サブフォームを使用せずにこれを実現することは可能でしょうか?

  • Accessのフォームについて教えて下さい

    Access 2010のフォームについてお教え下さい。 テーブルにはテーブル名T1、フィールド「ID」、「Price」というテキストボックス。2フィールドがあります。 テーブルの各データは、 ID,Price 001,100 002,200 003,300 フォームにはにフォーム名F1、「cmb」というコンボボックスと、「price」というテキストボックスが配置されています。 「cmb」のデータは値集合ソースで、「SELECT T1.ID FROM T1;」と指定しています。 「cmb」で選択したデータのプライスを「Price」テキストボックスに表示したいと思います。 例えば、「001」を選択したら、「100」と表示されるようにしたいと思います。 色々調べているのですが、どうやってやるのかわかりません。どのように実現したらよろしいでしょうか? よろしくお願いいたします。

  • ACCESSフォームのリストボックスでレコードが選択できない

    ACCESS2000です。 フォームの左側に親テーブルのフィールド1の値を選択させるリストボックスがあり、そこで選択したレコードにリンクする子テーブルのレコードをフォームの右側にサブフォームで表示させたいのですが、リストボックスでレコードを選択できません(クリックしても反転しません)。でもレコード移動ボタンを押すと、リストボックス内の該当レコードがちゃんと反転し、右側のサブフォームにも正しく反映します。 リストボックスのプロパティはくまなく見ましたがそれらしい設定項目はみつかりませんでした。どこを直せばよいのでしょうか。

  • access チェックボックスを複数選択

    超初心者です。よろしくお願いします。VBAの知識もほとんどありません。 個人情報の趣味の選択をチェックする項目を作る前提で話します。 顧客テーブルの中に(氏名、住所、電話、趣味選択)があるとして、趣味選択と以下のT-趣味とはリレーションシップでつながれているとします。 テーブル:T-趣味 趣味ID  趣味     データ型:テキスト S-1    音楽 S-2    スポーツ S-3    読書 S-4    アウトドア S-5    旅行 としたとき、テーブルからテキストデータ(音楽、スポーツ、…)を抽出してチェックボックスを作ることは可能でしょうか。 またそれを複数選択して顧客テーブルの趣味選択のフィールドにデータ(ex:読書、旅行)を入力することは可能でしょうか。 よろしくお願いします。

  • アクセスのフォームに乗っけられるフィールドは216

    アクセスのフォームに乗っけられるフィールドは216個? アクセス2010で、テーブルのフィールドは250個近くあります。 そのテーブルを元に、単表フォームを作ろうとウィザードを立ち上げたのですが どうしても216個目で「フォームを作成できません」になります。 フィールド名がおかしいのかな?と、216個目のフィールド名を適当な文字に変えてみましたが やはりエラーになります。 ヘルプ等にこのような記載はあるのでしょうか? 探せませんでした。

  • Access97のフォーム(リストボックス)について

    Access97のフォームについてです。リストボックスで複数選択設定した場合,その選択項目をテーブルに反映させる方法を教えて下さい。

  • アクセスのフォームのデザインビューで新しい項目が、フィールドリストに表示されない。

    テーブルに新しい項目を追加しました。(チェックボックス)。 クリエの方にも追加しました。 しかし、フォームに追加しようと、フィールドリストを参照したところ、新しい項目が表示されてません。 どのようにしたら新しい項目が表示されますでしょうか? よろしくお願いします。

  • ACCESSの複数フィールドの検索

    私がしたい事はおそらくかなり初歩的なことと類推されますので、がっくりされないようにお願いします。 「報告書」のテーブルがあります。 その報告書のフィールドは 報告日 報告者氏名 A店の感想 B店の感想 C店の感想 となっていると考えてください。 このテーブルをもとに、表形式で一覧の出るフォームを作っており、この一覧のフォームフッターにテキストボックスがあります。 このテキストボックスに例えば「D商品」と入力してエンターを押すと「A店の感想 B店の感想 C店の感想」中に「D商品」が出てくるレコードすべてが抽出されるというようにしたいと思っています。 1つのフィールドでのやり方がとあるサイトにあったので、私は Private Sub テキスト28_AfterUpdate() Me.Filter = "A店の感想 like'*" & Me!テキスト28 & "*'" Me.FilterOn = True End Sub という式を作成しました。 これだと「A店の感想」フィールドにキーワードがあればヒットしますが、B店、C店にキーワードがあってもA店にキーワードが無ければ反応はありません。 これを3つのフィールドで出来るようにいくつか試してみましたがどれも失敗でした。 どのようにすれば、複数フィールドのキーワード検索・抽出が出来るのでしょうか。 私の取ったやり方に近いもの、別の全然違うやり方、ともに勉強になるので色々教えてください。 それと、これでも結構検索したのですが、検索ワードが不適切なのか、ありそうなニーズにも関わらずぴったりくるものを見つけられませんでした。 もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。

専門家に質問してみよう