『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

↑をアクセスで作成しています。今のところ、社員テーブル、作業場テーブル、部門テーブルなどを作ってあるのですが、肝心の出勤データはどう設計すればよいのかぜんぜんわかりません。月ごとに申告するものですが、年、月、日、さらに一日分の出社時刻、退社時刻、場所、その他いくつかの項目があり、複雑すぎてどうやればわかりません。もちろん社員分のデータ管理なので、一人分ではありません。かなりぱにくってます。どうぞおしえてください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんにちは。



具体的なやり方は、仕様書を見ないとなんとも言えませんが、
1.テーブルは、なるべく一番細かい段階のものを作る。(ここでは1日?)
2.ひとつのテーブルに詰め込まず、リレーショナルな概念を持たせる。(時間、場所、社員など・・・)
3.サマリー(年、月など・・・)は必要なときに抽出すれば十分。
のような感じで作ってみてください。

答えになってませんね・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

だいぶ返事が遅れました。すみません・・・。
taka451213さんが言われたとおり、テーブルは一番細かい段階のものにすることでなんとか一番困っていた点は解決できました。
テーブルも正規化することでスッキリしました。
ほんとに助かりました。ありがとうございます!

お礼日時:2004/11/05 13:29

マスタは出来つつあるので、今度は、データといったところでしょうか。


データ設計は、画面設計から入ったほうがいいかもしれませんね。

まず、何を管理するかを決めます。

質問文にあるように、
年、月、日
出社時刻
退社時刻
場所
以外ですよね。
・プロジェクト管理するのか
・個人によってシフトが変わるのか
・勤務区分(通常、有給、代休)は必要か

画面入力のイメージ図を考え、必要入力項目を決め、データ項目設計を考えます。
その上で、マスタ管理しなければいけない項目をマスタ化します。
たとえば、
プロジェクトコードマスタ
勤務区分マスタ




あと、過去のデータのどの項目を管理し続けるかによって、月次更新(月締め)の項目が変わってきますね。
    • good
    • 0
この回答へのお礼

返事がおくれてしまいもうしわけございません!
なんとかそれらしきものはできたのですが、
・プロジェクト管理するのか
・個人によってシフトが変わるのか
などといったような若干複雑な項目はまだまだ難しいようです。
これからやっていきたいと思います。
ありがとうございました。

お礼日時:2004/11/05 13:27

社員番号


作業場番号
日付
(以下時刻)
IN
OUT
外出1~3
戻り1~3
(以下時間)
時間内
時間外
深夜
休日
休日深夜

だいたいこの位でしょうかね~
時間の部分は一括計算させる処理で算出すればいいでしょう。

作業場が一日に複数箇所あり得るなら工夫が必要でしょう。
部門は社員の所属先と考えたので、出勤データにはいれてません。

頑張ってくださいヽ(^。^)ノ
    • good
    • 0
この回答へのお礼

返事がおそくなってすみません!
列挙していただいたフィールドがかなり参考になりました。ありがとうございました!

お礼日時:2004/11/05 13:25

社員番号、出社日付(年月日日時)、退社日付(年月日日時)、この三つのカラムを用意して


・一日ごとに行を作成する
・月ごとに社員番号でselectしたものを出力する
・その他の項目は、日ごとのものであれば同じテーブルに、そうでなければ別のテーブルを用意し、社員番号でselectする

社員番号で結びつけたクエリを作った方が良いかも知れません。

それとも、もっと複雑なのでしょうか。
    • good
    • 0
この回答へのお礼

遅くなってしまい、申し訳ありません。
「・一日ごとに行を作成する」というアドバイスにはっとしました。要は一番小さな単位でレコードをつくっちゃえばいいんですね。
やっと解せました、ありがとうございました☆

お礼日時:2004/11/05 13:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessでコードを入れると名前がでるようにしたい

Accessで顧客コードを入れると顧客マスタ通りの名前、住所TELがフォームに自動で出て、商品コードを入れると品物名が出るようにしたいのですが。
コードと商品名のはいったテーブルとフォームは作ったのですが・・・

Aベストアンサー

はじめの手順から書きます。

顧客コードと氏名・住所・TELが入ったテーブルを作ります。(顧客マスタの事)

>コードと商品名のはいったテーブルとフォームは作ったのですが・・・

と言うことですので、商品用のテーブルはできています。

もう1つ、テーブルとテーブルのリレーション(関連性)を設定しやすいように、

オートナンバーを設定した主キー用のフィールドと、
顧客コードと、商品コードを設定したテーブルを作ると良いでしょう。(以下Cテーブルと呼びます。)

あとは、テーブルのリレーション設定を行います。


リレーションシップボタンをクリックし、
テーブルをすべて表示させます。

次に、顧客用のテーブルから顧客コードをCテーブルの顧客コードへとドラッグし、参照整合性にチェックを入れます。
そして、作成をクリックします。

同様に、商品コードの入ったテーブルから、
Cテーブルへとドラッグし、参照整合性にチェックを入れます。そして作成をクリックします。

続いて、クエリの作成に移ります。
オブジェクトをクエリに変更します。

デザインビューでクエリを作成し、
テーブルの一覧を表示させます。

一覧から、まず
Cテーブルのオートナンバーを設定したフィールドを
ダブルクリックします。
次に、Cテーブルの顧客コードをダブルクリックします。
次に、顧客マスタに入っている名前・住所・TELの順にダブルクリックしていきます。

次に、Cテーブルの商品コードをダブルクリックします。
そして、商品名をダブルクリックして
必要なフィールドの設定が完了します。

クエリは、名前をつけて保存しましょう。
(以下では、Q顧客商品と呼びます。)

できた、Q顧客商品を
ウィザードを使用してフォームを作成するから
選択して、完了。

これで、コードを入れるだけで、
テーブルから名前・住所・TEL・商品名が
自動表示されるようになります。

文章で書き並べた感がありますので、
分かりにくければ、また、ご質問ください。では。

はじめの手順から書きます。

顧客コードと氏名・住所・TELが入ったテーブルを作ります。(顧客マスタの事)

>コードと商品名のはいったテーブルとフォームは作ったのですが・・・

と言うことですので、商品用のテーブルはできています。

もう1つ、テーブルとテーブルのリレーション(関連性)を設定しやすいように、

オートナンバーを設定した主キー用のフィールドと、
顧客コードと、商品コードを設定したテーブルを作ると良いでしょう。(以下Cテーブルと呼びます。)

あとは、テーブル...続きを読む

Q出勤表の作り方

社員・アルバイトの一週間分の出勤表を作りたいと思っているんですけど、その仕様というか、どういう風に作っていけばいいかさっぱりわかりません。
DBを用いてと考えているんですけど、そうなると日付の項目が無限に増えてしまうような気がしますし、どうしたらいいのでしょうか?DBを使わなくても出来るんでしょうか?
こういう仕様で作ればいいなど、ご教授お願いします。
当方PHP初心者です。

Aベストアンサー

日付と社員コードをキーにして、出社時間、退社時間、実労働時間を項目に定義するのが一般的です。

この様にすれば、1日1レコードのデータができあがり、無限に追加することが出来ます。バイトなどが増えた場合でも、社員コードを追加すればすみます。
職種によっては、仕事の内容をコード管理し、「日付、社員コード、仕事のコード」をキーにして実務時間を入力していけば、月ごとの集計が便利になります。

後は、工夫次第です。
ExcelやAccessで勉強するのも一考です。

QExcelまたはAccessで3パターンの勤務表を作成する

客先にて業務をしているのですが、勤務表が3パターン存在しております。
その3パターンですが…。
(1)自社勤務表→16日~翌15日までを記録する。
(2)客先勤務表1→16日~翌15日までを記録する。
(3)客先勤務表2→21日~翌20日までを記録する。
となってます。フォーマットも全て違います。

現在は、各フォーマットにいちいち入力している為、
すごく手間になっています。
計算式もそれぞれで違うので、かなり大変です。

これを一括でまとめてやる方法はないでしょうか?
以下の条件で、良い方法があれば教えて頂けたらと思います。
(かなり無理難題でしょうけど。。。)

【条件】
*毎日、出勤時間・退勤時間・休憩時間・備考欄の入力をする画面は1つに統一する。
*入力が出来たら、勤務表1~3に反映するようなボタンを用意する。
*勤務表1~3は、それぞれExcelで作成し、印刷が出来るようにする。
*入力した内容を修正した場合でも、勤務表1~3に反映されるようにしたい。
*勤務表1~3ごとで、且つそれぞれの月別で保存したい。(電子媒体としてメールで送信する為。)
*所属チーム内に6名いるので、6名それぞれで作成したい。

こんな無謀な条件は難しいでしょうけど。。。
AccessかExcelで作成する方法は無いものでしょうか?
どこかでサンプルまたは参考になるサイトがありましたら、それも合わせて教えて頂けると助かります。

どうか宜しくお願い致します。

客先にて業務をしているのですが、勤務表が3パターン存在しております。
その3パターンですが…。
(1)自社勤務表→16日~翌15日までを記録する。
(2)客先勤務表1→16日~翌15日までを記録する。
(3)客先勤務表2→21日~翌20日までを記録する。
となってます。フォーマットも全て違います。

現在は、各フォーマットにいちいち入力している為、
すごく手間になっています。
計算式もそれぞれで違うので、かなり大変です。

これを一括でまとめてやる方法はないでしょうか?
以下の条件で、良...続きを読む

Aベストアンサー

こんにちは。

いろいろと不明な点があるので、「自分だったらこうする」ということを
ポイントだけ書いておきます。


○環境はACCESS+VBAになると思います。

○テーブルには、毎日のデータを記録し、数ヶ月分(最低2ヶ月分)を蓄えておく。

○勤務表の出力時に、
  ・勤務表の種類
  ・出力年月
 を入力。

○勤務表の種類毎に、
  ・出力する期間を算出
  ・その期間の出勤データを抽出
  ・勤務表の種類毎のフォーマットで出力
   (レポート機能)


概要はこんな感じだと思います。

ただ、

>*勤務表1~3ごとで、且つそれぞれの月別で保存したい。(電子媒体としてメールで送信する為。)

の箇所が不明なので、無視しました。
(電子メールに添付できれば、どんなデータでも可?)


体裁にこだわらなければ、それほど難しくはないと思います。

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QAccessで時間外管理の作成について

Access2003で時間外労働時間の管理しようと思っています。

私のAccessのレベルは
「Microsoft Office Specialist Access2002」を取得していますが
実務では作成した事が無くペーパードライバーといった所です。
SQLやVBAは触り程度の理解しかありません。

現在Excel2003で管理している時間外労働時間の管理をAccess2003に移行しようと思っています。
【現在のExcelイメージ】
---------------------------
氏名コード | 氏名 | 2月分
-------------------------------------------------------------
日付 | 休日区分 | 平日(普通) | 平日(深夜) | 休日(普通) | 休日(深夜)
-------------------------------------------------------------
2/11 |   
2/12 | 休日 |
2/13 | 休日 |
 ~ |  
3/08 |  
3/09 | 休日 |
3/10 |  
-------------------------------------------------------------
合計

人別に毎月11日~翌月10日までの枠を設け
毎月50名分程度の表を作成しています。
尚、一部の部署はシフト制の為、休日区分を設ける必要があります。
シフトの状態を把握し易くし平日・休日の間違いを無くす為に
時間外あるなしに関わらず毎月11日~翌月10日までの全ての日に対し入力項目を用意したいです。

最終的には従業員毎の1ヶ月分の合計数字を一覧表で出したいのですがExcelでは出来ないような気がしてきました。。。
Accessならそういった集計も可能かなと思い作成してみようと思いました。
単純に時間外が発生した日だけを都度日付と共に入力していくならば簡単に作成出来たのですが、入力フォームを上記Excelのように1ヶ月分の日にち全てとなると行き詰ってしまいました。。。

説明不足等あるかもしれませんが
何か良いアドバイスありましたらお願い致します。m(_ _)m

Access2003で時間外労働時間の管理しようと思っています。

私のAccessのレベルは
「Microsoft Office Specialist Access2002」を取得していますが
実務では作成した事が無くペーパードライバーといった所です。
SQLやVBAは触り程度の理解しかありません。

現在Excel2003で管理している時間外労働時間の管理をAccess2003に移行しようと思っています。
【現在のExcelイメージ】
---------------------------
氏名コード | 氏名 | 2月分
------------------------------------------------------------...続きを読む

Aベストアンサー

私なりの回答を載せるかどうか昨日から迷っていたのですが。
(かなりの長文になります。MDBを渡す手段を知らないので)

このような長文回答の是非について、ご意見ください。
(今後の参考にさせていただきます)

(何らかの反応はしてください)


以下参考まで。(Access2000/2007では動いてます)
正式なやり方か、わかりません。
(1か月表示で、穴埋め的に入力:データは入力したものだけ格納)
(見栄えや詳細部分は割愛します:はっきりとした仕様がわからないので)
(「Microsoft Office Specialist Access2002」はどんなものかわかりません)
(理解と裏付けはしっかりと行ってください)

Access2000での手順になります。(2003でも同様かと)

Access を起動し、新規MDBを作ります。

以下の条件でサンプルをテーブル「T_社員」として取込みます。
pno(長整数:主キー),pcode/pname(テキスト)

"pno","pcode","pname"
1,"A0001","ああああ0001"
2,"B0001","いいいい0001"

以下の条件でサンプルをテーブル「T_時間外」として取込みます。
(このテーブルがメイン扱いになります)
pno(長整数),日付(日付/時刻),休日区分(テキスト),他は倍精度浮動小数点
主キーは自動設定

"pno","日付","休日区分","平日_普通","平日_深夜","休日_普通","休日_深夜"
1,2009/3/1,"休日",0.00,2.00,2.50,0.00
2,2009/3/4,"休日",2.50,0.00,0.00,0.00
1,2009/3/3,"休日",2.50,1.00,0.00,0.00
1,2009/3/13,"休日",1.50,2.00,0.00,0.00
1,2009/3/10,"休日",4.00,1.50,0.00,0.00
2,2009/3/15,"休日",3.50,1.00,0.00,0.00
2,2009/3/17,"休日",0.00,0.00,1.50,1.50

T_時間外ができたら、デザインで
休日区分のフィールドサイズを10くらいに変更
倍精度浮動小数点のフィールドの既定値を 0 に設定

以下の条件でテーブル「T_月日」を作成します。
フィールド1つのみで、名前「日」を日付/時刻型、主キーなし。

使用するテーブルは「T_社員」「T_時間外」「T_月日」の3つです。

以下の内容で、クエリ「Q_時間外」を作ります。(SQLビューで貼り付け)

SELECT T_月日.日, T1.休日区分, T1.平日_普通, T1.平日_深夜, T1.休日_普通, T1.休日_深夜, T1.pno, T1.日付
FROM T_月日 LEFT JOIN (SELECT * FROM T_時間外 WHERE T_時間外.pno = Nz([Forms]![F_時間外]![cbx01],0)) AS T1 ON T_月日.日 = T1.日付
ORDER BY T_月日.日;

以下の手順でフォーム「F_時間外」を作成します。
・ウィザードを使用してフォームを作成するから
・クエリ:Q_時間外のフィールドを全て選択
・表形式を選択
・フォーム名を「F_時間外」とし、フォームのデザイン編集

フォームのデザイン画面になるので、プロパティを表示させます。

フォームの以下プロパティを変更
「追加の許可」->「いいえ」
「レコードセット」->「ダイナセット (矛盾を許す)」

フォームヘッダ部分右側にある「pno」「日付」を削除

詳細部分
・右側にある「pno」「日付」を削除(もしくは、「可視」->「いいえ」)
・左側にある「日」のプロパティ
  「書式」->「m/d」に、「編集ロック」->「はい」へ

フォームヘッダ部分を縦方向に広げ、以下を追加。
・社員コード表示用テキストボックス「txt00」を作成
 プロパティで、「編集ロック」->「はい」
 (コンボボックスで社員を選択した時に表示するだけに使用)

・社員選択用コンボボックス「cbx01」を作成
 値集合ソースは以下

SELECT T_社員.pno, T_社員.pname, T_社員.pcode FROM T_社員 ORDER BY T_社員.pname;

 列数:3
 列幅:0cm;3cm;1.5cm
 連結列:1
 入力チェック:はい

・年月指定用テキストボックス「txt01」を作成
 プロパティで、「IME 入力モード」->「オフ」

必要なVBA部分を記述して行きます。
コンボボックス「cbx01」のクリック時をイベントプロシージャにし、「・・・」ボタンをクリックします。

Private Sub cbx01_Click()

End Sub

の部分を、以下に書き換えます。(貼り付けます)

つづく

私なりの回答を載せるかどうか昨日から迷っていたのですが。
(かなりの長文になります。MDBを渡す手段を知らないので)

このような長文回答の是非について、ご意見ください。
(今後の参考にさせていただきます)

(何らかの反応はしてください)


以下参考まで。(Access2000/2007では動いてます)
正式なやり方か、わかりません。
(1か月表示で、穴埋め的に入力:データは入力したものだけ格納)
(見栄えや詳細部分は割愛します:はっきりとした仕様がわからないので)
(「Microsoft Offic...続きを読む

QAccessの数値から時間に変換する時点で困っています。

Accessの数値から時間に変換する時点で困っています。
仕事の作業上にて、フォームの計算式にて5.25という数値が出ています。
それを5.25→05:15という時間の数字に変換したいのですが、方法がわかりません。
書式設定で可能なものなのか、それとも別のボックスに関数を使用した式をいれればできるのか……ぜひとも教えていただけるよう、よろしくお願い致します。

Aベストアンサー

私自身はAccess上で日付の演算をすることが殆ど
ないのですが・・・(汗)

> 5.25→05:15という時間の数字に変換したい

テキストボックスの書式などでやってみたところ、どうも
「5.25→5:25」とされてしまうです。

ですので、KIG_4さんご自身が考えたとおり、
> 別のボックスに関数を使用した式をいれ
て、対応するしかないと思います。
(同じ数値を、書式設定だけで「5:15」と「5:25」という
 異なる意味の数値に切り替えられるとは考えにくいので)

但し、関数による計算結果を表示する場合、
そのテキストボックスは編集不可(=表示専用)となって
しまいますので、ご注意下さい。

新規テキストボックスに設定する式としては、
 =Format(CDate([元のテキストボックス]/24), "hh:nn")
になります。

【式の説明】
日付/時刻関連の関数は「整数の1」=「1日」の扱いと
なります。
そのため、まず「5.25」を24で割って「1日(=24時間)の
何分の1に当たるのか」を算出します。
次に、CDate関数を使用して、Accessに、この演算結果
の小数を日付/時刻として認識させます。
最後に、Format関数で、「05:15」の書式で表示させて
います。
(「hh」で時間(Hour)を2桁表示、「nn」で分(miNute)も
 2桁表示、と指定)

※「分」が「m」ではないのは、通常、月(Month)の方に
 割り当てるためです。
 但し、今回の場合は「"hh:mm"」と指定しても、一応
 正しく「分」として表示されます。
 (「時」と「月」のみを組み合わせて扱うことは通常はない
  ので、その場合は「m」を分として扱うロジックが上記
  関数の内部に組み込まれているものと思います)

私自身はAccess上で日付の演算をすることが殆ど
ないのですが・・・(汗)

> 5.25→05:15という時間の数字に変換したい

テキストボックスの書式などでやってみたところ、どうも
「5.25→5:25」とされてしまうです。

ですので、KIG_4さんご自身が考えたとおり、
> 別のボックスに関数を使用した式をいれ
て、対応するしかないと思います。
(同じ数値を、書式設定だけで「5:15」と「5:25」という
 異なる意味の数値に切り替えられるとは考えにくいので)

但し、関数による計算結果を表示する場合、
そのテキストボ...続きを読む

QAccess2010で時間の計算方法

アルバイトの就業時間をアクセスで管理しております。

午前10:00~翌日朝6:00まで営業しております。
やりたいことは、夜22:00~翌朝の29:00(朝5時)までの時間を月ごとに集計をして
誰が深夜何時間働いているかを調べたいです。
22時から29時は時間給が高くなるのです。

タイムカードは、出社時と退社時に押します。(15分単位で切り捨てたいです。)

氏名   日付    出社  退社   調べたい時間
Aさん  10月10日 20:00~25:20  3時間15分
Bさん  10月10日 21:00~29:10  7時間
Aさん  10月11日 22:00~26:05  4時間
Bさん  10月13日 18:13~28:23  6時間15分
Aさん  10月14日 21:16~30:00  7時間

22:00~29:00までの時間を調べて、その月での集計をしたいです。

Aさん 14時間15分
Bさん 13時間15分

クエリの集計機能が使えるのかと思ったのですが、時間の計算ができませんでした。

説明不足な点も多々あるかと思いますが、ご教授頂けたら幸いです。
よろしくお願いいたします。

アルバイトの就業時間をアクセスで管理しております。

午前10:00~翌日朝6:00まで営業しております。
やりたいことは、夜22:00~翌朝の29:00(朝5時)までの時間を月ごとに集計をして
誰が深夜何時間働いているかを調べたいです。
22時から29時は時間給が高くなるのです。

タイムカードは、出社時と退社時に押します。(15分単位で切り捨てたいです。)

氏名   日付    出社  退社   調べたい時間
Aさん  10月10日 20:00~25:20  3時間15分
Bさん  10月10日 21:00~29:10  7時間
Aさん...続きを読む

Aベストアンサー

#3です

その後、いろいろと検証等されていると思います。
元テーブルが

氏名  日付    出社   退社
Aさん 2013/10/10 20:00:00 1:20:00
Cさん 2013/10/15  1:20:00 7:00:00
Dさん 2013/10/15  9:20:00 17:30:00

だった場合、

氏名  日付    出社   退社  時間
Aさん 2013/10/10 20:00:00 1:20:00 3.25
Cさん 2013/10/15  1:20:00 7:00:00 3.5
Dさん 2013/10/15  9:20:00 17:30:00 0
(1:20 + 2:00 = 3:20 の 15分単位切り捨て 3:15 → 3.25)
(5:00 - 1:20 = 3:40 の 15分単位切り捨て 3:30 → 3.5)

とするには、クエリの書き方を工夫すれば良いと思います。
例えば、

SELECT 氏名, 日付, 出社, 退社,
CalcNightTimes(日付+出社,日付+退社-(出社>退社)) AS 時間
FROM テーブル名;

出社>退社 なら1日加算する方法ですが、
出社>退社 の比較で True なら -1 になるので、
日付+退社-(出社>退社) で、結果1日加算される事になります。

#3では、出社・退社とも埋まっているものとして動くので、クエリ上で

SELECT 氏名, 日付, 出社, 退社,
CalcNightTimes(日付+出社,日付+退社-(出社>退社)) AS 時間
FROM テーブル名
WHERE 出社 Is Not Null AND 退社 Is Not Null;

と条件指定しても良いかも(元々 Null が無ければ不要ですが)
関数側で Null をはじく様に修正しても良いと思います。

※ 営業時間と勤務時間は違いますよね?


過剰情報になりますが、

TRANSFORM Sum(CalcNightTimes(日付+出社,日付+退社-(出社>退社))) AS 値
SELECT 氏名
FROM テーブル名
GROUP BY 氏名
PIVOT Format(日付,"yyyy/mm");

とすると、クロス集計で深夜時間合計が表示されます。



補足)#3での VBA 記述の説明をしておきます。

22:00 ~ 翌 5:00 ・・・・
これ、考えにくいので、与えられた dtS / dtE 共に 2:00 時間加算しておく事に・・・
これにより、深夜時間帯は 0:00 ~ 7:00 に偏らせる事が出来ます。

その細工をしておいて、
dtS / dtE が同じ日なら、
・ 0:00 ~ 7:00 に dtE が入っていたら、dtE - dtS が深夜時間
・ 0:00 ~ 7:00 に dtS が入っていたら、7:00 - dtS(時刻部分)が深夜時間
dtS / dtE が同じ日でなかったら、
・ 0:00 ~ 7:00 に dtS が入っていたら、7:00 - dtS(時刻部分)が朝方の深夜時間
・ dtE - Int(dtE) ・・・ 0:00 からの差を覚えておいて、それが、7:00 以上なら 7:00 に訂正
・ 上記、朝方と日付が変わった分を加算したものが深夜時間


※ 一見、#3で大丈夫そうに見えたりしますが、

    wdt = dtE - Int(dtE)

部分でおかしくなっていく事があります。その条件は、
dtS / dtE が同じ日でなかったら・・・・ の場合で、日付差が 1 を超えた場合・・・
つまり、#3のコードでは、日付差 = 1 を前提としてしています。

    dtR = dtR + wdt

この部分を ↓

    dtR = dtR + wdt
    dtR = dtR + (Int(dtE) - Int(dtS) - 1) * #7:00:00 AM#

とでも変更すれば良さそうです。
ただ、40 時間以上の連続勤務・・・・ どうなんですかね(必要なら修正するってことで)


氏名  日付    出社   退社
Aさん 2013/10/10 20:00:00 1:20:00
Cさん 2013/10/15  1:20:00 7:00:00

のデータで

SELECT 氏名, 日付, 出社, 退社,
CalcNightTimes(日付+出社,日付+退社-(出社>退社)) AS 時間
FROM テーブル名;

するのなら、日付差最大は 1 にしかならないので修正は不要と思います。

氏名    出社         退社
Aさん  2013/10/10 20:00:00  2013/10/11 1:20:00

という持ち方をした時に、考えればいいと思います。


※ と一部、ブログ過去記事の内容を転記してみました。

#3です

その後、いろいろと検証等されていると思います。
元テーブルが

氏名  日付    出社   退社
Aさん 2013/10/10 20:00:00 1:20:00
Cさん 2013/10/15  1:20:00 7:00:00
Dさん 2013/10/15  9:20:00 17:30:00

だった場合、

氏名  日付    出社   退社  時間
Aさん 2013/10/10 20:00:00 1:20:00 3.25
Cさん 2013/10/15  1:20:00 7:00:00 3.5
Dさん 2013/10/15  9:20:00 17:30:00 0
(1:20 + 2:00 = 3:20 の 15分単位切り捨て 3:15 → 3.25)
(5:00 - 1:20 = 3:40...続きを読む

QExcelかAccessで勤務予定表を作りたい

いつもお世話になります。Excel2000、Access2000を勉強中の初心者です。
次のような月間のパート勤務予定表をExcelかAccessでなるべく自動的に作成したいのですが、いいヒントがありましたらよろしくお願いします。

1.パートタイムの従業員がA,B,C,D,E,Fの6人いる。
2.出勤日は土日を除く平日のみである。
3.パート従業員は各人1ヶ月に15日出勤する。各人の出勤しない日は予め前月中に決定している。
4.仕事の担当は肉屋、魚屋、八百屋、レジの4種類である。
5.A,B,C,D,E,Fがひと月の間に4種類の担当をなるべく同じ日数となるようにしたい。

今は、手作業でカレンダーにまず各人の欠勤日を記入し、仕事の担当別にAとかBとか名前を入れていって全員がなるべくどの担当も同じ回数になるように作っています。結構時間がかかっていますので、少しでもパソコンで自動化できるところはないかと考えています。なんでも結構ですので、省力化できることがありましたらよろしくお願いします。

Aベストアンサー

リレーショナルデータベースにしなくてもいいなら、Excelのほうが簡単そうに思えます(って僕エクセルVBAぜんぜんわからないんですが)

次のようにしたらどうでしょう?

・横軸を 曜日と日にちに設定

・縦軸を 従業員氏名に設定

・横軸の最後には「肉」の回数、「魚」の回数、「八」の回数、「レ」の回数の合計値を自動計算できる列を作成。
(全部で4列で合計する)

表外に「肉」「魚」「八」「レ」と書いたセルを置く

日程表の値を入力したいところをダブルクリック
セルの位置を変数に入れる
「肉」にしたかったら表外の「肉」セルをダブルクリック
指定したセルに「肉」という文字が入る
同時にその従業員の「肉」回数合計列に回数が1つ加算される。


などです。

もしくは次のような形はどうでしょう?

・表外に「肉」「魚」「八」「レ」と書いたセルを横に配置
・例えば表外の「肉」セルをダブルクリック。
・そのセルの下に●印が付く。これで「肉」が選択された状態とみなす。「魚」をダブルクリックすると「肉」の下の●が消え「魚」下に移動するようにする。
・表外の「肉」セルが選択されている間は、表内でダブルクリックした場所に「肉」の文字が入り、「肉」の予定になる。
・「肉」のところをもう一回ダブルクリックすると「肉」が消え空白になる
・表内の「肉」セルが一個増えると右端の「肉」合計列の値も1個増え、「肉」セルが減れば合計列の値も1つ減るようにする。
・そうして「肉」の予定だけをどんどん入れていってしまう。

「魚」「八」「レ」も同じようにして、どんどん入れて行き、後はバランスをとる。

(休日も同じ要領で最初に入れておく)


これならユーザーフォームも使わなくて済みそうですし、それほど難しくないのではないでしょうか?
だめかな?

Accessでもフォームで似たようなことをすれば割と簡単にできるような気がします。

リレーショナルデータベースにしなくてもいいなら、Excelのほうが簡単そうに思えます(って僕エクセルVBAぜんぜんわからないんですが)

次のようにしたらどうでしょう?

・横軸を 曜日と日にちに設定

・縦軸を 従業員氏名に設定

・横軸の最後には「肉」の回数、「魚」の回数、「八」の回数、「レ」の回数の合計値を自動計算できる列を作成。
(全部で4列で合計する)

表外に「肉」「魚」「八」「レ」と書いたセルを置く

日程表の値を入力したいところをダブルクリック
セルの位置を変数に入れ...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qaccessの勉強ができるサイトは?

access初心者です。
データベースを作ろうとしているのですが、
基本がしっかりと身についていないので、
なかなか作れません。
本をみながら勉強してはいるのですが、
チュートリアル本ではないので、(田舎なので売ってない)
基本がよくわかりません。
お薦めのサイトがありましたら、教えてください。

Aベストアンサー

これなら、
魔法使いの開発工房が有名です!
非常に内容がしっかり出来ていて、これだけあれば充分な知識は身につけられます。

http://www.mahoutsukaino.com/

ちなみに、これで学習すれば本はいらないと思う。

参考URL:http://www.mahoutsukaino.com/


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング