グッドデザイン賞を受賞したウォーターサーバー >>

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

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

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

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

A 回答 (6件)

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引数は"コード"で問題ないようなので
コードが文字だった場合、「*」ということでしょうか?

「"コード='" & [テーブル]![コード] & "'"」

文字列の場合は’で囲うと聞いたことがありますが、
これは、どこに対してかけている事になるのでしょうか?
例えばテーブル!コードだとすると

"コード=" & '[テーブル]![コード]'
では駄目だということですよね?

区切りの位置が今ひとつ分からないのですが・・・。

補足日時:2009/08/14 13:49
    • good
    • 0

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)する場合は全件数を返しますので、
式の内容次第、ということになるかと思います。
(ご提示の式では演算子がらみのエラーになるかと思いますが)
    • good
    • 0
この回答へのお礼

>「フラグ」がTrueのレコードでは「4」
[フラグ]フィールドのレコードが評価され
表示されるということですね。

>文字列として扱われるため
うーん・・・
文字列として扱われるとフィールド全体の評価になるのですかね

分かったような、分からないような。

ともかく回答ありがとうございました。

お礼日時:2009/08/18 16:03

No.3,4です。



> コードは数値で第1引数は"コード"で問題ないようなので
> コードが文字だった場合、「*」ということでしょうか?

・・・すみません、また確認間違いをしていました(汗)

正しくは、第1引数に関係なく、コードがNullだった場合に、第3引数
での不正評価によってDCount関数の戻り値が「#エラー」となり、
抽出条件での「>1」の指定により『「#エラー>1」の正否』の不正評価
が発生することが原因でした。
大変失礼しました。


> 区切りの位置が今ひとつ分からないのですが・・・。

この件は、確かにややこしく、わかりやすい説明というのもしにくい
のですが・・・(汗)

データ型が「テキスト型」のフィールドを持つテーブルを元にクエリを
作成して、抽出条件を指定したことがあるかと思いますが、
その場合、指定したのが数値か文字列かに関わらず、抽出条件は
自動で「"」で括られます。
(数値型のフィールドの場合は、数値を指定すると括りは入らない)

DCount関数などの集計関数でも同様に、文字列の場合は条件を
「"」で括る必要があります。
ただ、第3引数は、通常は引数全体を文字列として指定するために
既に「"」で括られています。
そのため、「"」の代わりに「'」を使用します。
(なお、クエリの抽出条件でも、自動で追加される「"」の代わりに、
 予め「'」で括りを指定してやることもできます:
 検索したい文字列自体に「"」が含まれる場合に使ったりします)

例えば、『品名』フィールドが「筆記具」のものをカウントする場合は
 DCount("*","テーブル","品名='筆記具'")
といった感じです。
(第3引数に「品名='筆記具'」という文字列式を指定している)

一方、今回のご質問のように、第3引数の右辺を、レコードの値で
変化させたいという場合は、「筆記具」の部分に、レコードごとの
フィールドの値が入るように、「品名='(フィールドの値)'」という形に
してやらなければなりません。
つまり、左側の「品名='」と右側の「'」は一定(文字列)で、真ん中
だけフィールドに従属、ということです。

そのため、
 一定の文字列の部分は「"」で括り、
 フィールドの値を使用するところは「[テーブル]![○○]」
といった形で指定してやることになります。


> "コード=" & '[テーブル]![コード]'
> では駄目だということですよね?

そうですね、この状態ですと、「[テーブル]![コード]」は「'」で括られて
しまっていますので、フィールドの値ではなく「[テーブル]![コード]」と
いう文字列が検索条件になってしまいます。

区切り位置を、感覚的にもう少しわかりやすくする、という意味では、
フィールドの値を括るのに使用する「'」を完全に別扱いにして、
  「"コード=" & "'" & [テーブル]![コード] & "'"」
としてしまうのもいいかもしれません。


・・・参考になるとよいのですが・・・(汗)

この回答への補足

分かるような分からないような・・・

そもそも[]ではなく""でフィールドとテーブルを指定するのは
D関数の仕様なのですかね。

"コード="ではなく"コード"=とすると=が文字扱いになってしまう
と言う事なのですかね?
例えば
"コード" = & '"[テーブル]![コード]"'
では駄目なんですかね。
演算子は""に入れないと駄目?

それとこれはDCount("*","テーブル","品名='筆記具'")
DCount("品名","テーブル","品名='筆記具'")
でも問題ないですよね。

補足日時:2009/08/17 16:02
    • good
    • 0

前回のご質問では、確認不充分で失礼致しました(汗)


http://oshiete1.goo.ne.jp/qa5196729.html

> 記述方法が良く分かりません。

No.1の方の回答の通り、『抽出条件』欄(クエリのデザインビューの下半分の
領域、『表示』のチェックボックスの下)に、直接「>1」を記入すればOkです。
(または「>=2」でもOk。1万件程度のレコードが入ったテーブルで簡単なテスト
 をした限りでは、どちらでも速度に違いは見られませんでした:
 有意差が見られるよう、10秒程度掛かるように反復処理させて確認)

但し、式の記述は「"コード=" & [テーブル]![コード]」で問題ありません。

※重複があるものの確認ということでしたら、『集計クエリ』を使用した方が
 速度的には有利かと思いますので、よろしければ検討してみてください。


参考:
http://oshiete1.goo.ne.jp/qa5193921.html
「ACCESS DCOUNTの抽出条件につ」の回答画像3

この回答への補足

残念ながらそれでは、
コード=の構文エラー 演算子がありません。
不明。
とエラーメッセージが表示されます。

言われるように集計クエリ(カウント)ファイルを一つ作り
そのクエリを使い、結合プロパティで同じ行を求めるようにしました。

補足日時:2009/08/13 14:12
    • good
    • 0

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つ

サブクエリを使わなければ無理なのですかね・・・
よく分かりませんが。

補足日時:2009/08/13 14:04
    • good
    • 0

式1の結果が2以上のものを抽出したいということでしょうか?


その場合、式1となっているのでクエリだと思うのですが、そうであれば、式1の抽出条件欄に >=2 と入力すればよいです。

ただし、式1の記述方法に問題があるようです。

記述は、
DCount("[フィールド名]","テーブル名","抽出条件") となり、
抽出条件は例えば[個数]フィールドが10以上のレコード数をカウントする場合は、 "[個数]>=10" と記述します。

抽出条件として、
"コード=" & [テーブル]![コード] は誤りになるかと思います。
その辺は割愛します。

この回答への補足

その当たりが良く分かりません。

補足日時:2009/08/13 14:00
    • good
    • 0

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

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

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

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

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

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複数条件

Access2013で下記テーブルが2つあります。

T_代理店管理
代理店ID|代理店名|
00001|A(株)
00002|(株)あいう

T_店舗管理
店舗ID|店名|稼働フラグ|代理店ID
00001|AB|稼働中|00001
00002|CD|解約済|00001
00003|EF|稼働中|00001
00004|GH|(NULL)|(NULL)
00005|JK|稼働中|00002


T_代理店を基にした単票フォームF_代理店に、代理店IDごとの稼働店舗数を表示させたいのですが、
非連結のテキストボックスの、コントロールソースにDcount式を入れても
=Dcount("代理店ID","T_店舗管理", "[T_店舗管理]![代理店ID] ="& [Forms]![F_代理店管理]![代理店ID] & "" AND [T_店舗管理]![稼働フラグ] ='稼働中'")
#エラー となってしまいます。
単純なことだし、色んなQAに同様の投稿があって全て試したのですがどうやってもうまくできません。

出したい結果は、
F_代理店の代理店ID00001のページには2、代理店ID00002のページには1です。

添削して正しい式を教えていただけないでしょうか。

Access2013で下記テーブルが2つあります。

T_代理店管理
代理店ID|代理店名|
00001|A(株)
00002|(株)あいう

T_店舗管理
店舗ID|店名|稼働フラグ|代理店ID
00001|AB|稼働中|00001
00002|CD|解約済|00001
00003|EF|稼働中|00001
00004|GH|(NULL)|(NULL)
00005|JK|稼働中|00002


T_代理店を基にした単票フォームF_代理店に、代理店IDごとの稼働店舗数を表示させたいのですが、
非連結のテキストボックスの、コントロールソースにDcount式を入れても
=Dcount("代理店ID","T_店舗管理", "[T_...続きを読む

Aベストアンサー

関連するフォームは「F_代理店管理」 ではなく、「F_代理店」 ですよね?

> =Dcount("代理店ID","T_店舗管理", "[T_店舗管理]![代理店ID] ="& [Forms]![F_代理店管理]![代理店ID] & "" AND [T_店舗管理]![稼働フラグ] ='稼働中'")


「代理店ID」 は 数値型であるとして

=Dcount("代理店ID","T_店舗管理", "[代理店ID] =" & [Forms]![F_代理店]![代理店ID] & " AND [稼働フラグ] ='稼働中'")


自分のフォームのコントロールを参照するなら
フォーム名を省略するのが普通かな?

=Dcount("代理店ID","T_店舗管理", "[代理店ID] =" & [代理店ID] & " AND [稼働フラグ] ='稼働中'")


未確認です。間違っていたら御免。

QAccessのDCOUNT関数のcriteria

AccessでDCOUNT関数を使用したいのですが、
criteriaの書き方がよく分かりません。

「&」をつける場合や「'」をつける場合(文字列の場合に付ける
とはありますが)、「"」の有無など基本的な意味がわからないので
コンパイル時によくエラーになってしまいます。

それを詳しく解説してあるURLでもあれば教えていただきたいので
すが。
よろしくお願いいたします。

Aベストアンサー

> criteria部分の " や ’ がどれを囲んでいるのかが はっき分かりません。

= DCount("[出荷日]", "受注", "[出荷先都道府県] = '" _
& Forms![受注]![出荷先都道府県] & "' AND [出荷日] > #95-1-1#")

では、上記を例にして 第3引数のcriteria部分で使われている " と & と ' に
ついて説明します。

ご存知と思いますが、式の意味は、"受注"というテーブルまたはクエリの
[出荷先都道府県]フィールドの値が、"受注"というフォームの[出荷先都道府県]
という名のコントロールの値と一致し、且つ[出荷日]が、95/1/1より以降のものの
レコード数を算出する というものですね。

ここでは、条件として指定する「出荷先都道府県名」をフォームから参照していますが、
これを直接「東京都」を指定するとなれば、criteria部分は、

"[出荷先都道府県] = '東京都' AND [出荷日] > #95-1-1#"

のようになります。

引数は、文字列で指定することになっていますので、全体が " で括られて
全体が一つの文字列です。

また、[出荷先都道府県]フィールドが、テキスト型であるため東京都を ' で括る
必要があります。

それで、カウントするのは、東京都だけでなく、いろいろ変更したいとなれば、
フォームにテキストボックス等を配置し、そこで指定するようにする訳ですね。

このように他のコントロールから値を参照したり、変数の値を使う場合は、
その部分を文字列から外へ出さないといけません。

ですから一旦参照する手前で " を付けて切り、参照部分を連結演算子の & で
連結するのです。 その後方にまた & で残りの文字列を連結します。

つまり東京都の替わりに
" & Forms![受注]![出荷先都道府県] & "
がそっくり入ることになります。

このことは、この他の頭にDが付くDsumなどの定義域集合関数やSQL文にも共通します。

あと是非、デバッグ方法をマスターするようにしてください。

ここでエラーが出ということですが、この場合、この行にブレークポイントを設定して
実行し、イミディエイトウインドウに
? "[出荷先都道府県] = '" & Forms![受注]![出荷先都道府県] & "' AND [出荷日] > #95-1-1#"
と入力し、その行で<Enter>を押して、
[出荷先都道府県] = '東京都' AND [出荷日] > #95-1-1#
と返ってくるか確認します。

Accessのヘルプより詳しくこの部分を解説しているサイトは、見たことないですね。
まぁ、条件指定は、色々なケースがありますから、かなり応用が、必要になります。

> criteria部分の " や ’ がどれを囲んでいるのかが はっき分かりません。

= DCount("[出荷日]", "受注", "[出荷先都道府県] = '" _
& Forms![受注]![出荷先都道府県] & "' AND [出荷日] > #95-1-1#")

では、上記を例にして 第3引数のcriteria部分で使われている " と & と ' に
ついて説明します。

ご存知と思いますが、式の意味は、"受注"というテーブルまたはクエリの
[出荷先都道府県]フィールドの値が、"受注"というフォームの[出荷先都道府県]
という名のコントロールの値と一致し、且つ...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccess DCountでの連番について

DCountで連番を追加したいのですが演算対象条件の記述方法が良く分かりません。
調査用品別販売データクエリの商品コードフィールドに対して連番を振りたいです。
商品コード、連番
00110 1
00110 2
00120 1
00120 2
上記のようにしたいのですが
式1: DCount("商品コード","調査用品別販売データ","商品コード=" & [調査用品別販売データ]![商品コード])
これではエラーが出てしまいます。

Aベストアンサー

商品コードと同じようにしてやればいいのです

連番:式1: DCount("*","調査用品別販売データ","商品コード='" & [商品コード] & "' and ID <='" & ID & "'")

Qアクセス 抽出条件AかつBのカウント

度々すいません。

フィールド[色]のうち「赤色」
かつ
フィールド[大きさ]の「大」

である人(フィールド[名前])の数を抽出したいです。

Aさんは赤色の大をいくつ頼んだのか
・・・と言うことが分かれば良いのですが。

Aベストアンサー

カウントで良いなら
=DCOUNT("*","テーブル名","[名前]='A' And [色]='赤色' And [大きさ]='大'")
で出来ます。
検索値がフィールドの場合は
=DCOUNT("*","テーブル名","[名前]='" & Me![名前] & "' And [色]='" & Me![色] & "' And [大きさ]='" & Me![大きさ] & "'")
の様にすればカウントできます。

クエリで行う場合は条件抽出欄にて
「名前」「A」、「色」「赤色」、「大きさ」「大」で
「表示」「集計」を選択、項目はなんでも良いので追加して「集計」を「カウント」にしてください。

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で別テーブルの値をフォームに表示したい

初めての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...続きを読む

QAccessのフォーム上にレコード数とレコード番号の表示

Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。

フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。

以上よろしくお願いします。

Aベストアンサー

レコード番号のコントロールソースを
=[CurrentRecord]
レコード数のコントロールソースを
=Count("*")-[NewRecord]
としてみてください。


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

人気Q&Aランキング