出産前後の痔にはご注意!

Accessのレポート上でCountifを使用したいのですが、
うまく動作しません。(エラーが出ます。)

レポート上にある「関連項目1」という項目の中には
「1~10」の数字が入っています。
これのそれぞれの数を知りたいのです。

AccessではCoutifは使用できないのでしょうか?

宜しくお願いします。

Ac2000

このQ&Aに関連する最新のQ&A

A 回答 (3件)

説明不足でしたね、VBAでの書き方でした。


宣言は省略しましたがlCntやnumは変数の意味でした。
コントロールソースに書くのであれば

=DCount("関連項目1 ","T_マスタテーブル","関連項目1 = 1")

でしょうか。
もしくは

=DCount("関連項目1 ","T_マスタテーブル","関連項目1 = '1'")
    • good
    • 0
この回答へのお礼

3度もありがとうございます。

>=DCount("関連項目1 ","T_マスタテーブル","関連項目1 = 1")

は自分でもやってみたのですが、エラーで困っていたのですが、その下の
シングルクォーテーションでくくってみたら見事できました!

ご協力ありがとうございました。

お礼日時:2002/05/22 14:31

レポートのソースデータがテーブルまたはクエリーであるならば DCount関数で求められますよ。



1の件数が知りたいなら

num = 1
lCnt = DCount("[関連項目1]","テーブル名orクエリー名","[関連項目1] = " & num )

といった具合に。
    • good
    • 0
この回答へのお礼

2度もありがとうございます。

>num = 1
これはその下の& numの場所に代入するのではなく、このままですか?
テキストボックスのコントロールソースのところのビルダでかけばいいんですよね?

実行するとパラメータの入力を要求してきて、「ICnt」がきかれます。

申し訳ないですが、再度よろしくおねがいします。

ビルダには以下のようにかきました。

lCnt=DCount("[関連項目1] ","T_マスタテーブル","[関連項目1] = " & 1)

お礼日時:2002/05/22 14:01

COUNTIFはExcelのワークシート関数です。


よって使えませんね。
「関連項目1」の値が知りたいのでしょうか。
それとも何行にも表示されるものの件数がお知りになりたいのでしょうか。
いまいち、ピンとこないので補足して頂きたいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

自分で調べてなんとかDCOUNT関数というものまではたどりついたのですが、
これの使い方がうまくいかなくて。。。

>「関連項目1」の値が知りたいのでしょうか。
>それとも何行にも表示されるものの件数がお知りになりたいのでしょうか。

「関連項目1」にある、1の件数、2の件数・・・10の件数、というのを知りたいんです。

宜しくお願いいたします。

お礼日時:2002/05/22 13:30

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセスのレポートでレコード数をカウントしたい

お世話になります。
アクセスで、クエリで抽出した結果のレコード数をカウントし、レポートに出力させたいのですが、うまくいきません。
各クエリのレコード数が、レポートを見て分かればいいのですが、
出来ればXXXX/総レコード数XXXXという形で出力できれば尚嬉しいです。

宜しくお願いします。

Aベストアンサー

ごめんなさい。
コントロールボックスじゃなくてテキストボックスですね。
変な説明になってしまいました。

まず、必要に合わせてページヘッダー
又はレポートヘッダーにテキストボックスを作ります。
そのテキストボックスにカウント関数”=Count([****])”を入力し
****に詳細にあるフィールドを何でも良いので指定します。
(何を指定しても、レコード数は同じなので何でも大丈夫だと思います。)
そうすると、そのフィールドのレコード数が
カウントされて出てくると思うのですが。

braidalさんがどのようにレポートを作っているかが
分からないので、よく分からないのですが
総レコート数というのは、抽出する前のレコード数ということでしょうか?
でも、この場合最初にも書きましたが
クエリで既に抽出されたデータだけしか
レポートには出て来ていませんので
総数=抽出されたレコード数となります。

レポートでXXXX/総レコード数XXXXというのを
表示させる方法は、分かりません。
クエリで抽出をしていなければ
(全データを表示してレポートを作っている場合)
グループフッターでグループごとにカウントさせ(上記と同じ方法です)
またレポートフッターでカウントさせる方法は出来ますが。
もしかしたら、VBAなどで出来るかもしれません・・・

詳しい方法は、こちらを参考にしてみて下さい。
また、カウントと検索するとカウント関数のやり方も分かります。
http://www.mahoutsukaino.com/ac/ac97/basic/nyumon_r3.htm

ごめんなさい。
コントロールボックスじゃなくてテキストボックスですね。
変な説明になってしまいました。

まず、必要に合わせてページヘッダー
又はレポートヘッダーにテキストボックスを作ります。
そのテキストボックスにカウント関数”=Count([****])”を入力し
****に詳細にあるフィールドを何でも良いので指定します。
(何を指定しても、レコード数は同じなので何でも大丈夫だと思います。)
そうすると、そのフィールドのレコード数が
カウントされて出てくると思うのですが。

braidalさんが...続きを読む

QAccess 条件に合うレコード数をカウントできません

下のようなクエリ結果を出す方法がわかりません。
Excelのcountif()のような関数はないのでしょうか?

●テーブル
日付 名前  売上
1/1 山口高   0
1/1 浅野   500
1/1 新美  1,000
1/2 山口高   0
1/2 浅野  1,000
1/2 新美  2,000
1/3 山口高 3,000
1/3 浅野  2,000

●クエリ: 1,000円以上売り上げた日数は?
   出勤数 1,000円以上の日数
山口高 3    1
浅野  3    2
新美  2    2

抽出条件: >= 1000
集計: カウント
としても、出勤数と同じ値で出力されてしまいます。
●正しくない現状
   出勤数 1,000円以上の日数
山口高 3    3
浅野  3    3
新美  2    2


1,000円以上の日数だけを抽出するクエリを、別に用意しなければならないのでしょうか?

Aベストアンサー

まず、「名前」の集計欄は「グループ化」、「日付」の集計欄は「カウント」のままでOKとします。
で、「売上」が1000円以上の時に"1"とするフィールドを設けて、内容を下記のようにします。

フィールド: → 「 1000以上日数: IIf([売上]>=1000,1,0) 」
集計: → 「合計」

このフィールドは[売上]が1000以上のときに"1"が立ちますので、それの合計を求めることで日数の合計とします。

こんな感じでしょうか(^^)

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESS DCOUNTの抽出条件について

式1: DCount("コード","テーブル","コード=" & [テーブル]![コード])

結果の2以上のものを抽出したいのですが、どのように記述するのでしょうか?

>1または>=2またはnot 1でもいいですが・・・
記述方法が良く分かりません。

Aベストアンサー

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも上記エラーが出ているようでしたら、
 元となるテーブルとクエリの情報(フィールド名とデータ型)をお知らせ下さい)
※なお、コードは数値型と想定しています。もしも文字列方の場合は、併せて
 式を「"コード='" & [テーブル]![コード] & "'"」と変更する必要があります。

上記のエラーを回避するには、DCountの第1引数を「*」にします。
また、コードがNullのレコードで、クエリの表示結果が「#エラー」となるのを
回避するためには、第3引数にNz関数を使用します。
(コードの最小値は0か1でしょうから、「最小値-1」(=-1か0)にするのがよいかと
 思います)

【Nullは重複数に含めない場合】
DCount("*","テーブル","コード=" & Nz([テーブル]![コード],-1))
※コードがNullの場合は、第3引数の結果がTrueにならない(Null=-1)ので
 0件扱いとなるため、抽出条件の「>1」で弾かれます。
 また、第3引数にNz関数を使用する代わりに、クエリの『コード』の抽出条件に
 「Is Not Null」を指定する(→最初から集計の対象外にする)方法もあります。

【Nullも1つのコードとして重複扱いする場合】
DCount("*","テーブル","Nz(コード,-1)=" & Nz([テーブル]![コード],-1))

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも...続きを読む

QAccessのレポートの集計に条件をつけたい

いつもお世話になります。
Access2010でレポートでの集計を行う際に条件をつけるには、どうすればよいか
教えて下さい。
レポートを作成した際、販売店コードでグループ化しています。
その中で消費者コードのレコードをカウントし、販売店コードフッターでカウント数を
プリントしています。
このレコード数をカウントする際に、すべてのレコードではなく、そのレコード内にある
売上額の欄が0円より大きい(売上がある)消費者の件数をカウントするようにしたいと
考えています。
明細行には売上のない消費者もプリントされるため、プリントされる行数とカウント数は
異なってきますが、それはかまいません。
また売上がない消費者も含めた全レコード数も必要ありません。
このような条件を指定するにはどうすればよいでしょうか?
よろしくお願いします。

Aベストアンサー

、販売店コードフッターに配置したテキストボックスのコントロールソースを下記のように設定してください。

=Sum(IIf([売上額]>0,1,0))

Qアクセス クエリ Countif関数

クエリの式ビルダに
test: Count(テーブル1!フィールド1)
でテーブル1のフィールドの件数を数えられたのですが
フィールド1には日付が投入されていて
2008/11/1~2008/11/10
までの個数を数えるにはどうすればいいでしょうか?
アドバイスお願い致します。

Aベストアンサー

クエリ式のビルダはよくわからないので参考になるかはわかりませんが。ACCESSのSQLであれば以下のとおりです。
SELECT Count(フィールド1) AS 個数
FROM テーブル1
WHERE フィールド1 Between #11/01/2008# And #11/10/2008#;

Qアクセスのフォーム上でのカウントについて

access2003を使用しています。

フォーム上で、A、B、C の3ランクをクエリから抽出して表示させています。

総件数はテキストボックスのコントロールソースに
=Count([ランク])

で、表示されるのですが、
ランクごとの小計が
=DCount([ランク],"A")では、フォームビューでは「#エラー」と表示されてしまいます。

記述が間違っているのでしょうか?それとも使用できないのでしょうか・・・。同じことをレポートで行おうとしたら、総件数も「#エラー」となってしまいました。

ランクごとの小計の出し方を教えてください。

Aベストアンサー

DCountはテーブルやクエリのレコードをカウントします
フォームのレコードをカウントするのなら普通の集計関数のほうがいいですね

=Sum(IIf([ランク]="A",1,0))

DCountでも出来なくはありませんが
DCount("クエリ名","*","(フォームで何らかの絞込みを行っていればその条件)")
と面倒なことになります

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

Qアクセスのクエリ 重複数のカウント方法

アクセスのクエリ内で、複数の重複がありますが、それぞれの重複カウントをしたいのですが、その式をご存知の方、教えていただけないでしょうか?

Aベストアンサー

#3さんの回答は、標準的なSQLです、Access2000では通りませんでした。Accessではorder by、havingで別名が使えません。最新バージョンで試した訳ではないので、今は使えるようになっているかもしれませんが、念のため書き直すとこうなります。

【SQL例1】
select 名前,count(*) as cnt from 表名
group by 名前
order by count(*) desc

【SQL例2】
select 名前,count(*) as cnt from 表名
group by 名前
having count(*)>1
order by count(*) desc

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング