Access VBA質問箱 IV

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

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


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

【5902】集計について Seri 05/8/18(木) 13:33 質問[未読]
【5903】Re:集計について 小僧 05/8/18(木) 15:43 発言[未読]
【5904】Re:集計について Seri 05/8/18(木) 15:50 質問[未読]
【5907】Re:集計について 小僧 05/8/18(木) 16:23 回答[未読]
【5909】Re:集計について てっちゃん 05/8/18(木) 17:12 回答[未読]
【5911】Re:集計について 小僧 05/8/18(木) 17:43 発言[未読]
【5913】Re:集計について てっちゃん 05/8/18(木) 18:07 発言[未読]
【5956】Re:集計について Seri 05/8/22(月) 14:58 お礼[未読]
【5982】Re:集計について Seri 05/8/23(火) 17:19 質問[未読]
【5983】Re:集計について Seri 05/8/23(火) 18:13 発言[未読]

【5902】集計について
質問  Seri  - 05/8/18(木) 13:33 -

引用なし
パスワード
   こんにちは。
以下のテーブルにあるデータを

鋳造機   日付     コード     品番     品名    目標数    実績数    
9    20050601  1336   1234  fffff   100    85
9    20050602  1336   1234  fffff   200   150    
10    20050602     0907   5678  AAAAA   100    90    
10    20050603     0907   5678  AAAAA   300   220    
10    20050604     0907   5678  AAAAA   100    85    
9    20050606     0906   8888  ddddd   100    90
9    20050607  1336   1234  fffff   200   160

下記の集計結果になるよう集計したいのですが
どのように集計すればよいのかわかりません。
わかる方がいましたら教えてください。
よろしくお願いします。

同じ製品を続けて生産した場合、続けて生産した分の目標数、実績数の合計を
求めるようにしたいのですができるでしょうか?
また、集計後の日付は生産を開始した日付を使いたいです。

**************************集計結果***************************

鋳造機   日付     コード     品番     品名    目標数    実績数
9    20050601  1336   1234  fffff   300   235
10    20050602  0907   5678  AAAAA   500   395
9    20050606  0906   8888  ddddd   100    90
9    20050607  1336   1234  fffff   200   160

【5903】Re:集計について
発言  小僧  - 05/8/18(木) 15:43 -

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

>同じ製品を続けて生産した場合、続けて生産した分の目標数、実績数の合計を
>求めるようにしたいのですができるでしょうか?

と言う事ですが、このままですと残念ながらできません。

Microsoft サポートページより MDB のレコードの並び順について
http://support.microsoft.com/default.aspx?scid=kb;ja;834927

Seri さん のお持ちのAccessで表示されているレコードは、
次に開いた時に同じ順番で表示されているとは限りません。

通常は順番が入れ替わる事などそうお目に掛かれませんが
ある時突然レコードの順番が入れ替わることがありえますので、

>続けて生産した分

というのをAccessに認識させるキーが必要となります。

テーブルに「1」「2」「3」…(1で始まる必要はありませんが)のようなフィールドがあれば、
そのフィールドでソートすると意図した順番に並び替えられるので集計も可能になると思います。

【5904】Re:集計について
質問  Seri  - 05/8/18(木) 15:50 -

引用なし
パスワード
   ▼小僧 さん:

>Seri さん のお持ちのAccessで表示されているレコードは、
>次に開いた時に同じ順番で表示されているとは限りません。
>
>通常は順番が入れ替わる事などそうお目に掛かれませんが
>ある時突然レコードの順番が入れ替わることがありえますので、
>
>>続けて生産した分
>
>というのをAccessに認識させるキーが必要となります。
>
>テーブルに「1」「2」「3」…(1で始まる必要はありませんが)のようなフィールドがあれば、
>そのフィールドでソートすると意図した順番に並び替えられるので集計も可能になると思います。

テーブルのデータに入力されている日付で並び替えをすれば可能になりますか?

【5907】Re:集計について
回答  小僧  - 05/8/18(木) 16:23 -

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

>テーブルのデータに入力されている日付で並び替えをすれば可能になりますか?

可能だと思います。

>同じ製品を続けて生産した場合

という基準を明確にする必要があると思いますが…。
こちらとしては Seri さんの状況が解らないので

  ・20050601 に 鋳造機「9」と「10」で同じ製品が作られることはないのか。
  ・コード・品番・品名は一意なのか。
    (コードが決定したら品番と品名は決定されるのか。)
  ・鋳造機ごとに作られる製品は決まっているのか。

等…がはっきりとしておりません。

テーブルの形が

SEQ 鋳造機 日付  コード 品番  品名  目標数 実績数
1   9  20050601 1336  1234 fffff  100   85
1   9  20050602 1336  1234 fffff  200   150
2  10  20050602  907  5678 AAAAA  100   90
2  10  20050603  907  5678 AAAAA  300   220
2  10  20050604  907  5678 AAAAA  100   85
3   9  20050606  906  8888 ddddd  100   90
4   9  20050607 1336  1234 fffff  200   160

こんな感じですと、

SELECT P.SEQ,
      Min(T_Test.日付) AS 日付の最小,
      T_Test.コード,
      T_Test.品番,
      T_Test.品名,
      P.目標数の合計,
      P.実績数の合計
FROM [
SELECT T_Test.SEQ,
      Sum(T_Test.目標数) AS 目標数の合計,
      Sum(T_Test.実績数) AS 実績数の合計
FROM T_Test
GROUP BY T_Test.SEQ
]. AS P
INNER JOIN T_Test ON P.SEQ = T_Test.SEQ
GROUP BY P.SEQ, T_Test.コード,
        T_Test.品番,
        T_Test.品名,
        P.目標数の合計,
        P.実績数の合計;

という SQL で一発で結果を表示できます。

【5909】Re:集計について
回答  てっちゃん  - 05/8/18(木) 17:12 -

引用なし
パスワード
   ▼Seri さん:
# 小僧さんの回答で解決となるかもしれませんが、せっかく作ったので...

自作関数で、日付をグループ化するコードを考えてみました。
まず、標準モジュールに、次のコードをコピペして下さい。
'--------------------------------------------------------------------------
Function fxGroupDate(ByVal myHIDUKE As Long, _
           ByVal myHINBAN As String) As Long
  Dim myDCnt   As Long   '前作業日の製造有無
  Dim myDmaxDay  As Long   '前作業日
  
  myDmaxDay = Nz(DMax("日付", "aaT_集計前", "日付<" & myHIDUKE), 0)
  myDCnt = DCount("*", "aaT_集計前", "日付=" & myDmaxDay & _
       " and 品番='" & myHINBAN & "'")
  
  Do Until myDCnt = 0   '連続生産時は遡る
    myHIDUKE = myDmaxDay
    myDmaxDay = Nz(DMax("日付", "aaT_集計前", "日付<" & myHIDUKE), 0)
    myDCnt = DCount("*", "aaT_集計前", "日付=" & myDmaxDay & _
         " and 品番='" & myHINBAN & "'")
  Loop
  
  fxGroupDate = myHIDUKE
  
End Function
'--------------------------------------------------------------------------
'日付は長整数型、品番はテキスト型、と想定してます。

次に以下のクエリーを作ります。
SELECT テーブル.鋳造機,
    fxGroupDate([テーブル]![日付],[テーブル]![品番]) AS 日付,
    テーブル.コード,
    テーブル.品番,
    テーブル.品名,
    Sum(テーブル.目標数) AS 目標数の合計,
    Sum(テーブル.実績数) AS 実績数の合計
FROM テーブル
GROUP BY テーブル.鋳造機,
     fxGroupDate([テーブル]![日付],[テーブル]![品番]),
     テーブル.コード,
     テーブル.品番,
     テーブル.品名
ORDER BY fxGroupDate([テーブル]![日付],[テーブル]![品番]),
     テーブル.品番;


テーブル名を「テーブル」としています。適宜変更してください。

また、日付はデータから判断してますので、例えば、
鋳造機   日付  コード  品番  品名  目標数  実績数    
10    20050601  0907   5678  AAAAA   400   320    
10    20050615  0907   5678  AAAAA   500   580    
このようなデータからは、

鋳造機   日付  コード  品番  品名  目標数  実績数    
10    20050601  0907   5678  AAAAA   900   900   
このように集計されます。
(連続した日付ではなく、製造日から判断してます)

さらに、小僧さんがご指摘されてる
>  ・20050601 に 鋳造機「9」と「10」で同じ製品が作られることはないのか。
>  ・コード・品番・品名は一意なのか。
>    (コードが決定したら品番と品名は決定されるのか。)
>  ・鋳造機ごとに作られる製品は決まっているのか。
>
> 等…がはっきりとしておりません。
これらについても考慮しておりませんので、結果についてはよく確認して下さい。

参考になれば幸いです。

【5911】Re:集計について
発言  小僧  - 05/8/18(木) 17:43 -

引用なし
パスワード
   ▼Seri さん、てっちゃんさん:
こんにちは。

てっちゃんさんのユーザ関数、さっそく検証してみました(Ac2002 WinXP)。
SQL にあわせて「テーブル」というテーブル名にしたら、
モジュールの方で

>myDmaxDay = Nz(DMax("日付", "aaT_集計前", "日付<" & myHIDUKE), 0)

「aaT_集計前」が無いと言われました(笑)

と言う事で「テーブル」に置換を…。

後は綺麗に結果が返ってきました^^

【5913】Re:集計について
発言  てっちゃん  - 05/8/18(木) 18:07 -

引用なし
パスワード
   ▼小僧 さん、Seri さん

>「aaT_集計前」が無いと言われました(笑)
うぉっ!!
変な名前付けてると分かりにくくなるかなと思って、
変更したのが裏目に出ました。

>と言う事で「テーブル」に置換を…。
して下さい(汗)

サポートありがとうございます。

【5956】Re:集計について
お礼  Seri  - 05/8/22(月) 14:58 -

引用なし
パスワード
   ▼小僧さん、てっちゃん:

試してみたところ問題なく集計ができました。
ありがとうございました。とても助かりました。

【5982】Re:集計について
質問  Seri  - 05/8/23(火) 17:19 -

引用なし
パスワード
   ▼てっちゃん さん:
>さらに、小僧さんがご指摘されてる
>>  ・20050601 に 鋳造機「9」と「10」で同じ製品が作られることはないのか。

作られる場合があります。

>>  ・コード・品番・品名は一意なのか。
>>    (コードが決定したら品番と品名は決定されるのか。)

コードが決定すると品番、品名は決まります。

>>  ・鋳造機ごとに作られる製品は決まっているのか。

作られる製品は決まっていません。

>>
>> 等…がはっきりとしておりません。
>これらについても考慮しておりませんので、結果についてはよく確認して下さい。

テスト用に作ったデータでは問題なく集計が行われたと思ったのですが
同じ日に違う鋳造機で作ったものもまとめて集計されてしまいます。
いろいろ試したのですがうまく集計されません。
わかりましたらお願い致します。

【5983】Re:集計について
発言  Seri  - 05/8/23(火) 18:13 -

引用なし
パスワード
   無事集計できました。
いろいろとありがとうございました。

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