• ベストアンサー

アクセスで前年対比を出す方法を教えてください。

売上テーブルにID、日付、A店舗売上額、B店舗売上額、・・・を入れています。このデータから月初から当日までの累計と前年同月同日対比を表示させたいのですが、どうすればいいでしょう?その日だけではなく、昨日、一昨日・・・のデータも表示させたいのですが。今まではEXELでやっていたのですが、月が変わるたびに、シートを増やし、一昨年のシートからデータを取るという作業があるのと、別のEXELのファイルに簡単な損益計算書を作っているのですが、そのデータをコピーする手間を省きたいと考えてます。またこの損益計算書も同じアクセスのファイル(データベース)で作りたいと考えています。

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

  • ベストアンサー
  • ema_0222
  • ベストアンサー率34% (63/185)
回答No.3

長い回答になり申し訳ありません。 前提として、今年と昨年のデータが構造が同じテーブルに入力されているとします。peace510さんはクエリ、レポートは使えるが、フォームやモジュールは使えないと思って書いています。 []で括られているものはテーブル名など総称を意味します。 まず、今年の売上をクエリで日付の抽出をします。抽出条件は Between DateSerial(Year(Now()),Month(Now()),1) And Now() ←今月の初日から今日までという意味です。 抽出条件を入力したらSQLビュー(表示→SQLビュー)にしてFROMの前でSERECT行の最後に「, format([テーブル名].[日付フィールド名],"mmdd") as [新しいフィールド名]」と入力します。←日付データを月日だけにして新しいフィールドを作ります。 そのクエリの名前を「Q_今年売上」とするとQ_今年売上を基にクエリを作ります。 名前を「Q_今年売上合計」とするとQ_今年売上のIDと日付を除いた、売上データのみをフィールドに選択して、Σ(集計)ボタンを押し、集計の欄を「合計」にします。 フィールド名が「~の合計」となるので気になるようならばSQLビュー(表示→SQLビュー)にして、「Sum(Q_今年売上.[フィールド名]) AS フィールド名の合計」などの「AS」の後ろを変更します。 これで、Q_今年売上が期間抽出されたデータ、Q_今年売上合計が期間抽出されたデータの合計(当日までの累計)になります。 次に、昨年の売上をクエリで日付の抽出をします。抽出条件は Between DateSerial(Year(Now())-1,Month(Now()),1) And DateSerial(Year(Now())-1,Month(Now()),Day(Now())) ←今年-1の同月初日から同月同日まで 抽出条件を入力したらSQLビュー(表示→SQLビュー)にしてFROMの前でSERECT行の最後に「, format([テーブル名].[日付フィールド名],"mmdd") as [新しいフィールド名]」と入力します。←新しいフィールドを作ります。 そのクエリの名前を「Q_昨年売上」とでもしておきます。 次にQ_今年売上とQ_昨年売上を基にクエリを作ります。さきほど作った新しいフィールド(月日だけを抽出したもの)を結合させて、結合プロパティを「Q_今年売上の全レコードとQ_昨年売上の同じ結合フィールドのレコードだけを含める」にします。 フィールドに入れる値を選択しますが、日付はQ_今年売上の日付を入れると良いでしょう。フィールド名の変更は合計を出したところで説明しています。 このクエリの名前を「Q_売上比較」とでもします。 Q_売上比較と、Q_今年売上合計を基にレポートを作ります。このクエリには月毎のすべての売上が含まれますので、あとは加工次第ですね。抽出の範囲を変更したいときは、ヘルプを見ながら勉強してください。 あとの演算はがんばってください。 クエリだけに頼らずに、モジュールも使うと楽にいろんなことができますよ。

peace510
質問者

お礼

ありがとうございます。このページ初めて使ったので、補足にも同じ内容を入れてしまいました。読んだだけではよくわからないので、一度試してみます。フォームも同じ要領でいいんですね。モジュールは基本的にほとんどイベント型のサブプロシージャのみを作っています。DAOからADOに変わって、他データベースに接続したりするのが、こんがらがってます。Functionプロシージャ-は Function topday() As Date '現在の月の月初(1日)を計算します。 Dim firstdate As Date ' 変数を宣言します。 Dim intervaltype As String Dim number As Integer intervaltype = "d" ' "d" によって追加する時間間隔として、日を指定します。 firstdate = Date - Day(Date) number = 1 topday = DateAdd(intervaltype, number, firstdate) End Function ぐらいでしょうか?もしよろしければ、モジュールでの作り方も教えていただければ、うれしいです。SQLはちょっと苦手です。ありがとうございました。

peace510
質問者

補足

ありがとうございます。読んだだけではよくわからないので、一度試してみます。フォームも同じ要領でいいんですね。モジュールは基本的にほとんどイベント型のサブプロシージャのみを作っています。DAOからADOに変わって、他データベースに接続したりするのが、こんがらがってます。Functionプロシージャ-は Function topday() As Date '現在の月の月初(1日)を計算します。 Dim firstdate As Date ' 変数を宣言します。 Dim intervaltype As String Dim number As Integer intervaltype = "d" ' "d" によって追加する時間間隔として、日を指定します。 firstdate = Date - Day(Date) number = 1 topday = DateAdd(intervaltype, number, firstdate) End Function ぐらいでしょうか?もしよろしければ、モジュールでの作り方も教えていただければ、うれしいです。SQLはちょっと苦手です。ありがとうございました。

その他の回答 (2)

  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.2

前年対比の場合は、状況によって異なります。 (1)対象範囲の本年のデータを基準にしてしまっていいのなら簡単です。 (2)しかし、前年のデータが存在して、本年のデータがない場合を表示させたい などの条件が入る場合は、コーディングで配列などにデータを落としたり、 ワークテーブルなどに一時保存して 出力の度データを作成してやる必要があります。 (1)対象範囲の本年のデータを基準にしてしまっていい場合は クエリをいくつか作ってやり(本年、昨年、一昨年など) それらをクエリで再度結合してやればできます。 (2)の場合は、まず本年のデータを作成、次に昨年のデータを同店舗同月同日のデータがあれば、昨年の格納場所に保存、なければ、データを追加という風にやって生きます。 なんにしろ、アクセスなら、プログラムを組めば体外のことはできます。

peace510
質問者

お礼

ありがとうございます。参考にさせて頂きます。アクセスは奥が深いので、大好きです。ただ、没頭しないと出来ないので、なかなか作ることが少なく、後で自分の作ったデータベース、特にVBAは自分でもわからず、なかなか進歩しない毎日です。集計や分析はEXELが得意かと思いその必要のあるものは、ほとんどEXELでやってしまいます。今回は入力は私がしていないので、月ごとにシートを増やすのが手間なので、新しくチャレンジしようと思いました。参考本の在庫データベースでも、過去の残高(昨日の残高、一昨日の残高など)は表示せず、今日現在(最終レコード)の残高を表示させるようにしているので、アクセスではこういううのは難しいと思ってました。早速試してみます。ありがとうございました。

  • i-harada
  • ベストアンサー率22% (56/252)
回答No.1

i-haradaです。 邪道?なのかもしれませんが、我流の方法として「今年テーブル」の日付をクエリーで分解しくっ付けて「月/日」を作ります。前年テーブルも同じようにクエリー上で「月/日」を作り同じクエリー上でリレーションで繋ぎ対比させたいフィールドを表示させて、%をだす。抽出は基の日付でbetweenでどうでしょうか? それを元にレポートを作ればOK? 試してないので他に手段がなければやって見て下さい。 やっぱ邪道だな!\(_ _)

peace510
質問者

お礼

ありがとうございます。他の人の回答を見せていただくと、邪道ではないのではないでしょうか?だけど僕も我流でアクセスはやってるので、結構邪道っぽいのも好きです。間違ってるかもしれませんが、アクセスは自分の求めている便利さを追求できれば、その作る過程が楽しいので、少しぐらい邪道でもよしと思っています。これが、お金をもらってつくるのなら、そういう訳には行かないでしょうけれど、ありがとうございました。

関連するQ&A

  • エクセルで得意先別前年対比を計算したいのですがどのようにすれば良いでしょうか?

    エクセルで得意先別前年対比を計算したいのですがどのようにすれば良いでしょうか? シート1に今年の1月度のデータと、昨年の1月度のデータが入っております。(明細単位のデータです) シート2でこのデータを集計して対比表を作成したいのですが、どのようにすればいいでしょうか? 尚、シート1及びシート2の主な項目は次の通りです。 項目名:[A]担当者CD [B]計上年月日(例:20080122) [C]得意先CD [D]得意先名 [E]売上金額(決定) [F]売上金額(概算) 最終的に作成したい資料のイメージとしましては、、、 担当者:東 京一郎 [A]得意先CD [B]得意先名 [C]売上金額計(今年度) [D]売上金額計(昨年度) [E]差± ・・・といった感じです。 注意点としましては、 (1)得意先CD:1002 A商店は、今年の売上は100万でしたが、昨年の売上はゼロ(データファイルにCD1002のデータは1件もなし)の場合や、   逆に、得意先CD:1008 B商事は、今年の売上はゼロで、昨年の売上は50万といった場合があります。 関数を調べてみたりと色々試してはみたのですが、私には知識不足でどうにもなりません。 助けてください。よろしくお願いします。

  • 前年比の計算式について

    閏年に関する質問です。 私は仕事でデータ集計(ここでは分かりやすく売上金とします)をしています。 通常、前年比を出す際は 今月の売上÷去年同月の売上×100で算出しています。 分かりやすい例で言うと、1000円÷3000円×100=33.3% つまりこの月の前年比は33.3%となります。 ここからが本題です。 去年(2016年2月)は閏年で、2月は29日までありました。しかし、今年は閏年ではないので2月は28日までしかありません。 そこで、通常通り前年比を算出すると前年差が大きくなってしまいます。 それで閏年修正をしたいと思っているのですが、計算式がどうにも思い付かず困っております。 また、年度累計も集計している関係上、4-2月の累計値も閏年修正をしたいと思っております。 大変ご迷惑をおかけしますが、お知恵を拝借させて頂けないでしょうか。 どうぞよろしくお願い致します。

  • アクセス 前年同期の計算

    よろしくお願いします 1.アクセスで 客先、日付、売り上げ、利益、。。。。のデーターベースが作ってあります。5年ぐらいのかなり件数の多いものです。 2.日付の計算で前年同期と比較するには(表示したい)どうしたらいいですか。 3.たとえば今日(今月4日)出力が必要なものは   今月は12月だから(10月+11月の合計がほしい)       2月になれば(10-1月の累計)       6月は(4-6月)というように6ヶ月単位 出力は 顧客 今期累計(売上) 前年同期   今期累計(利益) 前年同期 マル×社 567,555  584,456 52,568 75,589   | 以下客先一覧   よろしくお願いします

  • エクセルでシート間の計算

    前年の売上昨年対比を計算して表示したいのですが、 Sheet1 A1から    売上(2004.1) 1日 219800 2日 175200 3日 180400 Sheet2 A1から    売上(2005.1) 昨年対比 1日 345000 2日 267000 3日 349000 日にち毎の対比をパーセンテージでそれぞれ表示するのにはどうしたら良いのでしょうか。

  • EXCEL関数の質問

            1月  2月  ~  11月  12月  累計     当年実績    10   20              30 前年度実績   40   20     50   70    60←1月、2月分のみ 前年同月対比  25%  100%             50% 上記は売上表です。当年実績を入力すると、前年実績と対比して割合を出します。 質問は前年度実績の累計が、当年実績を入力した月のみ累計計算する関数を教えてほしいのです。 IF関数でダラダラ書かないで、シンプルに解決する関数を教えてください。 

  • accessからexcelへのエクスポート時のシート

    access2002 excel2002 現在accessのクロス集計クエリで各店舗の損益表を作成しフォームからの出力指示でexcelにエクスポートしています。店舗番号を抽出条件にして1店舗ずつ出力しています。 これを店舗番号を指定せずクエリを実行し全店舗分の損益データを店舗ごとのシートに出力するようにしたいのですが、そんなことはできないでしょうか。 店舗,項目 ,8/1 ,8/2 ,8/3 ... 0001,売上 ,10000,12000,13000 0001,原価 , 5000, 5000. 6900 0001,人件費, 4000, 4500, 5000 0002,売上 ,20000,21000,19000 0002,原価 , 9000, 8900. 9000 0002,人件費, 6000, 7000, 6000 上記クエリ結果を シート0001に 店舗,項目 ,8/1 ,8/2 ,8/3 ... 0001,売上 ,10000,12000,13000 0001,原価 , 5000, 5000. 6900 0001,人件費, 4000, 4500, 5000 シート0002に 店舗,項目 ,8/1 ,8/2 ,8/3 ... 0002,売上 ,20000,21000,19000 0002,原価 , 9000, 8900. 9000 0002,人件費, 6000, 7000, 6000 店舗ごとにクエリを作成すればできるような気がするのですが、店舗数が50以上あるのでどうにかひとつのクエリでできないものか考えたのですがどうしても分かりませんでした。 どなたかご存知の方がいらっしゃいましたらご教授願います。

  • EXCELマクロに関しての質問

    マクロ初心者です。 シートAからシートBのデータを取得する際の質問です。 1. 添付ファイルの左側のシート(シート:損益計算)ように シート:損益計算 B1~B18まで1~10まであります。 これはシート名に対応します。(シート名:1~10) シート:損益計算のC4,5,6に書かれているデータが あります。これを(シート:損益計算)C9に入れる値を 添付ファイルの右側から入れる値を(シート:1) から選択して、(シート:損益計算)C9に入れたいです。 具体的には(シート:損益計算)C9に入れるデータは 添付ファイル右側の(シート:1)1205はB2~22 で(シート:1)C2~22の中では9500は(シート:1)のC12に 相当しますので1205の9500のC価格である(シート:1)の 147を(シート:損益計算)C9に入れたいです。 まずどのような関数を使って入れれば良いか教えてください。 2. また、次に(シート:損益計算)のD4,5,6からL4,5,6まで終わらせて (シート:損益計算)のB10の2、つまりシート2から同様のデータを 取得する気でいます。それをB18のシート10まで反復計算させる 事が最終目的です。 大変申し訳ないのですが、1だけでも良いので教えていただけないでしょうか。 以上、よろしくお願いいたします。

  • マクロに関して 画像が見づらいので再度質問

    マクロ初心者です。 シートAからシートBのデータを取得する際の質問です。 1. 添付ファイルの左側のシート(シート:損益計算)ように シート:損益計算 B1~B18まで1~10まであります。 これはシート名に対応します。(シート名:1~10) シート:損益計算のC4,5,6に書かれているデータが あります。これを(シート:損益計算)C9に入れる値を 添付ファイルの右側から入れる値を(シート:1) から選択して、(シート:損益計算)C9に入れたいです。 具体的には(シート:損益計算)C9に入れるデータは 添付ファイル右側の(シート:1)1205はB2~22 で(シート:1)C2~22の中では9500は(シート:1)のC12に 相当しますので1205の9500のC価格である(シート:1)の 147を(シート:損益計算)C9に入れたいです。 まずどのような関数を使って入れれば良いか教えてください。 2. また、次に(シート:損益計算)のD4,5,6からL4,5,6まで終わらせて (シート:損益計算)のB10の2、つまりシート2から同様のデータを 取得する気でいます。それをB18のシート10まで反復計算させる 事が最終目的です。 大変申し訳ないのですが、1だけでも良いので教えていただけないでしょうか。 以上、よろしくお願いいたします。

  • Access得意な方教えてください。

    検索ボタンを作りたいのですが上手くできません。 検索ボタンの絵はメインフォームに作成してはいますが そのボタンを押したらどのように動くかまで設定が組めていません。 フォームは、メインフォームに店舗IDと店舗名と売上金額合計の枠(テキストボックス) サブフォームがデーターシート形式で売上履歴が表示するようになっています。 店舗IDと期間を入力したら 店舗名と売上履歴がレコードごと(期間内の)を表示させたいです。 店舗ID:入力 期間:2014/12/01-2015/1/31 検索ボタンを押すと 店舗名:反映 サブフォーム:期間内の売上履歴が反映 売上金額の合計:期間内の売上金額の合計が反映 どのようにすればいいかネットで調べましたが よくわかりませんでした。 手順を詳しくおしえていただけると助かります。 または、VBAのような式が必要でしょうか? 教えていただけますようお願いいたします。 ※現在メインフォームの中にサブフォームをデータシート形式で 表示させるところまでやっております。

  • エクセルの営業日報で累計を残す方法

    エクセル初心者です。 エクセルで一か月分の営業日報をつくりました。 当日売上と当月累計等が横並びになっていてるものです。 シートを1枚作り、1日を31日までコピーし、1,2,3,4~31となっています。 完成した日報の累計は串刺し算でもとめています。   例:売上累計は=SUM(Start:End!A1) この計算だと、たとえば15日まで記入した場合、10日の売上累計を確認したくても 1~31すべての累計が同じ数字になっていて見返すことができません。 毎日の累計を残したい場合はどのような対策が有効でしょうか?? ※マクロも少し(シートを「1」作り、シート名「1」~「31」でコピー)だけですが挑戦しました(汗)

専門家に質問してみよう