Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


639 / 2272 ツリー ←次へ | 前へ→

【10801】時間集計について まつ 08/11/27(木) 9:45 質問[未読]
【10804】Re:時間集計について neptune 08/11/27(木) 15:47 発言[未読]
【10809】Re:時間集計について まつ 08/11/28(金) 12:30 質問[未読]
【10812】Re:時間集計について neptune 08/11/28(金) 13:10 回答[未読]
【10813】Re:時間集計について まつ 08/11/28(金) 18:49 お礼[未読]
【10814】Re:時間集計について hatena 08/11/30(日) 23:50 回答[未読]
【10818】Re:時間集計について まつ 08/12/2(火) 9:50 発言[未読]
【10819】Re:時間集計について hatena 08/12/2(火) 10:21 回答[未読]
【10823】Re:時間集計について まつ 08/12/2(火) 15:19 発言[未読]
【10825】Re:時間集計について まつ 08/12/2(火) 15:27 発言[未読]

【10801】時間集計について
質問  まつ  - 08/11/27(木) 9:45 -

引用なし
パスワード
   時間の集計についてお聞きしたい事があります。
現在設備の稼動管理をアクセス2003を使って作ってますが。

一つのデータはロット毎に集計しています。
1ロットの[開始年月日][開始時間]、[終了年月日][終了時間]を入力してもらい
datediff("n",[開始年月日]+[開始時間],[終了年月日]+[終了時間])
で1ロットの生産時間を”分”で算出してます。

ここまでは良いのですが、これを月間での生産時間を算出しなくてはならなくなり
クエリで[開始年月日]の抽出条件を
Like "*/" & [Forms]![メニュー画面]![抽出月] & "/*"
とし、フォームのメニュー画面の抽出月のコンボボックスから1〜12の
どれかを選択するとその月のデータを抽出し、データで求めた分を合計
するようにしています。

しかしそのデータの中には、月をまたいで生産しているデータもあり
純粋にその月に生産した時間の算出はできません。
今思っているのが、[開始年月日]と[終了年月日]の月が違っている場合は
[終了年月日]の月を[開始年月日]の月の最終日にし、なお且つ[終了時間]を
23:59にしてやれば、算出出来るのではないかな?と考えています。

更に、その逆で2月分を集計するとして、1月30日〜2月2日まで生産した
データがある場合にもそのデータを月の境目で分割する必要があり
どうやったらいいのか分かりません。

アドバイスあればよろしくお願いします。

【10804】Re:時間集計について
発言  neptune  - 08/11/27(木) 15:47 -

引用なし
パスワード
   ▼まつ さん:

こんにちは

案だけで、しかももっと賢い方法がありそうですが、思い付いたものを。

開始年月日、開始時間、終了年月日、終了時間
の各フィールドが日付型というのが前提で。

(開始年月日 + 開始時間)の中に各月の始まりの日の0:01が入っているか
(終了年月日 + 終了時間)の中に各月の終わりの日の23:59が入っているか
を判断してはどうでしょう?

これがTrueなら、開始、終了若しくは両方がまたがっていると判断できますよね。
このクエリを作成しておき、そのクエリを元に更に、集計していくとか?

こういうことではないんですかね???

【10809】Re:時間集計について
質問  まつ  - 08/11/28(金) 12:30 -

引用なし
パスワード
   >(開始年月日 + 開始時間)の中に各月の始まりの日の0:01が入っているか
>(終了年月日 + 終了時間)の中に各月の終わりの日の23:59が入っているか
>を判断してはどうでしょう?

こんにちは。
例えば入力されているデータが
   [開始年月日]データが、2008/08/30
   [開始時間]データが、12:00
   [終了年月日]データが、2008/09/02
   [終了時間]データが、12:00
が入力されていた場合に
2008/09/01 と 00:01 が入ってるという判断はどうしたら良いのでしょうか?

【10812】Re:時間集計について
回答  neptune  - 08/11/28(金) 13:10 -

引用なし
パスワード
   ▼まつ さん:
こんにちは


>例えば入力されているデータが
>   [開始年月日]データが、2008/08/30
>   [開始時間]データが、12:00
>   [終了年月日]データが、2008/09/02
>   [終了時間]データが、12:00
>が入力されていた場合に
>2008/09/01 と 00:01 が入ってるという判断はどうしたら良いのでしょうか?
本当に↑のようなデータがDBの各フィールドに入っているとして話します。
これが表示はこうです。というだけの話なら下記の説明は根本的に違ってきます。
データ型は先に書いたように日付型の話です。

日付型データはdouble型の数値ですから足し算が出来ます。
「2008/08/30」は39690 、12:00は0.5です。

従って、
[開始年月日]+[開始時間]という演算は成立します。
([開始年月日]+[開始時間]) < (cdate("2008/09/01") + cdate("00:01"))
and
([終了年月日]+[終了時間]) > (cdate("2008/09/01") + cdate("00:01"))
が成立する場合
[開始年月日]+[開始時間]と[終了年月日]+[終了時間] が連続しているなら
その期間の中に2008/09/01 00:01 は含まれます。
(べた書き未検証なので間違ってたら勘弁ね)

クエリのデザインで出来ませんかね?

【10813】Re:時間集計について
お礼  まつ  - 08/11/28(金) 18:49 -

引用なし
パスワード
   >([開始年月日]+[開始時間]) < (cdate("2008/09/01") + cdate("00:01"))
>and
>([終了年月日]+[終了時間]) > (cdate("2008/09/01") + cdate("00:01"))
>が成立する場合
>[開始年月日]+[開始時間]と[終了年月日]+[終了時間] が連続しているなら
>その期間の中に2008/09/01 00:01 は含まれます。
>(べた書き未検証なので間違ってたら勘弁ね)
>
>クエリのデザインで出来ませんかね?

なるほど・・・
もちろん上記のデータは日付型での記入になっています。
日付型で入力されていると数値変換できるのですね、知りませんでした。
数値変換できるのならば、普通にIIf分を使って月をまたいでいるデータか
どうかを確認できるわけですね、参考になりました。

一度やり方を考えてみて、クエリの方で作ってみます。
ありがとうございました。

【10814】Re:時間集計について
回答  hatena  - 08/11/30(日) 23:50 -

引用なし
パスワード
   > ここまでは良いのですが、これを月間での生産時間を算出しなくてはならなくなり
> クエリで[開始年月日]の抽出条件を
> Like "*/" & [Forms]![メニュー画面]![抽出月] & "/*"
> とし、フォームのメニュー画面の抽出月のコンボボックスから1〜12の
> どれかを選択するとその月のデータを抽出し、データで求めた分を合計
> するようにしています。

抽出条件が
Like "*/" & [Forms]![メニュー画面]![抽出月] & "/*"
ということは複数年度を含むと言うことでしょうか。
抽出付きが11の場合は、2008年11月,2007年11月, ・・・
すべて含む集計を出したいということですか。
それはあまりないと思いますので今年度の指定月ということで
回答しますね。違ってましたらご指摘下さい。


テーブルより集計クエリを作成して、下記のように設計します。

フィールド ロットNo   生産時間: ※1   開始年月日  終了時間
集計    グループ化  合計       Where 条件  Where 条件
抽出条件                  ※2      ※3

※1 に設定する式
Sum(DateDiff("n",
IIf([開始年月日]<DateSerial(Year(Date()),[月?],1),
   DateSerial(Year(Date()),[月?],1),[開始年月日]+[開始時間]),
IIf([終了年月日]>=DateSerial(Year(Date()),[月?]+1,1),
   DateSerial(Year(Date()),[月?]+1,1),[終了年月日]+[終了時間])))

※2 に設定する式
<DateSerial(Year(Date()),[月?]+1,1)

※3 に設定する式
>=DateSerial(Year(Date()),[月?],1)

このクエリを開くと [月?] とパラメータを聞いてくるので
月を入力して、指定した月の合計が出てるか確認してください。

うまくいきましたら、[月?] の部分を、[Forms]![メニュー画面]![抽出月]
に書き直してください。

【10818】Re:時間集計について
発言  まつ  - 08/12/2(火) 9:50 -

引用なし
パスワード
   >このクエリを開くと [月?] とパラメータを聞いてくるので
>月を入力して、指定した月の合計が出てるか確認してください。
>
>うまくいきましたら、[月?] の部分を、[Forms]![メニュー画面]![抽出月]
>に書き直してください。

こんにちは。
指摘にもありましたが、年度はあいまいにしてますが、2008年なら2008年だけ
集計するようにしています。年度で1つのデータベースで管理するつもりです。

で、この関数を入力してビューを開くと

式(Sum(Sum(DateDiff("n",
IIf([開始年月日]<DateSerial(Year(Date()),[月?],1),
   DateSerial(Year(Date()),[月?],1),[開始年月日]+[開始時間]),
IIf([終了年月日]>=DateSerial(Year(Date()),[月?]+1,1),
   DateSerial(Year(Date()),[月?]+1,1),[終了年月日]+[終了時間])))))
で集計関数を使用することは出来ませんと、出てしまいます...
この関数の意味が分からないのでちょっと調べてみます。

【10819】Re:時間集計について
回答  hatena  - 08/12/2(火) 10:21 -

引用なし
パスワード
   >指摘にもありましたが、年度はあいまいにしてますが、2008年なら2008年だけ
>集計するようにしています。年度で1つのデータベースで管理するつもりです。

年度ごとにテーブルを分けると言うことでしょうか。
それは、しない方がいいと思います。
テーブルを分けてしまうと、いろいろ面倒です。
一つのテーブルにして、年度毎のデータが必用なときは、
クエリで抽出するというのがデータベース設計の基本です。

>式(Sum(Sum(DateDiff("n",
>IIf([開始年月日]<DateSerial(Year(Date()),[月?],1),
>   DateSerial(Year(Date()),[月?],1),[開始年月日]+[開始時間]),
>IIf([終了年月日]>=DateSerial(Year(Date()),[月?]+1,1),
>   DateSerial(Year(Date()),[月?]+1,1),[終了年月日]+[終了時間])))))
>で集計関数を使用することは出来ませんと、出てしまいます...

すみません。式に間違いがありました。Sumが余分でした。

※1 に設定する式
DateDiff("n",
IIf([開始年月日]<DateSerial(Year(Date()),[月?],1),
   DateSerial(Year(Date()),[月?],1),[開始年月日]+[開始時間]),
IIf([終了年月日]>=DateSerial(Year(Date()),[月?]+1,1),
   DateSerial(Year(Date()),[月?]+1,1),[終了年月日]+[終了時間]))

【10823】Re:時間集計について
発言  まつ  - 08/12/2(火) 15:19 -

引用なし
パスワード
   >年度ごとにテーブルを分けると言うことでしょうか。
>それは、しない方がいいと思います。
>テーブルを分けてしまうと、いろいろ面倒です。
>一つのテーブルにして、年度毎のデータが必用なときは、
>クエリで抽出するというのがデータベース設計の基本です。

年度毎にテーブルを分けると言う事ではなく、年度毎にアクセス本体を
その年用に作り直すって事です。
毎年同じアクセスでずっとデータを入れ続けてもいいのですが、年度で
完結するものであり、毎年新しいものにして保管しておくつもりで
管理するつもりです。

それと、新たにデータを入れたところ、確かに「月?」と聞かれる
のですが、同時に「開始年月日」も聞かれてきます。
適当なデータ入力したら、データは表示されませんでした・・・

何か不具合があるのでしょうか?度々すみません。

【10825】Re:時間集計について
発言  まつ  - 08/12/2(火) 15:27 -

引用なし
パスワード
   >それと、新たにデータを入れたところ、確かに「月?」と聞かれる
>のですが、同時に「開始年月日」も聞かれてきます。
>適当なデータ入力したら、データは表示されませんでした・・・
>
>何か不具合があるのでしょうか?度々すみません。

すみません、私の入力ミスでした「開始年月日」の所を「開始月日」と
入力が間違ってました。
それは解決して、月を聞かれた時にその月を入力すると
「-12000000」とか(数字は適当)マイナスでデータが出てきてしまいます。

入力した関数の内容を理解していないので、ちょっと分からない状態です・・・

639 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078198
(SS)C-BOARD v3.8 is Free