
No.4ベストアンサー
- 回答日時:
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))
この回答への補足
>上記のエラーを回避するには、DCountの第1引数を「*」にします。
コードは数値で第1引数は"コード"で問題ないようなので
コードが文字だった場合、「*」ということでしょうか?
「"コード='" & [テーブル]![コード] & "'"」
文字列の場合は’で囲うと聞いたことがありますが、
これは、どこに対してかけている事になるのでしょうか?
例えばテーブル!コードだとすると
"コード=" & '[テーブル]![コード]'
では駄目だということですよね?
区切りの位置が今ひとつ分からないのですが・・・。
No.6
- 回答日時:
No.3/4/5です。
> それとこれはDCount("*","テーブル","品名='筆記具'")
> DCount("品名","テーブル","品名='筆記具'")
> でも問題ないですよね。
この例なら、それで大丈夫です。
(第3引数を省略した場合は、品名がNullのものがカウントの
対象になるかどうかが変わりますが、上記の例では第3引数
の条件によって、どちらもNullが除外されるので)
> そもそも[]ではなく""でフィールドとテーブルを指定するのは
> D関数の仕様なのですかね。
上の「DCount("品名","テーブル","品名='筆記具'")」の式は、
実は
「DCount("[品名]","テーブル","[品名]='筆記具'")」とか
「DCount("[品名]","[テーブル]","[品名]='筆記具'")」と
書くこともできるんです。
(特に、フィールドについては、「品名 A」といったように、間に
半角スペースが入った名前の場合は、角括弧が必須)
集計関数(DCountなど)の引数を、「""」で括るかどうかは、
引数に指定したフィールドや式などをいつ評価するか、という
タイミングの指定になっています。
例えば、テーブル1が以下のようだったとします(全4レコード):
【コード】 【品名】 【フラグ】
0 いちご True
1 りんご False
2 なし False
3 みかん True
(「フラグ」のデータ型はYes/No型とします)
このとき、
式1: DCount("*","テーブル1",[フラグ])
だと、クエリの各レコードで「フラグ」フィールドが評価されます。
そのため、「フラグ」がTrueのレコードでは「4」が、またFalseの
レコードでは「0」が、それぞれ表示されます。
(DCount関数は、第3引数の評価結果が「False(=0)」の
レコードは無視し、それ以外のレコードをカウントします)
一方、
式1: DCount("*","テーブル","[フラグ]")
にすると、「""」で括られているために、クエリでは文字列として
扱われるため、クエリ内での「フラグ」フィールドの値には依存
しなくなります。
その結果、(第2引数で指定した)「テーブル1」での「フラグ」が
評価され、「フラグ」がTrueになっているレコードの数(=2)を、
全てのレコードで返すことになります。
(なお、第3引数の「"[フラグ]"」は、Access上では
「"[フラグ]=True"」を指定したものとみなされるため、
上記のような結果になります)
> 演算子は""に入れないと駄目?
これも、式の結果が不正(=False)な場合、例えば
DCount("*","テーブル1",1=2)
のような条件を指定すると「0」しか返しませんし、
DCount("*","テーブル1",1=1)
のように式が成立(=True)する場合は全件数を返しますので、
式の内容次第、ということになるかと思います。
(ご提示の式では演算子がらみのエラーになるかと思いますが)
>「フラグ」がTrueのレコードでは「4」
[フラグ]フィールドのレコードが評価され
表示されるということですね。
>文字列として扱われるため
うーん・・・
文字列として扱われるとフィールド全体の評価になるのですかね
分かったような、分からないような。
ともかく回答ありがとうございました。
No.5
- 回答日時:
No.3,4です。
> コードは数値で第1引数は"コード"で問題ないようなので
> コードが文字だった場合、「*」ということでしょうか?
・・・すみません、また確認間違いをしていました(汗)
正しくは、第1引数に関係なく、コードがNullだった場合に、第3引数
での不正評価によってDCount関数の戻り値が「#エラー」となり、
抽出条件での「>1」の指定により『「#エラー>1」の正否』の不正評価
が発生することが原因でした。
大変失礼しました。
> 区切りの位置が今ひとつ分からないのですが・・・。
この件は、確かにややこしく、わかりやすい説明というのもしにくい
のですが・・・(汗)
データ型が「テキスト型」のフィールドを持つテーブルを元にクエリを
作成して、抽出条件を指定したことがあるかと思いますが、
その場合、指定したのが数値か文字列かに関わらず、抽出条件は
自動で「"」で括られます。
(数値型のフィールドの場合は、数値を指定すると括りは入らない)
DCount関数などの集計関数でも同様に、文字列の場合は条件を
「"」で括る必要があります。
ただ、第3引数は、通常は引数全体を文字列として指定するために
既に「"」で括られています。
そのため、「"」の代わりに「'」を使用します。
(なお、クエリの抽出条件でも、自動で追加される「"」の代わりに、
予め「'」で括りを指定してやることもできます:
検索したい文字列自体に「"」が含まれる場合に使ったりします)
例えば、『品名』フィールドが「筆記具」のものをカウントする場合は
DCount("*","テーブル","品名='筆記具'")
といった感じです。
(第3引数に「品名='筆記具'」という文字列式を指定している)
一方、今回のご質問のように、第3引数の右辺を、レコードの値で
変化させたいという場合は、「筆記具」の部分に、レコードごとの
フィールドの値が入るように、「品名='(フィールドの値)'」という形に
してやらなければなりません。
つまり、左側の「品名='」と右側の「'」は一定(文字列)で、真ん中
だけフィールドに従属、ということです。
そのため、
一定の文字列の部分は「"」で括り、
フィールドの値を使用するところは「[テーブル]![○○]」
といった形で指定してやることになります。
> "コード=" & '[テーブル]![コード]'
> では駄目だということですよね?
そうですね、この状態ですと、「[テーブル]![コード]」は「'」で括られて
しまっていますので、フィールドの値ではなく「[テーブル]![コード]」と
いう文字列が検索条件になってしまいます。
区切り位置を、感覚的にもう少しわかりやすくする、という意味では、
フィールドの値を括るのに使用する「'」を完全に別扱いにして、
「"コード=" & "'" & [テーブル]![コード] & "'"」
としてしまうのもいいかもしれません。
・・・参考になるとよいのですが・・・(汗)
この回答への補足
分かるような分からないような・・・
そもそも[]ではなく""でフィールドとテーブルを指定するのは
D関数の仕様なのですかね。
"コード="ではなく"コード"=とすると=が文字扱いになってしまう
と言う事なのですかね?
例えば
"コード" = & '"[テーブル]![コード]"'
では駄目なんですかね。
演算子は""に入れないと駄目?
それとこれはDCount("*","テーブル","品名='筆記具'")
DCount("品名","テーブル","品名='筆記具'")
でも問題ないですよね。
No.3
- 回答日時:
前回のご質問では、確認不充分で失礼致しました(汗)
http://oshiete1.goo.ne.jp/qa5196729.html
> 記述方法が良く分かりません。
No.1の方の回答の通り、『抽出条件』欄(クエリのデザインビューの下半分の
領域、『表示』のチェックボックスの下)に、直接「>1」を記入すればOkです。
(または「>=2」でもOk。1万件程度のレコードが入ったテーブルで簡単なテスト
をした限りでは、どちらでも速度に違いは見られませんでした:
有意差が見られるよう、10秒程度掛かるように反復処理させて確認)
但し、式の記述は「"コード=" & [テーブル]![コード]」で問題ありません。
※重複があるものの確認ということでしたら、『集計クエリ』を使用した方が
速度的には有利かと思いますので、よろしければ検討してみてください。
参考:
http://oshiete1.goo.ne.jp/qa5193921.html

この回答への補足
残念ながらそれでは、
コード=の構文エラー 演算子がありません。
不明。
とエラーメッセージが表示されます。
言われるように集計クエリ(カウント)ファイルを一つ作り
そのクエリを使い、結合プロパティで同じ行を求めるようにしました。
No.2
- 回答日時:
Sub test12()
MsgBox DCount("[個数]", "所持品", "[個数]>1")
End Sub
(確認済み)
例データ
所持品テーブル
ID氏名住所個数
1山田Å市3
2山田Å市0
3山田Å市1
4鈴木B市2
5鈴木B市3
6田中C村3
7田中C村1
8田中C村2
のような、"[個数]>1"の書き方になると思います。
結果 5
==
]![コード])がパラメータクエリを意図するなら、この関数中で[ ]では出来ないようです。
氏名をその都度指定したいならVBAで
Sub test11()
n = InputBox("名指定")
MsgBox DCount("[氏名]", "所持品", "[氏名]=" & Chr(39) & n & Chr(39))
End Sub
のようにすれば出来るようです。
この回答への補足
よく意味が分かりません。
具体的なフィールドをあげると
コード_ID
1_1
1_2
2_3
3_4
3_5
ここでコード1に関しては2つ
コード2に関しては1つなので抽出対象外←これが出来ない。
コード3に関しても2つ
サブクエリを使わなければ無理なのですかね・・・
よく分かりませんが。
No.1
- 回答日時:
式1の結果が2以上のものを抽出したいということでしょうか?
その場合、式1となっているのでクエリだと思うのですが、そうであれば、式1の抽出条件欄に >=2 と入力すればよいです。
ただし、式1の記述方法に問題があるようです。
記述は、
DCount("[フィールド名]","テーブル名","抽出条件") となり、
抽出条件は例えば[個数]フィールドが10以上のレコード数をカウントする場合は、 "[個数]>=10" と記述します。
抽出条件として、
"コード=" & [テーブル]![コード] は誤りになるかと思います。
その辺は割愛します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- その他(プログラミング・Web制作) パイソン。スクレイピング。Chromeドライバーの使い方を教えてください。 1 2023/06/14 21:55
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) VBAのフィルター操作 5 2023/08/08 09:48
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) リストポックスへの抽出方法 1 2022/08/10 17:58
- Excel(エクセル) 【詳しい方教えて下さい】EXCEL条件に一致する値の複数抽出 9 2022/04/29 10:56
このQ&Aを見た人はこんなQ&Aも見ています
-
【Access】Dcount関数の複数条件で順位を付ける方法について
Access(アクセス)
-
AccessのDCOUNT関数のcriteria
Access(アクセス)
-
DCOUNT関数がなぜかカウントしない
Excel(エクセル)
-
-
4
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
5
Access2010 「演算子がありません」エラー
その他(データベース)
-
6
「#エラー」の回避
Access(アクセス)
-
7
Access Dcount関数で引数が指定できない
その他(プログラミング・Web制作)
-
8
AccessフォームのDcount複数条件
その他(Microsoft Office)
-
9
アクセス DCountの返り値が必ず0になる
Excel(エクセル)
-
10
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
11
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
12
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
13
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
ACCESSの空白をカウントする
Access(アクセス)
-
16
ACCESS VBAの実行時エラーなんですが
PowerPoint(パワーポイント)
-
17
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
18
Access VBAでクエリーのレコード件数を取得したいのですが
その他(データベース)
-
19
Access クエリ 複数条件で実施件数をカウント、表示する いつも大変お世話になっておりま
その他(Microsoft Office)
-
20
ACCSESS2013VBA フォームのレコードソースを変更する
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS VBAでテーブル内の特定...
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
【access】複数のフィールドの...
-
社員名簿から検索する関数
-
SQLServer→Access インポート
-
ACCESS について
-
access vbaで前景色を指定したい
-
Accessで縦と横を入れ替えたい
-
accessでデータをフォームに代...
-
Access vbaで重複レコードの削...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
Excelシート上のマクロを登録し...
-
VBA エンターキーでイベントに...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
CloseとDisposeの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
【access】複数のフィールドの...
-
アクセスで連続データをテーブ...
-
Access vbaで重複レコードの削...
-
ACCESS VBAでテーブル内の特定...
-
SQLServer→Access インポート
-
VBAでテーブル名とカラム名を動...
-
sql文で削除クエリを書く
-
重複した複数のレコードを1レ...
-
抽出条件でデータ型が一致しま...
-
別のaccessファイルからデータ...
-
アクセスで定数を利用したい。
-
Accessで縦と横を入れ替えたい
-
DAOでSQLServerに接続し、LeftJ...
-
ACCESSのクエリ、SQLに変数を使...
-
ACCESSで実行時エラー3008
-
社員名簿から検索する関数
-
VB.NETでテーブルを作成
-
ACCESSで購入回数を表示する方...
おすすめ情報