• ベストアンサー

Accessでのカウント方法

エクセルの場合で説明します。 A列は入荷、B列は出荷です。それぞれ、同じ日に複数回の入荷もしくは出荷があることもあれば、全くない日もあります。そこでD列以降のように、日別で入荷と出荷の回数をカウントしたいのです。 A列とB列のようなテーブルをアクセスで作り、クエリでD列以降のような結果を出す場合、どのようにすればいいのでしょうか?単純にカウントではできませんでした。→この場合はどちらかが主軸になるため、思ったような結果が出ません。 またエクセルのようなCountIfのような関数も内容なのですが・・・ 初歩的な質問かも知れませんがよろしくお願いします。

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

もし、入荷も出荷もない日は表示しなくていのであれば、次のSQL文で集計できます。 SELECT 日付, SUM(入荷) AS 入荷数, SUM(出荷) AS 出荷数 FROM (SELECT 入荷日 AS 日付, 1 AS 入荷, 0 AS 出荷 FROM 入出荷テーブル UNION ALL SELECT 出荷日 AS 日付, 0 AS 入荷, 1 AS 出荷 FROM 入出荷テーブル) GROUP BY 日付; しかし、全ての日付を出したいとなると少々やっかいです。 SQL文では、テーブルに登録されていない値(日付)を自動で作成するのことはできないからです。 どうしても全ての日付を出したいのであれば、事前に日付だけを登録した日付テーブルを作成しておく必要があります。 例えば、8月分だけの集計をしたいのであれば、次のような日付テーブルを作成しておきます。 日付 2009/08/01 2009/08/02 2009/08/03 ・・・・・ 2009/08/30 2009/08/31 作り方は、VBAを使ってテーブルを作成するか、Excelで日付データを作成してインポートしてください。 その後で、下記のSQL文を実行すれば、日付テーブルに登録した日付全てで集計できます。 SELECT 日付テーブル.日付, 入出荷.入荷数, 入出荷.出荷数 FROM 日付テーブル LEFT JOIN (SELECT 日付, SUM(入荷) AS 入荷数, SUM(出荷) AS 出荷数 FROM (SELECT 入荷日 AS 日付, 1 AS 入荷, 0 AS 出荷 FROM 入出荷テーブル UNION ALL SELECT 出荷日 AS 日付, 0 AS 入荷, 1 AS 出荷 FROM 入出荷テーブル) GROUP BY 日付) AS 入出荷 ON 日付テーブル.日付 = 入出荷.日付;

tarono0123
質問者

お礼

ありがとうございます。 もう少し、単純だと思っていました・・恥ずかしいです。 SQL文は難しいですよね~。でもおかげさまで何とか目的を果たせました。感謝しております。

関連するQ&A

  • MS ACCESSで特定の値のカウント方法

    ACCESS初心者です。 クエリにて特定のセルの値と同じ値が列内に何個あるかをカウントし、 同じ行に返す方法があれば知りたいです。 EXCELで言う B1=COUNTIF(A:A,A1) B2=COUNTIF(A:A,A2) B3=COUNTIF(A:A,A3) ・ ・ ・ という結果を表示してくれる列が欲しいです。 ネットで検索しましたが、固定値だったり、フォームで変数を入力する方法は 出てくるのですが、既に入力されている値からの方法が出てきません。 分かる方がいましたらお願い致します。

  • ACCESSの空白をカウントする

    こんにちはAccessについて教えて下さい。 素人です宜しくおねがいします。 日付のデータが入るテーブルがあります。 この日付は物品の出荷の日にちと入荷の日にちを示しています。 入荷したら入荷日に日付を入れ、出荷したら出荷日に日付を 入れます。 在庫管理のため入荷日が入っているけれど出荷日を入力していない空白せるの数をVBAかクエリかWhere条件式でカウントしたいです。 調べたところクエリの集計のカウントでは空白セルをのぞいた数を数えてしまうようです。 ですから、Is Nullでも””””でも集計できなかったです。 どうすればよろしいでしょうかどうぞ宜しくお願いします。

  • 列に含まれる同じ文字列をカウントし、表示させる方法を教えてください。

    簡単な質問かもしれませんが、どうかお願い致します。  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11 11111  11 11111  11 11111  11 11121  11 11121  11 12111  12 13111  13 上記のような A列には5桁の数字 B列には2桁の数字 エクセルのデータがあるとして、 まず、A列で同じ数字をカウントし、  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11      11111  4 11111  11      11121  2 11111  11      12111  1 11111  11      13111  1 11121  11 11121  11 12111  12 13111  13 のように表示させたいのですが、どうしたらいいかわかりません。 データが膨大で数字がランダムな為、CountIfは使えないんだと思いますが、素人なので、詳しくはわかりません。 また、B列が何なのかと言いますと、A列の上2桁が入っています。 なぜ必要かなんですが、理由があります。 A列で5桁でカウントした個数が2以下の場合、5桁ではカウントせずに、2桁でカウントするという風にしたいのです。 しかも、5桁でカウントし、3以上だった数字については2桁ではカウントしない様にしたいんです。 要するに、最終的に  A    B   C    D    E    F    G  5桁  2桁       5桁 カウント  2桁 カウント 11111  11       11111  4    11   2 11111  11                  12   1 11111  11                  13   1 11111  11 11121  11 11121  11 12111  12 13111  13 のように表示させたいんです。 長々とすみません。 ご指導のほど、よろしくお願いいたします

  • エクセルでの行数カウント

    エクセルで A列 B列 1行 ●1 C ⇒カウント 2行 X1 D  3行 ●2 E 4行 X2 F 5行 ●3 C ⇒カウント 6行 ●4 D 7行 X3 E A列で「●」を含み、なおかつB列で「C」である行の数(例でいうと「2」)を求める 数式を教えてください。 ちなみに A列 B列 1行 ● C ⇒カウント 2行 X1 D  3行 ● E 4行 X2 F 5行 ● C ⇒カウント 6行 ● D 7行 X3 E であればA列が全く「●」に等しいものでカウントする場合は、下記の関数で計算できます。 {=SUM(IF(B1:B7="C",IF(A1:A7="●",1,0)))} COUNTIF関数では、"●*"のように「任意の文字」を指定することが可能ですが、IF関数の 中ではできないようです。

  • (エクセル)オートフィルタ機能で表示部分のみの文字列をカウントしたい

    はじめまして! エクセル初心者です。過去ログを検索してみたのですが、上手く見つけられなかったので質問します。 下記のようなデータがあります。   A1 B1 C1 D1 1 ○ × △ ▲ 2 × ▲ ▽ 3 ○ × ○ △ 4 ▽ × ○ △ 5 ○ ▲ ▽ 6 ▲ △ × 7 ○ △ × ▲ A1~D1にはオートフィルタをかけてあります。 A8にはCOUNTIF(a1:a7,"○") A9にはCOUNTIF(a1:a7,"▲") A10にはCOUNTIF(a1:a7,"△") A11にはCOUNTIF(a1:a7,"▽") A12にはCOUNTIF(a1:a7,"×") B8にはCOUNTIF(b1:b7,"○") B9にはCOUNTIF(b1:b7,"▲") ・・・・・とそれぞれ対応させいます。 例えば A1で○を選択したときに、A8の数字は4になるのですが、B列の×はA列の○に対応した2にしたいのですが 3になってしまいます。 表示部分のみの文字列カウントをする方法ありませんか? (countifを入力してあるセルは非表示部分もカウントしてしまいます。)

  • 2つの日付の差が10日以下を作業列なしにカウント

    たびたびお世話になります。 例えばイチゴを出荷した日と売り切れた日が縦にズラッと並んでいるリストがあるとします A列   B列 出荷日  売り切れ日 12月1日 12月5日 12月10日 12月16日 12月20日 12月23日 出荷後10日以内に売り切れた回数を作業列を使わずにカウントして合計を出したいのですが、可能でしょうか? 通常ならC列にB列-A列をした数を出して、C列をCOUNTIF関数で"<=10"を条件にすれば良いのですが、作業列を作れない場合に同じようなことができるのでしょうか? よろしくおねがいします。

  • エクセルのカウント方法

    エクセルのカウント方法で悩んでいます。どなたかお願いします。   A列  B列  1  abc  ○ 2      ○ 3  abc  ○ 4  def  ○ 5  ghi 6  jkl  ○ A列、B列ともに文字列が入力されている個数を求めたい。 ただし、A列で重複した場合はカウントしない。 上記の場合は 3 となる。

  • エクセルで重複を除いた日付のカウント(条件付き)

    過去の記録にもなく、困っています。 エクセルで(A列の)日付をカウントしたいのですが、重複して困っています。 「C1」に任意の日付(○月○日)を入れると、「D1」に○月○日以下の日付がカウントされるようにしたいのです。      A     B    C     D 1  4月5日         2  4月6日 3  4月6日 4  4月6日 5  4月7日 6  4月7日 7  4月8日 D1に =COUNTIF(A:A,"<="&C1) といれてみると、重複してカウントされてしまうのですが、重複を除いてカウントがしたいのです。 ちなみに(C1)に「4月7日」を入れると、(D1)に「3」になるようにしたいのに、重複して「6」となってしまいます。 おいそがしいと思いますが、どうかご教授をお願いいたします。

  • エクセルの集計方法

    エクセルで2つの条件に合致するものだけカウントしたいのですが、「countif」を二つ使うとエラーが出てしまいます。  具体的にいうと…   A列:氏名   B列:スーパーの種類(a,b,c,d,e)   C列:買うものの種類(A,B,C,D,E)  B列で「b」、C列で「D」に該当する人数を数えたい  …という場合の数式を知りたいのです。    オートフィルターだといちいち選ばなければならないので、数式で2列に該当するものだけカウントしたいと思っています。

  • Excelのカウントについて(複数条件)

    Excelのカウントについて質問です。      A列  1行目 1-2-3  2行目 2-3-1 3行目 4-5-1 4行目 3-2-1 5行目 1-3-2 6行目 ( ) 上記の表があり、A列6行目にA1~A5のカウントを表示したいと思います。 その際、1-2-3、2-3-1、3-1-2など、同じ数字でできているものであれば、順番が違っていても同じものとみなしてカウントしたいのです。 ※1-2-3は文字列です。 COUNTIFを使って下記のようにすればカウントできなくはないのですが、もっと効率よく短縮して書けないかと思っています。 =COUNTIF(A1:A5,"1-2-3")+COUNTIF(A1:A5,"1-3-2")+COUNTIF(A1:A5,"2-1-3")+COUNTIF(A1:A5,"2-3-1")+COUNTIF(A1:A5,"3-1-2")+COUNTIF(A1:A5,"3-2-1") 簡潔にする方法がありましたらおしえてください。

専門家に質問してみよう