• 締切済み

Between関数とDateSerial関数の組み合わせ。

基本的な事で申し訳ありません。 Access2007にてデータベースを作っています。 テーブル[tblメイン] に[日付]と[問合数]があり、 日報用に、当月の累計を表示させたいのですが 計算用クエリ[qry計算用]を作り [日付][問合数]を移動させ [当月累計]を 式1: DSum("[問合数]","[qry計算用]","日付 between #DateSerial (year([日付]) ,month([日付]) ,1)# and #[日付]#") としてみたのですが 『クエリ式'日付 Between #DateSerial (year([日付]),month([日付]),1)# and #[日付]#'の構文エアr-:演算子がありません。』 と出てしまいます。 乏しい知識でいろいろとやってはいるのですが突破口が見当たりません。 何か分かるかたいましたらご指摘願います。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

先ずBetweenは関数ではありません。 また、クエリ内にDSumなど持ち込むのは意味がありません。 日付の指定は"#2010/03/10#"とするか、DateSerialなら DateSerial(2010,3,10)となります。 (1)クエリビルダを起動させ、tblメインを選ぶ。 (2)問合数、日付をグリッドにドロップする。 (3)ツールバーの「表示」→「集計」をクリックする。 (4)問合数の集計を「合計」にする。 (5)日付の集計を「Where 条件」にする。 (6)日付の抽出条件に「BETWEEN #2010/3/1# AND #2010/3/31#」と   記述する。 抽出条件の記述は他にMonth(日付)=3のような方法もあります。 また、(5)の日付を上記のように「月:Year(日付)*100+Month(日付)」とし、 集計を「グループ化」にすると、年月別の問合数合計が得られます。

yabusita
質問者

お礼

ありがとうございます。 関数、関数ととらわれすぎていたようで 勘違いしておりました。 こんな方法もあるものと勉強になりました。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

datesrial(a,b,c) は既に日付型ですので、 #はいりません。 なにをどのようにグループ化して合計させているのかがよくわかりませんので、正確なsqlはかけませんが SELECT Sum(tblメイン.f1) as 合計 FROM tblメイン HAVING ((tblメイン.日付) Between between DateSerial (year([日付]) ,month([日付]) ,1) and [日付]) のような形になると思います。 また、フォーム上?の[日付]とテーブル上のtblメイン.日付も混乱の原因になりそうなので、別名にするほうが無難です。

yabusita
質問者

お礼

ありがとうございます。 お礼が遅れて申し訳ありません。 何がしたいのか?というのがはっきりしていなかったのにお返事ありがとうございます。 [日付][問合数]を入力するフォーム上で [日付]の月の1日~[日付]までの累計数を適宜表示させたい。 というのが目的です。 フォーム上で過去のデータをみた際にも入力時点での累計データが 見れるように(印刷できるように)したいです。 (確認できて、印刷できるのであればレポートでもかまいません。) パソコンが慣れてない人でも簡単に入力できる様に 適宜月を入力するとかはしない方向で設定したいです。 その為に。 ・Dsumの項目を作るためにクエリ[qry計算用]を作り ・Dsumの日付の指定日に、入力した[日付]からその月の1日を抽出 ・Betweenで1日~入力した[日付]を指定してみた。 という試行をしたのが質問内容です。 フォーム上の日付もテーブル用の日付も 入力した『日付』と指定の[日付]の問合数日付は別で 入力日付は基本的に記録しない方向で考えています。 つたない日本語で申し訳ありません。

関連するQ&A

  • Access 2000ひと月単位で一日ごとの累計を出したいのですが・・・。

    いろいろ探して、 累計: DSum("新規","日報","[日付]<=#" & [日付] & "#") という、式をクエリに貼り付けたのですが、これだと、月ごとの累計にならず、困っています。どなたか、お教えいただけないでしょうか ID   日付    年月   新規  累計 1  2008/10/20  2008/10   1   1 2  2008/10/25  2008/10   1   2 3  2008/11/05  2008/11   2   4 ⇒ 2 4  2008/11/10  2008/11   1   5 ⇒ 3 5  2008/11/15  2008/11   2   7 ⇒ 5 6  2008/11/20  2008/11   1   8 ⇒ 6 7  2008/11/25  2008/11   1   9 ⇒ 7 8  2008/11/30  2008/11   2   11 ⇒ 9 9  2008/12/05  2008/12   1   12 ⇒ 1 10  2008/12/10  2008/12   2   14 ⇒ 3 一度クエリで11月(2008/11)だけにしてからやればよいと思ったのですが、DSum関数がテーブルからしか作れないようで、うまくいきません。お願いします。

  • access ADO Between

    str年月="16年09月" dtm月初日 = str年月 & "01日" dtm月末日 = DateSerial(Year(dtm月初日), Month(dtm月初日) + 1, 0) rs.CursorLocation = adUseClient rs.Open "Ttest", cn, adOpenStatic, adLockPessimistic rs.Sort = "日付 DESC" rs.Filter = "日付 Between #" & dtm月初日 & "# And #" & dtm月末日 & "#" を実行すると 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 と言うエラーになります。 ADOのフィルタでBetween andは使えないのでしょうか? もしくはどこかにシングルコーテーションを入れれば良いのでしょうか?

  • BETWEEN を2つ以上使用する方法はありますか?

    MySQL4.0.1 PHP4.3.9 Windows2000sp4 BETWEEN を2つ以上使用する方法はありますか? 例えば2004年4月から12月のデータと2005年1月から3月のデータを取り出したいのですが。。。 $sql="SELECT*FROM TABLE WHERE (year_uk=2004 AND month_uk BETWEEN 4 AND 12) AND (year_uk=2005 AND month_uk BETWEEN 1 AND 3) 上記のような感じでやってみたのですが、うまくいきません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • ACCESSのSQLクエリについて質問です

    よろしくお願いします。 SQLのクエリで、 WHERE (((Year([日付01]))=Year(Date())) AND ((Month([日付01]))=Month(Date())+1)); と記述し、当月の翌月のテーブルを表示させていましたが、これだと12月の次は13月になってしまいます‥。 これをちゃんと翌年の1月が表示されるようにしたいのですが、どのようにすればよいかお教え頂けますでしょうか‥。 元々分かる方に教えて貰いながら作ったものなので、この文章だけで分かって頂けるか不安ですが、どうかよろしくお願いします。

  • アクセスの期間抽出

    今月の初日から今日まで・・・は、Between DateSerial(Year(Now()),Month(Now()),1) And Now()だと知りました。 では、今年の初日から今日までは?

  • Access 2000 ひと月単位で一日ごとの累計を出したいのですが・・・。

    いろいろ探して、 累計: DSum("新規","日報","[日付]<=#" & [日付] & "#") という、式をクエリに貼り付けたのですが、これだと、月ごとの累計にならず、困っています。どなたか、お教えいただけないでしょうか ID   日付    年月   新規  累計 1  2008/10/20  2008/10   1   1 2  2008/10/25  2008/10   1   2 3  2008/11/05  2008/11   2   4 ⇒ 2 4  2008/11/10  2008/11   1   5 ⇒ 3 5  2008/11/15  2008/11   2   7 ⇒ 5 6  2008/11/20  2008/11   1   8 ⇒ 6 7  2008/11/25  2008/11   1   9 ⇒ 7 8  2008/11/30  2008/11   2   11 ⇒ 9 9  2008/12/05  2008/12   1   12 ⇒ 1 10  2008/12/10  2008/12   2   14 ⇒ 3 とにかく、その「日付」の月の初めから、その「日付」の日までの累計が、その「日付」の累計の列に入ればよいのですが、よろしくお願い致します。

  • MS ACCESSのDSUM関数の設定について

    お世話になっております。 以下の点についてアドバイスをお願いします。 ・「製品テーブル」、「売上テーブル」と「生産テーブル」を作って、在庫の累計計算をしたいと 考えております。 ・作成したテーブルに基づき、添付画像にあるクエリを作成しました。 ・このクエリで以下の数式を入力して在庫の累計計算をしようとしたのですが、エラーがでて、計算式の入力を 完了できません。数式をどのように変更すればよいかアドバイスをお願いします。 DSum(“[生産数]-[売上数]”,”B”,”製品コード=”&[製品コード]&”AND年月<='"&[年月]&"'") よろしくお願いします。

  • ACCESS VBAの定義域集計関数の条件設定について

    ACCESSのVBAで定義域集計関数のDsum関数を使用しています。 Dsum関数は 結果=Dsum(フィールド名、テーブル名やクエリ名[、条件]) で、条件については、SQL分のWHERE句ののWHREを除いた部分を記述すると解説されています。 そこで月別経費一覧表のクエリーから経費月を2004.4月、5月、6月の累計を出すべく下記の様な式を作って見ました。 累計経費実績 = DSum("[金額]", "qry月別経費一覧", "経費月 IN('2004.04','2004.5','2004.6')") 実行してみると、条件であるIN句の中のはじめの条件'2004.4'月の[金額]の合計だけが計算されます。 順番を入れ替えて、'2004.5'を先頭にすると5月分の[金額]の合計のみが計算されました。 本来、3ヶ月分の[金額]が合計されて欲しいわけですがどこに不具合があるか解りません。 いろいろと調べてみましたが原因がわかりません。 ネット等でも探しましたが見つけることが出来ませんでした。 どなたかおわかりの方お教えください。 使用PCはWINDOWS XP/ACCESS2000です。 よろしくお願いします。

  • アクセスのクエリで困ってます。

    契約日から6ヶ月めの日付をだして、さらにその日を検索したいんですが・・・ テーブルに契約日のデータがあります。 クエリで、    フィールドに6ヶ月: DateSerial(Year([竣工金入金日]),Month([竣工金入金日])+7,Day([竣工金入金日]))    抽出条件にBetween [開始日] And [最終日] としました。 抽出条件を入れなければ正常に値がでましたが、 抽出条件を入れると  ”式が正しく入力されていないか、複雑すぎるために評価出来ません。たとえば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を簡単にして下さい。” という、エラーメッセージが出てしまいます。 解消する方法を教えて下さい。

  • Excel VBAで「date」関数を使いたい

    VBAを使用して年月日を入力してます。 セルに表示だけなら Year & "/" & Month… とかでもいいんですが、その日付で計算を行いたいんです。 何日足す、とか。。 それでExcelで使える Date(Year,Month,Day) を思い出したんですが、VBAではエラーになってしまいました。 Application.WorksheetFunction.Date(Year, Month, Day) や Application.Date(Year, Month, Day) もダメでした。 どのようにしたら入力した日付で計算が行えるでしょうか?