直近3か月及び6か月のデータ集計方法について

このQ&Aのポイント
  • 販売記録をテーブルに入力している状態で、直近6か月と直近3か月の販売金額の合計を同じ表に表現したいと考えています。
  • このようなデータ集計は可能ですか?可能であれば、どのような方法で行うことができますか?
  • ご回答いただければ幸いです。
回答を見る
  • ベストアンサー

Access 直近3か月及び6か月のデータ集計

早速ですが、皆様のお知恵を拝借したく投稿します。 販売記録をテーブルに入力している状態で(下記参照)、直近6か月の販売金額の合計と直近3か月の販売金額の合計を同じ表の中で表現したく思っています。 販売記録テーブル |販売月|品名|個数|単価|売上| |2014/6|AAA|  2| 100| 200| |2014/8|BBB|  1| 200| 200| |2014/9|CCC|  1| 200| 600| 上記データであれば以下のように表現させたいのです。 |直近3か月|直近6か月| |     800|    1000| このようなことは可能でしょうか? できるとすればどのような方法でできますでしょうか? よろしくご教示いただけますと幸いです。

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

  • ベストアンサー
回答No.1

これは、ちょっと苦労するでしょうね。問題は、MoveMonth()ですね。 Public Function MoveMonth(ByVal strMonth As String, _              ByVal intMove As Integer, _              Optional strFormat As String = "yyyy/mm") As String   Dim YYYY  As Long   Dim MM   As Long   Dim YYYYMM As String      YYYYMM = Format(strMonth, "yyyymm")   YYYY = Val(YYYYMM) / 100   MM = Val(YYYYMM) - YYYY * 100   MoveMonth = Format(DateSerial(YYYY, MM + intMove, 1), strFormat) End Function イミディエイトウインドウで確認してもらえればわかりますが、これで WHERE 節が書けるようになります。 SELECT   DSum("個数*単価","販売履歴",      "販売月 Between MoveMonth('2014/9', -2, 'yyyy/m') AND '2014/9'") AS 直近3か月,   DSum("個数*単価","販売履歴",      "販売月 Between MoveMonth('2014/9', -5, 'yyyy/m') AND '2014/9'") AS 直近6か月; SQL文は、このように書けば目的を達成できます。 PS、"2014/09"の埋め込みについて あくまでもサンプルということ。現実には、VBAなどで基準月を指示することになろうかと思います。

sousuke04
質問者

お礼

当方がまだAccessのVBAには明るくなく、おそらくコード丸写しになってしまうかもしれないという懸念はありますが、丁寧にサンプルまで作って教えて頂いてありがとうございました! 現状急ぎの作業ではないので、フォーマットの指定も考慮しつつお教えいただいた手法でやってみます!

その他の回答 (4)

回答No.5

【補足】日付型として・・・ 添付図のように日付型であれば、YYYY/M も YYYY/MM も同じ。 SELECT DSum("個数*単価",    "販売履歴",    "CDATE(販売月) Between #" & MoveMonth('2014/9',-2,'yyyy/m') & "# AND #2014/9#")    AS 直近3か月, DSum("個数*単価",    "販売履歴",    "CDATE(販売月) Between #" & MoveMonth('2014/9',-5,'yyyy/m') & "# AND #2014/9#") AS 直近6か月; あくまでも YYYY/M に拘るのであれば、[販売月]は日付型として扱うことをお勧めします。

sousuke04
質問者

お礼

当方がまだAccessのVBAには明るくなく、おそらくコード丸写しになってしまうかもしれないという懸念はありますが、丁寧にサンプルまで作って教えて頂いてありがとうございました! 現状急ぎの作業ではないので、フォーマットの指定も考慮しつつお教えいただいた手法でやってみます!

回答No.4

>yyyy/m では >'2014/10' < '2014/5' >ですから、期間が正しく判定できません。 これは、その通りですね。 まあ、多分、そうだろうと思って・・・。 Between MoveMonth('2014/9', -2, 'yyyy/m') AND '2014/9'")  ↓ Between MoveMonth('2014/9', -2) AND '2014/09'") とすれば、この不具合は回避できます。その為に、MoveMonth()関数は、"yyyy/m"、"yyyym"形式で受け取ろうともデフォルトで"yyyy/mm"形式で返すように仕組んでいます。

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.3

[販売月] の データ型 や 実際のデータの内容によって変わってきます。 テキスト型 で、サンプルのような記述であれば 下記のクエリで。 データ量が多ければ Where 条件 を付けて 絞ったほうが良いでしょう。 SELECT Sum(IIf([販売日] Between [三か月前] And [前月末],[売上],0)) AS 直近3か月, Sum(IIf([販売日] Between [六か月前] And [前月末],[売上],0)) AS 直近6か月 FROM ( SELECT 売上, IIf(IsDate([販売月] & "/1"), CDate([販売月] & "/1"),Null) AS 販売日, DateSerial(Year(Date()),Month(Date())-3,1) AS 三か月前, DateSerial(Year(Date()),Month(Date())-6,1) AS 六か月前, DateSerial(Year(Date()),Month(Date()),0) AS 前月末 FROM 販売記録テーブル ) AS Q; なお、[販売月] が、yyyy/mm (例 '2014/06') の形式なら No.1 さんの 回答のような方法でも動作します。 yyyy/m では '2014/10' < '2014/5' ですから、期間が正しく判定できません。

sousuke04
質問者

お礼

細部に至りお教えいただきありがとうございます。 データとしては例文と同程度の量なので、クエリも試させていただきます。 何分、まだAccessは初心者同然の為、お教えいただいたコードを理解していくことから始めたいと思います。

  • 007MUKADE
  • ベストアンサー率41% (286/694)
回答No.2

フォームに 最近3ヶ月集計のSubホームと       同上6ヶ月集計のSubホームと を挿入する  ってなことでは ダメすですか?

sousuke04
質問者

お礼

回答ありがとうございました! 何とも目から鱗が落ちるご回答でした。サブフォームを使うという発想が出てきませんでした…精進します。 サブフォームを作成しての見栄えも見てみます。ありがとうございました。

関連するQ&A

  • アクセス2003 各売上日の直近仕入額を知るには?

    いつもお世話になっています。 クエリを使って次のようなことがしたいのですが可能でしょうか? 下記のような2つのテーブルがあるとします。 <仕入記録> [仕入ID]  [仕入年月日]   [商品名]   [数量]   [単価]   1     2007/04/01     AAA    1    1,000   2     2007/04/03     BBB    1    2,000   3     2007/05/06     AAA    1    1,200   4     2007/05/15     CCC    1     800   5     2007/06/08     BBB    1    2,200   6     2007/06/20     CCC    1     900 <売上記録> [売上ID]   [売上年月日]   [商品名]   [数量]   1      2007/04/25    AAA      1   2      2007/05/08    AAA      1   3      2007/05/08    BBB      1   4      2007/06/10    AAA      1   5      2007/06/10    BBB      1   6      2007/06/10    CCC      1 この時2つのテーブルを使って販売した商品の原価(仕入単価)を求めるクエリを作りたいのですがどのようにしたらよいのでしょうか? 仕入単価は、各商品の売上年月日以前かつ最も売上年月日に近い仕入れ時の単価にしたいと考えています。 上記の場合、希望するクエリの結果は下記のような感じです。 [売上ID]   [売上年月日]   [商品名]   [仕入単価]   1      2007/04/25    AAA      1,000   2      2007/05/08    AAA      1,200   3      2007/05/08    BBB      2,000   4      2007/06/10    AAA      1,200   5      2007/06/10    BBB      2,200   6      2007/06/10    CCC       800 ご指導よろしくお願いします。

  • SQL文がわからない

    在庫テーブル・入庫テーブル・出庫テーブルがあります。 指定期間内の入庫テーブル・出庫テーブルの数量と在庫テーブルを結合させたいが、どうすればいいでしょうか? 2日ほど悩みましたがどうしても分かりませんでした。 よろしくお願いします <在庫テーブル> コード 個数 aaa   10 bbb   10 ccc   10 <入庫テーブル> コード 個数 日付 aaa   1  1/1 aaa   1  1/2 bbb   1  1/2 aaa   1  1/3 aaa   1  1/4 bbb   1  1/4 ccc   1  1/5 <出庫テーブル> コード 個数 日付 bbb   2  1/2 aaa   2  1/3 bbb   2  1/4 ccc   2  1/4 aaa   2  1/5 <結果(1/2~1/3)> コード 個数 入庫 出庫 aaa   10   2   2 bbb   10   1   4 ccc   10   0   2

    • ベストアンサー
    • MySQL
  • 【Excel】条件を満たすデータをまとめる

    Excel2003を使用しています。 《表1》 日付       コード  社名   受注番号  金額 2012/04/30   100   AAA   123-45   10000 2012/05/31   100   AAA   123-45   15000 2012/06/30   100   AAA   120-56   10000 2012/05/31   101   BBB   121-44   20000 2012/06/30   101   BBB   123-45   20000 2012/04/30   102   CCC   124-40   30000 2012/06/30   102   CCC   124-40   10000 2012/07/31   102   CCC   124-40   10000 《表1》で、コードと受注番号の両方が同じ場合、その金額を合計して1行にまとめ、《表2》のようにしたいです。 日付は新しいほうを残したいのですが、可能でしょうか? 《表2》 日付        コード  社名   受注番号  金額 2012/05/31    100   AAA   123-45   25000 2012/06/30    100   AAA   120-56   10000 2012/05/31    101   BBB   121-44   20000 2012/06/30    101   BBB   123-45   20000 2012/07/31    102   CCC   124-40   50000 《表2》の状態からさらに他のデータと比較して転記したく、最初はピボットテーブルを使用してみたのですが、使い慣れていないせいか、うまくいかず…。 できれば、VBAか関数で《表2》のようにしたいです。 よろしくお願いします。

  • Excel2002:複数条件のデータの個数の集計

    苦手な集計について質問させてください。 [A] [B] [1] AAA aaa [2] BBB bbb [3] AAA aaa [4] AAA bbb [5] BBB ccc 上記のようなデータで[A]と[B]のAND条件でみたときの個数を集計したいと思います。 例えば上記であれば、 [A]AAAかつ[B]aaa・・・2個 [A]BBBかつ[B]bbb・・・1個 [A]AAAかつ[B]bbb・・・1個 [A]BBBかつ[B]ccc・・・1個 になります。[B]のデータは[A]のデータに依存せず、[A]の各値にまたがっています。([B]bbbは[A]AAAと[A]BBBの場合があります) 実際のシートでは、全パターンを網羅したリストがA列とB列、集計対象がD列とE列にあります。 上記の例でいえば、以下のようになっています。 [A] [B] [C] [D] [E] [1] AAA aaa AAA aaa [2] AAA bbb BBB bbb [3] BBB bbb AAA aaa [4] BBB ccc AAA bbb [5] BBB ccc つまり[A]列と[B]列が組み合わせパターン、[D]列と[E]列が集計元データです。 ちなみにパターン数が414個、集計元データは29000個程度です。 そして最終的な各パターンの個数を[C]列に表示させたいと思います。 VLOOKUPやピボットテーブルを考えましたが、ピンと来ません。 適切なやり方を教えてください。よろしくお願いします。

  • Excelで簡単にデータ集計する方法

    お世話になります。 以下のような形式のCSVデータファイルがあります。  品名,個数,金額(=単価x個数) 例えば、  ミカン,1,80  ミカン,1,75  リンゴ,2,420  ミカン,2,140  リンゴ,10,1900 といった感じです。 これを集計して、品名毎に個数と金額の合計を得たいのですが、 Excelを使用して簡単にできる方法はございますでしょうか? 品名が少なければ、品名でソートして手作業で SUM()を設定するのですが、 今回、品名の種類が多すぎてとても手作業ではできない状況です。 どうぞよろしくお願いいたします。

  • SQLの集計について教えてください。

    環境はoracle9iです。 ■テーブルの構成 |年度|月|部署コード|商品コード|金額| ■テーブルの内容 |2010|01|AAA|001|1000| |2010|02|AAA|001|2000| |2010|01|AAA|001|3000| |2010|01|AAA|002|3000| |2010|02|BBB|003|4000| |2010|01|CCC|001|5000| |2010|03|CCC|001|6000| 上記のようなテーブルがあり、 これを年度,月,部署コード,商品コードでサマリした値を表示したいです。 と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 そこに年度,部署コード,商品コードでサマリした 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) ■抽出結果の構成 |年度|月|部署コード|商品コード|金額|累計金額| ■抽出結果の内容 |2010|01|AAA|001|4000|6000| |2010|02|AAA|001|2000|6000| |2010|02|BBB|003|4000|4000| |2010|01|CCC|001|5000|11000| |2010|03|CCC|001|6000|11000| GROUP BYと別の集計単位で列を作ることが可能か、 可能であればどのようなSQLを書くべきか、 というところを教えてください。

  • ACCESS2003同一小目の非表示・集計

    ACCESS初心者です。現在、解決方法に苦慮しています。ご教示いただけないでしょうか。 テーブル1                      テーブル2 AAA 東京都 20,000               AAA 足立区 501 BBB 東京都 25,000               AAA 江東区 300 CCC 東京都 36,000                BBB 新宿区 312 DDD 東京都 40,000               BBB 渋谷区 700 EEE 東京都 43,000               CCC 葛飾区 680 上記の様なテーブルがあったときテーブル1全件、テーブル2の一致したもののクエリを組んだ際に 以下となると思われます。 AAA 東京都 20,000  足立区 501 AAA 東京都 20,000  江東区 300 BBB 東京都 25,000  新宿区 312 BBB 東京都 25,000  渋谷区 700 CCC 東京都 36,000  葛飾区 680 DDD 東京都 40,000 EEE 東京都 43,000 最終的には印刷するのですがレポートのプロパティにて同一項目は印刷しない事は可能ですが 集計はされてしまうと思うのですがいかがでしょうか。 AAA 東京都 20,000  足立区 501              江東区 300 AAA 計   20,000  足立区 501             江東区 300                 上記のような結果を印刷したいのですが、方法が思いつきません。 簡単な方法等はあるのでしょうか。 宜しくお願いします。

  • ACCESSクロス集計クエリ

    accessクロス集計クエリで質問があります。 このようなテーブルがあります。(テーブル名:売上T) 売上年月,営業所,商品,数量,重量,売上金額 2013/08,東京,AAA,1,5,500 2013/07,名古屋,AAA,2,10,1000 2013/08,東京,BBB,3,30,900 2013/06,東京,CCC,4,50,4000 2013/05,大阪,AAA,5,25,2500 2013/08,東京,CCC,6,50,6000 2013/07,大阪,AAA,7,35,3500 2013/08,東京,AAA,8,40,4000 2013/06,名古屋,BBB,9,90,2700 2013/08,東京,AAA,10,50,5000 これをクロス集計クエリにて 営業所・商品をグループ化し売上年月毎で数量合計・重量合計・売上合計 と3つの表を作っているのですが 数量合計/重量合計/金額合計を同時に表示する事は可能でしょうか? やりたいこと 営業所・商品/2013/07,2013/07,2013/08 東京AAA/(数・重・売),(数・重・売),(数・重・売) 東京BBB/(数・重・売),(数・重・売),(数・重・売) 東京CCC/(数・重・売),(数・重・売),(数・重・売) 大阪AAA/(数・重・売),(数・重・売),(数・重・売) 大阪BBB/(数・重・売),(数・重・売),(数・重・売) 大阪CCC/(数・重・売),(数・重・売),(数・重・売) 名古屋AAA/(数・重・売),(数・重・売),(数・重・売) 名古屋BBB/(数・重・売),(数・重・売),(数・重・売) 名古屋CCC/(数・重・売),(数・重・売),(数・重・売) エクセルに吐き出しピボットとかではなく、ACCESSの中で完了させたく思っています。 ちなみにACCESS2003/WIN XPの環境です。 どなたかアドバイスいただければ幸いです。

  • アクセスで複数レコードを1レコードにできますか?

    アクセスで複数レコードを1レコードにできますか? お世話になります。 お教えください。 以下のようなレコード(テーブル)があります。 氏名 日付  金額 aaa 5/12 200 aaa 5/24 500 bbb 5/01 300 ccc 5/04 100 これを aaa 5/12 200 5/24 500 bbb 5/01 300 ccc 5/04 100 のようにデータを表示(クエリで)したいのですが どのようにしたらいいでしょうか?

  • Accessによる集計方法について

    Accessによる集計方法について kamuycikapです。 下記のデータベースを利用して集計作業を行うときの、クエリ作成方法についてご教示願います。 <やりたいこと> キーとなるコード別に数量を合計計算したい。 <データベース> |キー|数量| AAA 1 AAA 3 AAA 4 CCC 5 BBB 2 BBB 9 <求める結果> |キー|合計数量| AAA 8 BBB 11 CCC 5 上記条件でのクエリ作成について、識者様からのアドバイスをお願い致します。 マクロ等のサンプルはGoogle検索でひっかかりましたが、出来る限りクエリでカバーしたいと思いますし、クエリを使えば実現できるのではないかと思っています。 今も、Access起動してクエリを試行錯誤しております。

専門家に質問してみよう