はじめての親子ハイキングに挑戦!! >>

次のようなテーブルがあります。

 T_販売台帳
 [日付]   [商品] [売上]
 2017/4/1  ABC  100
 2017/6/1  ABC  100
 …

このテーブルから対象期間を指定して[商品]毎に[売上]を集計するクエリがあります。
これまではクエリの[日付]の抽出条件に
「Between #2017/08/01# And #2017/10/01#」
のように直接入力・修正して対応していましたが、集計対象期間を頻繁に変更する必要性が生じたため、手間を減らせないか考えております。

そこで、

 T_対象期間
 [自]     [至]
 2017/04/01 2017/06/01

上記のようなテーブルを作成し、
クエリの[日付]の抽出条件に
「Between [T_対象期間]![自] And [T_対象期間]![至] 」
と入れてみましたが、いざ実行するとパラメータクエリの入力画面が表示されてしまい、うまくいきませんでした。

クエリの抽出条件をどのように設定すれば実現できますでしょうか。
また、上記以外にも効果的な解決方法がありましたらご教示ください。

宜しくお願いします。

A 回答 (1件)

DLookup関数を使って[自]、[至]の値を指定してください。

    • good
    • 0
この回答へのお礼

Between DLookUp("自","T_対象期間") And DLookUp("至","T_対象期間")

これで解決しました。ありがとうございました。

お礼日時:2018/08/29 18:27

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

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

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

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QACCESS Dlookup関数

Dlookup関数を使えば、クエリの抽出条件に他のテーブルや、クエリの結果を使うことがわかりました。
しかし抽出条件が抽出するデータの種類(品種)により複数有る場合、その種類ごとにDlookup関数で指定しなければなりません。
そこで関数のDLookup(expr, domain [, criteria] ) 引数 criteriaを工夫する事で複数の条件をひとつの関数で出来ないものでしょうか。


品種tbl

品種 | 範囲(以下)
A | 100
B | 150

<抽出条件欄>
Dlookup("範囲","品種tbl",[品種tbl]="A")
Dlookup("範囲","品種tbl",[品種tbl]="B")
個の二つをひとつで出来ないものでしょうか。

またよく以下のような表記を見ますが、「& Me.車番入力欄 &」はどう解釈したらいいのでしょうか。
DLookup("[全長]","車種","[車番] = '" & Me.車番入力欄 & "'")

Aベストアンサー

嫌がらずに最後まで読んでね。
DLookup 関数を使用するには (応用編)
http://support.microsoft.com/kb/881378/ja

Dlookup("範囲","品種tbl","[品種]="'A' or [品種]='B'")

>Me.車番入力欄
はフォーム中で自身の[車番入力欄] を指し示す場合に使用します。
ヘルプにも載っているかと思いますが
http://www.accessclub.jp/bbs3/0031/superbeg12789.html
のDodonpaさんの説明をどうぞ。

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

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

Aベストアンサー

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

Q別のテーブルのフィールドを抽出項目にするには?

別のテーブルのフィールドを抽出項目にするには?

Access初心者です。
申し訳ありませんが、急ぎ回答いただきたく思います。
どうか宜しくお願いいたします。

お伺いしたい内容は、

データが多く、抽出条件も多いので、
別のテーブルのフィールドに入っている単語を使い、
抽出したい元データのレコードをあいまい検索して非表示にしたいです。

データの内容は下記になります。

---------------------------------------
元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ)
フィールド1 フィールド2
ID-1     りんご
ID-2     バナナ
・       ・
・       ・
・       ・
ID-2000    チェリー
---------------------------------------
---------------------------------------

除外リスト(テーブル3。名前は除外リスト)
フィールド1
りんご
チェリー



---------------------------------------

元データのフィールド2に
Not Like "*りんご*" And Not Like "*チェリー*"
と記述すれば、フィールド2にりんご、チェリーを含むレコード以外のものが表示され、
欲しい情報が手に入るのですが、(上記例だとバナナのみ表示される)
実際にはりんご、チェリーなどあいまい検索し、非表示にしたいキーワードが100個あります。

なので、除外リストというテーブルをつくり、
そのフィールド内に書かれたキーワードを使い
Not Like "*りんご*" And Not Like "*チェリー*"
と同じような表示結果になるようにしたいのですが、
やり方が調べてもどうしてもわかりません。

どうか皆様のお力を貸してください。
宜しくお願いいたします。

別のテーブルのフィールドを抽出項目にするには?

Access初心者です。
申し訳ありませんが、急ぎ回答いただきたく思います。
どうか宜しくお願いいたします。

お伺いしたい内容は、

データが多く、抽出条件も多いので、
別のテーブルのフィールドに入っている単語を使い、
抽出したい元データのレコードをあいまい検索して非表示にしたいです。

データの内容は下記になります。

---------------------------------------
元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ)
フィールド1 ...続きを読む

Aベストアンサー

以下でどうなるでしょうか。

元データのクエリの名前を「元データ」とします。
除外リストは、そのまま「除外リスト」名とします。

SELECT * FROM 元データ
WHERE NOT EXISTS (
SELECT 1 FROM 除外リスト
WHERE 元データ.フィールド2 LIKE "*" & 除外リスト.フィールド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で条件によってフォーム上のフィールドの色を変更

一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。

フィールドA | フィールドB | フィールドC | チェックボックス
チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。
チェックがなかったら白いまま。

というものです。
条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね?
フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。
どのようにすればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

フォームのデザイン画面で3つのフィールドすべて選択し条件付書式画面を表示させる。
条件1のコンボで”式”を選択。
右側の欄に[チェックボックスのコントロール名]=True
と入力し、バケツアイコンでグレーを選択。
(もちろん1フィールドづつ設定してもOK)

Q選択クエリで空欄のテーブルがあっても表示したい

選択クエリで4つのテーブルをひとつにしています。
テーブルA.B.C.Dとすると
A.Bまではデータが入力されていて、C.Dには入っていない場合、すべてのデータがデータシートに表示されなくなってしまいます。
データが入っていないテーブルがあっても、A.Bまでのデータは表示されるようにしたいのですが・・・。
リレーションシップのやり方が悪いのか・・・根本的に間違っているのか。なにか良い方法はありませんでしょうか?

Aベストアンサー

選択クエリの詳細は不明ですが・・。
リレーションの結合の仕方を変更してください。
選択クエリ上でAからB・C・Dへの結合線を右クリックで結合プロパティを表示してください。
今は多分[両方のテーブルの結合フィールドが同じ行だけを含める]になっていると思いますので
その結合をAの全レコードとBの同じ結合フィールドのレコードだけを含める]に変更してみてください。
これで表示できるはずです。

QACCESSでの別のテーブルのデータの参照方法

ACCESS初心者です。
教えてください。

「支払」テーブル、「担当表」テーブルがあります。
「支払」テーブルには、
ID(主キー)、サービス名、金額、支払日
「担当表」テーブルには、
ID(主キー)、サービス名、担当者
という項目があります。
この二つのテーブルは「サービス名」で連結してます。

今「支払」テーブルの入力フォームを作っていて、サービス名をプルダウンで選択出来るようにしたのですが、出来れば選択したら自動的に該当する担当者の名前を表示したいと思っています。
担当者名を表示するためのテキストボックスを作成し、プロパティでいろいろいじってみましたがどうもうまく行きません。

すごく基本的な質問で恐縮ですが、どうか助けてください。
宜しくお願いいたします。

Aベストアンサー

せっかく日付のデータがあるのに、わざわざ月別の集計が必要だからといって月だけのフィールドを追加するのも、あんまりスマートなやり方ではありません。

データベースの目的の一つは、同じ種類の情報を二重管理しない事もあります。
日付から、月だけを抽出するのが自然な方法でしょう。

ですが、SQL云々を悩むよりも、まずウィザードをぐりぐりいじって見てください。比較的単純な月ごとの合計値を出すクエリは10秒で出来ますよ。

クロス集計のクエリ自体は、非常に簡単にできますし、見てみればイメージもわきやすいでしょう。

それでデータが壊れるわけではないし、クエリなんて作っては消しての繰り返しで問題ないです。
もちろん、テーブルを消してしまってはまずいですけど(笑)
いろいろ試しているうちに、逆にこういうまとめ方もできるのかといった発見もあるかもしれませんよ。

QAccessの桁区切りについて教えてください。

アクセスのレポートの金額に、桁区切りのカンマを付けたいと思っています。
プロパティの書式を通貨にすると¥マークがついてしまいます。
合計は付いてもいいのですが、内訳には¥マークを付かないように桁区切りだけにしたいのです。

そのため、書式に『###,##0』としました。
できましたが、小数点以下が表示されません。

小数点を表示したいので『###,##0.###』としたら、『59,180.000』となってしまいます。
小数点の指定を自動から3桁表示に変えましたが、うまくいきません。

教えていただきたい内容としては、
・金額の表示に桁区切りのカンマを付けたい。
・でも¥マークは付けたくない。
・小数点以下該当があるもののみ3桁まで表示させたいが(5,500.365)、
 小数点以下がないものは小数点以下は表示させたくない(5,400)。

ぜひともアクセスを使いこなしている方、お教えください。

Aベストアンサー

この内容からですと、[金額]フィールドを「レコードの内容により、書式を変えたい」と
いうことですので、テキストで処理する方法よりないかと思います。(Access2000)

VBAによる「ユーザー定義関数」を使う方法ですが、それで良かったら手順を
詳しく書きますので、テストしてみてください。

・テーブルのデザインで[金額]フィールドを「数値型」の「単精度浮動小数点型」か
 「倍精度浮動小数点型」にします。

・「モジュール」の新規作成で開いたコードウィンドウに下記コードをコピーして
 貼り付けます。

・フォームのレコードソースにするためのクエリを作成します。
 必要なフィールドをQBEグリッド(画面の下側)にドラッグした後、
 新規フィールドに 例えば、 金額Txt:Valtxt([金額]) と入力します。

・レポートの[金額]のコントロールソースに、この[金額T]を指定します。
 この書式で「配置」を右に設定します。

これで、少数部がない数値は、整数部だけを表示し、位取りの , が付きます。
小数部がある場合は、4位を四捨五入します。(通常と同じ)
その結果、右側に 0 が付いた場合は、表示しません。

ご承知の上とは思いますが、表形式の場合、少数点位置が揃わなくなりますので
見ずらくなってしまいます。

このようなもので如何でしょうか。

Function Valtxt(V As Double) As String
Dim T As String
Dim N As Integer
T = Format(V, "#,##0.000")
For N = Len(T) To InStr(T, ".") Step -1
  If Mid(T, N, 1) = "0" Then
    T = Left(T, N - 1)
  Else
    Exit For
  End If
Next N
If Right(T, 1) = "." Then T = Left(T, Len(T) - 1)
Valtxt = T
End Function

この内容からですと、[金額]フィールドを「レコードの内容により、書式を変えたい」と
いうことですので、テキストで処理する方法よりないかと思います。(Access2000)

VBAによる「ユーザー定義関数」を使う方法ですが、それで良かったら手順を
詳しく書きますので、テストしてみてください。

・テーブルのデザインで[金額]フィールドを「数値型」の「単精度浮動小数点型」か
 「倍精度浮動小数点型」にします。

・「モジュール」の新規作成で開いたコードウィンドウに下記コードをコピーして
 ...続きを読む


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

人気Q&Aランキング