• ベストアンサー
  • 困ってます

集計クエリでの抽出条件

アクセスのクロス集計で質問なのですが・・・ 日付ごとの集計を行いたいのですが日付が21日締めで行いたいのです。 フォームで年と月を入れるとその月の集計を行いたいのです。 (例:フォームの日付入力2008/01と入力→集計クエリで2007/12/21~2008/01/20までの集計) この場合、抽出条件はどのように行えばよいのでしょうか

共感・応援の気持ちを伝えよう!

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

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

日付から[月度]を求める式フィールドを作ります 月度: Format(DateAdd("m",-(Day([日付])>20),[日付]),"yyyy/mm") このフィールドに抽出条件を設定します フォームのテキストボックスに条件を入力するのなら =Forms!フォーム名!テキストボックス名 パラメータで条件を入力するのなら =[年月を入力してください] いずれの場合もクロス集計クエリのパラメータ指定で パラメータ名とデータ型を指定しておくことを忘れないでね

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。早速やってみたいと思います。

その他の回答 (3)

  • 回答No.4
noname#140971
noname#140971

補足: GetDate関数とクロス集計クエリの書換えとの関係について Private Sub コマンド0_Click()   Dim dbsCurrent As DAO.Database   Dim qdfCrossSum As DAO.QueryDef   Dim strSQL   As String      strSQL = "TRANSFORM Sum(tab1.数量) AS 数量の総計 " & _       "SELECT tab1.区分, Sum(tab1.数量) AS [合計 数量] " & _       "FROM tab1 " & _       "WHERE tab1.日付 BETWEEN #1/21/2008# AND #2/20/2008# " & _       "GROUP BY tab1.区分 " & _       "PIVOT tab1.日付;"      Set dbsCurrent = CurrentDb   Set qdfCrossSum = dbsCurrent.QueryDefs("tab1のクロス集計1")   Debug.Print qdfCrossSum.SQL   dbsCurrent.QueryDefs("tab1のクロス集計1").SQL = strSQL   Debug.Print qdfCrossSum.SQL   dbsCurrent.Close End Sub ちょっと、手法は旧い手法ですが、これで[tab1のクロス集計1]は更新されます。 "WHERE tab1.日付 BETWEEN #1/21/2008# AND #2/20/2008# " & _ を "WHERE tab1.日付 BETWEEN #" & Me.集計開始日 & "# AND #" & Me集計終了日 & "# " & _ とすれば、フォームのテキストボックスをクロス集計クエリに反映できます。 Me.集計開始日=GetDate(Me.年月, -1, 21) Me.集計終了日=GetDate(Me.年月, 0, 20) という仕掛けで getDate関数を用います。 ※断片的な回答でしたので一応補足した次第です。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
noname#140971
noname#140971

tab1: ID__日付___________区分____数量 1___2007/12/20_____1_________1 2___2007/12/21_____2_________2 3___2008/01/19_____3_________3 4___2008/01/19_____3_________4 tab1のクロス集計クエリ1: 区分__合計_数量___2007/12/20___2007/12/21___2008/01/19 1__________________1__________________1 2__________________2____________________________________2 3__________________7________________________________________________________7 tab1のクロス集計クエリ2: 区分__合計_数量___2007/12/21___2008/01/19 2__________________2_________________2 3__________________7____________________________________7 TRANSFORM Sum(tab1.数量) AS 数量の総計 SELECT tab1.区分, Sum(tab1.数量) AS [合計 数量] FROM tab1 WHERE tab1.日付 BETWEEN #12/21/2007# AND #1/20/2008# GROUP BY tab1.区分 PIVOT tab1.日付; クロス集計クエリ1と2の差は WHERE 節の有無です。 さて、この WHERE節の生成要領ですが、私はクエリをVBAで編集しています。 ※クエリを編集する手段以外は勉強不足で知りません。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#140971
noname#140971

[イミディエイト] ? GetDate("2008/01/01", -1, 21) 2007/12/21 ? GetDate("2008/01/01", 0, 20) 2008/01/20 ここで、21と20を GetDate関数に埋め込むのは不味いでしょうね。 しかし、要は、集計開始日と集計終了日を求めなきゃ始まらないのではと思います。 Public Function GetDate(ByVal Now As Date, _             ByVal Move As Integer, _             ByVal Hiduke As Integer) As Date                GetDate = DateSerial(DatePart("yyyy", Now), _              DatePart("m", Now) + Move - (Hiduke = 99), _              Hiduke * Abs(Hiduke <> 99)) End Function [イミディエイト] ? GetDate("2008/01/01", +1, 1) 2008/02/01 ? GetDate("2008/01/01", +1, 99) 2008/02/29 GetDate関数で翌月の1日と末日とを求めた例です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速の回答ありがとうございます。 こちらはクエリの中の抽出条件に入るのでしょうか・・・ SQLやVBを使用するのでしょうか? 初心者でちょっとわからないので・・

関連するQ&A

  • access2003 クロス集計クエリに抽出条件を設定する

    QNo.3495024にて、「取引先ごとの月次売上(部品別および合計)」をフォーム形式で表示する方法を質問した者です。 1)クロス集計クエリの抽出条件としてこのコンボを設定 2)フォームに置いたボタンでクロス集計クエリまたはそれをソースにした別フォームを開く という方法を教えていただきました。 昨夜から自分なりに調べましたが、1)のクロス集計クエリに抽出条件を設定する方法がわかりません。 昨日の今日で再質問も気が引けますが、時間がないので質問させてください! ご存知の方、よろしくお願いいたします。

  • ACCESS  クロス集計クエリの抽出条件について

    http://www.accessclub.jp/samplefile/samplefile_39.htm 上記サイトのクロス集計クエリのやり方で、抽出条件を Between [Forms]![フォーム1]![開始日] And [Forms]![フォーム2]![終了日] とする場合、 クエリパラメータダイアログにはどう記述したらよいのでしょうか? [Forms]![フォーム1]![開始日]と[Forms]![フォーム2]![終了日]をそれぞれ別々にテキスト型としてもエラーですし、(「式が複雑です」とのエラー) 条件を全て記述しても、「かっこの使い方が正しくありません。」とのエラーです。 何が間違っているのでしょうか?

  • クエリの抽出条件をフォームで入力したものにしたい

    こんにちは。すみませんうまくいかないのでどなたか助言していただきたくお願いいたします。 クエリの抽出条件をフォームで入力した値にしたいと思っており、クエリの抽出条件欄に >=[集計フォーム]![開始日入力] と入力しました。「フォームの名前」!「テキスト名」です。 そしてフォームに値を入力してクエリ実行ボタンをクリックするとパラメータクエリのようになってしまいます。 フォーム内で何か設定をしないといけないのでしょうか? すみませんがよろしくお願いいたします。

  • Accessのクエリ 抽出条件について

    Accessのクエリ 抽出条件について Accessクエリのフィールドに納品日、検収日、納期検収変更日があり、これらで抽出条件を設定したいのですが、どうしていいか判りません。 抽出条件等の例を画像添付しますので、どうように設定すれば良いか? 具体的に教えて頂けると助かります。 フォームにも同じ項目を作成しています。

  • クエリーの抽出条件について

    アクセス97を使っているんですが、クエリーの抽出条件についてどうしてもわからないことがあるので出来ましたらお教え願いたいんですが。 フォーム上でトグル(スイッチ)がオンの場合だけクエリーの抽出条件で検索をかけたいと思っています。 フォームでトグル(スイッチ)がオフの場合は抽出条件なしで全データを抽出したいんです。 複数のクエリーを使えば何とかなるとは思いますがなんか見栄えによくないような気もしますし、たくさんクエリーが必要になってしまいます(スイッチをたくさん使う予定なので)。 もし、抽出条件をきる方法をご存知の方がおられましたら、お教えください。

  • 選択クエリの抽出条件(日付の場合)

    Access2002 windows2000 日付のフィールドから選択クエリを使って、或る年度のデータを抽出するとき抽出条件に1月1日から12月31日までを入力しています。 例えば2001年のデータを抽出する場合は 抽出条件に Between #2001/01/01# And #2001/12/31# と入力しています。 これは「2001年1月1日から2001年12月31日までに該当するデータを抽出しなさい」という事ですが、年度を指定する場合は1月1日から12月31日までという事は決まっているので、もっと簡単に抽出条件を入力する方法はありませんか?

  • クエリで日付の抽出条件

    アクセスのクエリで日付の条件抽出をしたいのです。シャープ(#)が日付のリテラル値ということまではつき止めたのですが、ここで問題発生です。 文字列には*や?のような便利な文字が使えるのに、日付で使おうとするとエラーになってしまいます。 例えば#01/05/2?# のように2001年5月20日~29日を抽出しろ、としても出来ません。 日付抽出には*や?のような文字はないんでしょうか? どうしてもないようなら関数でもしょうがないのですが、関数だと#01/1?/?3# (2001年10月~12月のうち、03、13、23日を抽出)みたいな複雑な命令が(簡単には)出来ないような気がするんです。 どなたかお助け下さい。

  • 列に対して条件抽出する方法 クロス集計クエリ

    クロス集計クエリで 列に対して条件抽出する方法ってあるのでしょうか? 例えば、元データが 日付       金額       科目 2013/09/16   ¥100   食費 2013/09/24   ¥8,100   生活費 2013/10/01   ¥10,000   生活費 と言うテーブルがあるのですが このテーブルを元にクロス集計クエリを作りました。 ウィザードで作ったら TRANSFORM Sum(T_test.金額) AS 金額の合計 SELECT T_test.科目, Sum(T_test.金額) AS [合計 金額] FROM T_test GROUP BY T_test.科目 PIVOT Format([日付],"oooo") In ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); こうなりました。 形としてはこのままでいいのですが、 例えば、9月分のみ表示したい場合、どうすればいいのでしょうか? 抽出条件として Between #2013/09/01# And #2013/09/30# を入れてみましたが、 何も表示されなくなってしまいます。

  • Accessフォームにクロス集計クエリを表示させるとき

    Accessフォームにクロス集計クエリを表示させようとしています。 クロス集計の横軸の項目数が増減するようなデータを扱っているのですが、 クエリをフォームに貼り付けてフォームを保存した後、クロス集計の横軸の項目数が増減しても、フォーム上の横軸の数は増減してくれません。 もう少し具体的に書くと、 クロス集計クエリは、縦軸に日付、横軸に社員を設定し、日付別の社員のアクセス回数カウントを表示するもので、社員は新しく入ってきたり、辞めていったりするため増減します。 フォーム上に集計クエリを貼り付けて、次のような表ができました。 ----- 日付 アクセス計 社員A 社員B ○日 3     1   2 △日 4     1   3 ----- □日に、StaffCが増えたので、次の様にしたいのですが、StaffCの列が表示されません。 ----- 日付 アクセス計 社員A 社員B 社員C ○日 3     1   2 △日 4     1   3 □日 5     1   2   2 ----- どのような解決方法がありますか? 質問が分かりづらいと思いますが、宜しくお願いします。表は等幅フォントで見ていただければと思います。

  • ACCESS2000 クエリの抽出条件

    フィールドに無作為に年月日が入力されているとします。 クエリの抽出条件に>2008/1/1と入力すると「2008年1月1日よりも新しい日付のレコード」を選択できます。 新しい日付の上位25までを選択するためには、抽出条件になんと入力したらいいのでしょうか。あまりにも基本的な質問かもしれませんが、お時間の許す方にお願いします。