• 締切済み

ACCESSでシフト予定表を制作しています。

今、アクセスでシフト予定表を制作していますが、 シフト表でシフトを繰り返し反映させることで手間取っております。 シフト区分としてA/B/Cがあって、 社員1・社員2・社員3と設定して、 社員1の初期シフトはA、社員2はB、社員3はCとしています。 これを日付で自動ローテーションさせたいのですが、アクセスで制作していて なかなかうまくいきません。 まだアクセスを使い出した初心者ですが、VBAでもかまいませんので、 どのようなやりかたがあるか、教えていただけないでしょうか? 3/3 社員1 A 3/3 社員2 B 3/3 社員3 C 3/4 社員1 C 3/4 社員2 A 3/4 社員3 B 3/5 社員1 B 3/5 社員2 C 3/5 社員3 A のように、日付ごとに社員のシフトがずれていく仕様です。 前回質問させて頂いたときに、ご回答いただきました方ありがとうございます。 イメージが伝わりづらかったので、下記に画像を張り付けてみました。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.12

No11で、 >リンク構造 ではなく、リスト構造でした。 Accessではポインタなどは使えませんから 配列を使って線形リストを処理するのと 似たようなことをします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.11

>日付で自動ローテーションさせたい と、ありますが質問からすでに4週間にもなるので 解決されたのでしょうか。もし解決されていなければ 必要なVBAコードを提示しますが、解決されているならば スルーしてください。 コードと必要な説明は少し長くなるかもしれませんので VBAコードが必要ならば補足してください。 このような課題は一般的にはC言語などでお馴染みの リンク構造を扱うアルゴリズムを考えればそれほど 難しいことではないのですが、レコードセットを 利用してAccessで表現しようとするとやっかいかも しれません。

回答No.10

以上をもって<シフト管理>作成の準備作業とします。ここまでの諸アイデアに問題がなければフォーム[シフト管理表]の設計に入りたいと思います。それが終わったらVBAコードへと進みたいと思います。 宜しくお願いします。

回答No.9

補足:エクセル風参照 添付図のような参照フォームは<エクセル風参照>のテストです。つまり、これを足がかりにすればエクセル風を完全再現することも夢ではありません。 【ソースコードは僅かに2行】 Option Compare Database Option Explicit Private Sub Form_Load() Me.シフトリスト_1.RowSource = DXSelect("SELECT 日付,休出勤,シフト区分 FROM シフト表参照 WHERE 氏名='従業員1'") Me.シフトリスト_2.RowSource = DXSelect("SELECT 日付,休出勤,シフト区分 FROM シフト表参照 WHERE 氏名='従業員2'") End Sub 私なら、DXSelect()の戻り値を一時テーブルに格納して参照・印刷します。それ以上に<エクセル風>に見せる努力はしません。また。クロス集計クエリなどで奮闘することもしません。しかし、そこはそれぞれの趣味と好みの問題。いずれにしろ、テーブル[シフト表]の設計と見せ方は別ということです。

回答No.8

表[シフト形態]とフォーム[従業員管理]の関係 データは、ユーザーが判りやすいように”;”でなく”⇒”でもOKです。

回答No.7

フォーム[従業員管理]について 第一案は、添付図の通りです。なお、レコードソースは次のようです。 SELECT * FROM 従業員 ORDER BY 参照順位; 【参照順位について】 列[参照順位]がないとシフト(管理)表の表示を制御できません。よって、同列を付加しました。 PS、シフト形態と実働時間は表[シフト形態]を参照しています。 ただし、当初のようにリンクはしていません。リレーションシップは外しました。

回答No.6

【従業員テーブル】 添付図のように修正! 理由:この方が設定と参照とが楽だから・・・

回答No.5

シフト管理アプリケーションとテーブル設計 【シフト表】 ID・・・・・・・・1 日付・・・・・・・・2015/04/01 休出勤・・・・・・・1 従業員_ID・・・・1 シフト区分・・・・・A 実働時間_予定・・・6:00 実働時間_結果・・・6:00 ※列名のID、_は、実際は半角。 列[休出勤]は、0=休み、1=出勤とする。 列[シフト区分]は、テキスト型とする。 列[実働時間_予定]も書き込む。 【従業員】 ID・・・・・・・・1 名前・・・・・・・・鈴木一郎 シフト規則・・・・・1 適用シフト_ID・・1 ”シフト規則=1”の場合 A;B;C;⇒C;A;B;⇒B;C;A⇒A;B;C 【シフト形態】 ID・・・・・・・・1 形態・・・・・・・・A;B;C 実働時間・・・・・・6:00;6:00;6:00 列[形態]には、シフト呼称を適用する分だけ適用する順番通りに全て記述する。 列[実働時間]には、[形態]に対応してコロン(;)で区切って書き込む。 <<<確認>>> VBAコードは単なる手の問題だから作業に占める比重は10%以下です。肝心なのはテーブル設計です。そこで、先ず、それを確認したいと思います。 今回のテーマはテーブル[シフト表]の作成ですが、問題となるのは、従業員毎に適応するシフト形態のデータの持たせ方と参照方法。ユーザーが簡単に設定するには、先に示したやり方が一番かと思います。その参照ですが、 ? CutStr("A;B;C",";",1) A ? CutStr("A;b;C",";",2) B と、関数を利用すれば簡単です。また、Accessのコンボボックスやリストボックスのレコードソースに指定して参照することも可能です。 このような設計ですと、テーブル[シフト表]の作成は容易かと思います。 PS、エクセル風の表示は別の課題。 出来上がったテーブル[シフト表]をエクセル風に表示・印刷するのは、これは次のテーマ。そこは、問題にしないで、まずはテーブル設計に関しての打ち合わせを行いたいと思います。 宜しく!

回答No.4

実際に作成・テストしてからの回答になりますので少々お待ち下さい。

kn0607
質問者

お礼

ありがとうございます。お手間かけます。 よろしくお願いします。

回答No.3

>シフトが1日毎にずれていきません。 >日付ごとにシフトを入力するのではなく、 >マスターで登録したシフトがずれて繰り返すというのは無理でしょうか? それは、プログラミング次第かと思いますよ。ともかく、すべてのレコードをVBAで生成するわけですから・・・。

kn0607
質問者

お礼

ありがとうございます。 お礼が遅くなり申し訳ありません。 いろいろ試しているのですが、まだ実装できておりません。 また、お知恵をお借りできないでしょうか? 現在、テーブルをカレンダー(日付,曜日)・従業員マスタ(ID,氏名,シフトID)・シフトマスタ(シフトID,シフト区分,実働時間)の3つ作り、 1.各テーブルデータを取得 2.カレンダーテーブルでループ 3.社員をセット 4.シフト区分をセット 5.シフト区分の次回開始インデックスをセット 6.次のシフト区分をセットする際に次回開始インデックスからセットする というような動きのVBAにしたいのですが、可能でしょうか? VBAがまだ始めたばかりでコードが書けない為、 サンプルコードなどを教えていただけると助かります。 お願いばかりですみません。 よろしくお願いします。

関連するQ&A

  • シフト予定表を制作しています。アクセスで制作中

    今、アクセスでシフト予定表を制作していますが、 シフトの自動ローテーションで悩んでおります。 シフト区分としてA/B/Cがあって、 社員1・社員2・社員3と設定して、 社員1の初期シフトはA、社員2はB、社員3はCとしています。 これを日付で自動ローテーションさせたいのですが、アクセスで制作していて なかなかうまくいきません。 まだアクセスを使い出した初心者ですが、VBAでもかまいませんので、 やりかたがありました、教えてください。 3/3 社員1 A 3/3 社員2 B 3/3 社員3 C 3/4 社員1 C 3/4 社員2 A 3/4 社員3 B 3/5 社員1 B 3/5 社員2 C 3/5 社員3 A のように、日付ごとに社員のシフトがずれていく仕様です。

  • エクセルでシフト表作成をしたい

    30人規模のシフト表作成をエクセルでやっています。 月間シフトを作成して、日別シフトも作成しているんですが、これを同時にできないかな、という相談です。 例えば、月間シフトで10月14日にAさんが7時から16時まで、Bさんが10時から19時までのシフトだとすると、日別シフト表の方にAさんとBさんの勤務時間を棒線などで表示させて、各時間帯で人が多いとか少ないとかを視覚的に把握したいのです。 こういった事はエクセルVBAで可能でしょうか。 エクセルでなくても、こういうソフトがあるとかでも教えて頂けたら嬉しいですが、自宅PCだけでなく職場のPCでも使いたいので、可能ならVBAで自作をしたいです。

  • シフト表で曜日に対しある特定の文字を打つとセルの色を変えられますか?

    質問を見ていただきありがとうございます。 私は今、シフト表を作成しております。 現在悩んでいるのが、特定の曜日に個人の欄に特定の文字が入ると そのセルに色をつけられないかと試行錯誤しております。 表の作りとしては、 年と月を入れると表に日付と曜日が反映されるように、 A13に =DATE(B13,D3,1) 書式設定(ユーザー定義;d) 以下A列同様 B13に =A13 書式設定(ユーザー定義;ddd) 以下B列同様 という設定にしました。 表に打ち込むのはA番、B番、C番があるので、表にAやB、Cと文字を打ち込みたいと思っています。 ここで、シフト表のチェックを行いたいと思い、 Aさんは毎週水曜日と金曜日はA番は出勤できないので、もし間違ってAさんの水曜日や 金曜日に A と打ち込んでしまった時に、そのセルが塗りつぶし等の返しをできるようにならないか というところで行き詰ってしまいました。 このような事はできますでしょうか? お分かりの方いらっしゃいましたらよろしくお願いいたします。

  • Excelで シフト表作成中。(長文で

    Excelで、アルバイトのシフト表作りをしています。 あまり詳しくなくて、本を見たり このサイトで検索して作っていたのですが、 みなさんのお力を お借りできたらと思い、質問させていただきます。 今 作ってるのが、↓下のような シフト表なんですが、   A   B   C    D 1     2    3 ID       111   222 4 名前      梅   竹 5 1日  火   14   16 6 2日  水   16 7 3日  木       15 8 4日  金   14           この↑シートに それぞれの出勤時間を入力すると、 その入力した人だけを (別のシートの)その日付けの出勤表 (のセル)へ、自動的に データーが移るようにしたいと思っています。   A  B C D C 1 ID 2007年5月1日(火) 2 ( ) (     ) 3 ( ) (     ) うまく 説明出来ませんが すみません。 どなたか、アドバイスを よろしくお願いしたします。    

  • ACCESSでクロス表

    ACCESSで、以下のようなデータがあります。 会社 製品 担当 A社 A1 山田 A社 B1 田中 B社 C1 佐藤 B社 A1 中村 これを、クロス表のように    A1 B1 C1 A社 山田 田中 B社 中村    佐藤   というようにまとめたいのですが可能でしょうか。 各社とも製品に対する担当者は1名です。重複しません。 クロス集計では、カウントや合計になってしまうので、なかなかうまくいきません。 できれば、VBAを使わないほうがベストですが。 よろしくおねがいします。

  • 区分値を代入して表を更新→ファイル作成を自動化

    エクセル2010を使用しています。 VBA(マクロ)で以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 <前提> Sheet1に指示区分が6つ:B2~B7 ※A列は項目名 Sheet0に計算に用いる指標:B6~B140 ※6行目が項目名 Sheet2に指示区分からのデータが反映(区分とリンクを組み合わせた計算結果1):B4~AZ138 ※4行目は項目名 Sheet3に指示区分かたのデータが反映(区分とリンクを組み合わせた計算結果2):B4~AZ138 ※4行目は項目名 「Sheet1の区分のパターンを変更することでSheet2と3の内容が変わる」という仕組みがあるのですが、 1万を超える区分パターンが想定されるため、マクロやVBAを用いて 自動的に区分変更から反映データ(表)を取得したいと考えています。 Sheet4へ(A~F ※1行目は区分名)想定されるパターン区分の表を作成したので、 それを1行づつSheet1のB2~B7へ順に代入し、Sheet2と3を作成(表の更新)→別ファイルとして保存・・・ という仕組みは可能でしょうか。 ご教示いただけますと とても助かります。 よろしくお願い致します。

  • Excelで勤務表を作成しています(再)。

    (前回までの投稿において質問の意図が分かりづらかったため、質問文と添付図を一部修正の上、再投稿させて頂いております) Excelで勤務表を作成しています。添付図のように、設定シートには社員表と勤務区分の表を作成しており、勤務表シートには社員名と日付毎の勤務区分を入力できる様式です。 今回の目的は、1日毎の女性用勤務(F勤務)における特定の区分(A、A研、B、B研、C、C研)をカウントしたいというものです。 例では7人程度のものですが、実際は数十人規模になるため、カウントセルが必要になりました。 例えば、F勤務が適用されているのは小野寺、高橋、山田、小林で、1日においてA、A研、B、B研、C、C研が入力されているのは小野寺、山田、小林の3人なのでE9セルには3とカウントされるようにしたいです (2以下OKという表記は無視してください)。 つきましては、E9~G9セルにはどのような関数を組み合わせればこの仕組みができますでしょうか?なお、勤務表は印刷して配布する都合上、この体裁を崩さないでやりたいです。ただ、どうしても必要な部分があればご指摘下さい。 以前に教えて頂いたSUMPRODUCTや、COUNTIF等の組み合わせを考えてみたのですが発想が出てこずに困っております。お分かりの方ご教授下さい。よろしくお願い致します。

  • シフト管理表の作成でわからないことが・・・

    エクセルの関数やマクロはほぼ初心者で、わからないことだらけなので教えてください。 シフト管理表で、半月ごとのシフト表(作成用)で、日単位のシフト表(自動作成)が出来るようにしたいのです。 半月シフト      a     b    c     d     e  ・・・(人) 1/1 1~5        2~3        2~5 1/2 1~5   2~5        2~3 1/3 2~5   1~3  2~3 上記ように作成したら日単位で 1/3 b 1~3 l c 2~3 l a 2~5 l のように日単位で別シートに自動作成できるようにしたいのです。 (dとeは日単位には表示されずに、出勤者のみ時間が早い順に表示) フォーマットは決められており、現在手入力の為ミスが多く時間もかかり・・・ わかりにくかったらごめんなさい もしかしたら簡単かも?しれないけどまったくわからないのでお願いします。

  • 表1のカレンダーを参照して表2にあるデータを取り出す

    こんにちわ。 色々試行錯誤をやっているのですがどうもうまくいきません。 ご存知の方宜しく御願い致します。 【やりたい事】 表1にある日付を表2から探し、そのBのデータを表1のCに表示させる。 表1 A    B    C 1993/5/11 火 .←日付を表2から探しその日付のBの値を抜き出す 1993/5/12 水 . 1993/5/13 木 . 1993/5/14 金 . ※Aはカレンダー通り 表2 A         B 1993/5/11 171.288 1993/5/12 171.08 1993/5/13 170.7 1993/5/14 170.215 1993/5/15 170.826 1993/5/18 170.83 1993/5/19 .051 ※Aの日付はカレンダー通りではなく歯抜け日付

  • Excelで勤務シフト表を作りたいのですが、セルの設定方法がわかりませ

    Excelで勤務シフト表を作りたいのですが、セルの設定方法がわかりません。 シート1の「シフト表」に勤務場所A・B・Cを入力するだけで、自動的にシート2の 「配置メンバー」へ配置場所 対 人名の表が並べ替えられて出力されるようにするには、 どのセルにどのような関数を設定すればよいのでしょうか? マクロやVBAをなどを使わず、もっとも簡単にできる方法を教えてください。 (掲載画像は関数などを使わず、手作業で入力したものです。)

専門家に質問してみよう