日付によるデータ抽出について

このQ&Aのポイント
  • ACCESS2000の環境下で、期間と品番に基づいてデータを抽出する方法について教えてください。
  • メインフォームとサブフォーム、そして管理テーブルを利用し、期間と品番を組み合わせた抽出を行いたいです。
  • また、期間や品番が空白の場合にどのような抽出が行われるのかも教えていただけると助かります。
回答を見る
  • ベストアンサー

日付によるデータ抽出について

日付によるデータ抽出について 環境: ACCESS2000 状況: メインフォーム(テキスト期間A、テキスト期間B、テキスト品番、検索ボタン)    サブフォーム(データシート)    管理テーブル( 品番  /  レンタル日  /  返却日)    ※管理テーブルは他テーブルのコピー用 やりたい事: 簡潔にいうと期間と品番による抽出。       但し、テキスト期間Bが空白の場合、テキスト期間A以降のデータ抽出。          テキスト期間Aが空白の場合、テキスト期間B以前のデータ抽出。       さらに、テキスト品番が空白の場合、期間のみでの抽出。       逆にテキスト期間A・Bが空白の場合、テキスト品番で抽出。(品番の履歴抽出) 1度コードを作ってはみたものの、エラーばかりでひどかったので 0から教えて頂けると有難いです。 お手数お掛けしますが、何卒宜しくお願い致します。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

入力されたものだけで、展開する記述例) 「レンタル日」は日付/時刻型、「品番」はテキスト型と仮定します。 Private Sub 検索ボタン_Click()   Dim sWhere As String   Const sAndOr = " AND "   sWhere = ""   If (Not IsNull(Me.テキスト期間A)) Then     sWhere = sWhere & sAndOr & "[レンタル日] >= #" & Me.テキスト期間A & "#"   End If   If (Not IsNull(Me.テキスト期間B)) Then     sWhere = sWhere & sAndOr & "[レンタル日] <= #" & Me.テキスト期間B & "#"   End If   If (Not IsNull(Me.テキスト品番)) Then     sWhere = sWhere & sAndOr & "[品番] = '" & Me.テキスト品番 & "'"   End If   With Me '★     If (Len(sWhere) > 0) Then       .Filter = Mid(sWhere, Len(sAndOr) + 1)       .FilterOn = True     Else       .FilterOn = False       .Filter = ""     End If   End With End Sub ※ ★部分 With Me は自フォーム指定になるので、 自分に組み込んだサブフォームコントロール名を「FSUB」と仮定すると、 With Me.FSUB.Form の記述にすると、サブフォームへの設定になります。 条件を記述する場合、文字列先頭に必ず sAndOr を付加します。 条件ありの場合は、先頭の sAndOr を除いた分を条件設定します。 初めの記述で sWhere = sWhere &・・・ にしているのは、 条件判別/記述順番を入れ変えたり、条件を追加したりした際の変更を少なく、 程度のものです。 補足に書かれていたエラーは、おそらく以下で解消できるかと "#" And "[品番] = '" & Me!品番 & "'" ↓ "# And [品番] = '" & Me!品番 & "'"

taho1999
質問者

お礼

30246kikuさんありがとうございます。 コードまで書いて頂き、さらに説明があったので わかりやすかったです。 まだ完全に理解してはいないので、調べながら勉強していこうと思います。 また、補足にあったコードはご指摘通りにしたところ動作確認取れました。 Andの使い方とでも言えばいいのかわかりませんが、 その理解が間違っていたようですね。勉強になりました。 本当に助かりました。ありがとうございます。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

追加。 最後に、 Me!サブフォーム.Form.Filter = 抽出条件 Me!サブフォーム.Form.FilterOn = True Me!サブフォーム.Form.Requery db.Close Set db = Nothing End Sub としてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

見落としがありました。 前の板が閉まりかけていたのでこちらで。 >抽出条件 = "[レンタル日] >= '" & Me!テキスト期間B & "'" を 抽出条件 = "[レンタル日] >= # " & Me!テキスト期間B & "#" のように変更してみてください。他の箇所も同様に。 多分キャンセルはこれで解消されると思いますが。 抽出条件はそのままで試してみてください。

taho1999
質問者

お礼

piroin654さんいつも親切にありがとうございます。 ご指摘の通り「#」で囲んだら動作確認できました。 これは、Fomat()と同じ役割なのですね。 ネットで「#」を調べたらわかりました。 型を指定してあげないと判断が困難になっているために 今までは反応しなかったみたいですね。 ありがとうございます。 また、1つ教えて頂きたいのですが、 単に私のコードの組み方が悪いだけですが、どう改善したら良いものか わからないので・・・。 複数条件のコード 抽出条件 = "[レンタル日] Between #" & Me!テキスト期間A & "# And #" & Me!テキスト期間B & "#" And "[品番] = '" & Me!品番 & "'" 実行時エラー13 型が一致しません。 お手数をお掛けしますが、宜しくお願い致します。

関連するQ&A

  • 日付によるデータ抽出について

    日付によるデータ抽出について 環境: ACCESS2000 状況: メインフォーム(テキスト期間A、テキスト期間B、テキスト品番、検索ボタン)    サブフォーム(データシート)    管理テーブル( 品番  /  レンタル日  /  返却日)    ※管理テーブルは他テーブルのコピー用 やりたい事: 簡潔にいうと期間と品番による抽出。       但し、テキスト期間Bが空白の場合、テキスト期間A以降のデータ抽出。          テキスト期間Aが空白の場合、テキスト期間B以前のデータ抽出。       さらに、テキスト品番が空白の場合、期間のみでの抽出。    コード: Private Sub 検索ボタン_Click()  Dim db As DAO.Database   Set db = CurrentDb   db.Execute "DELETE * FROM 管理テーブル"   db.Execute "INSERT INTO 管理テーブル SELECT * FROM 他テーブル"  Dim 抽出条件 As String   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=True And IsNull(Me!テキスト品番)= True Then    抽出条件 = "[レンタル日] <= '" & Me!テキスト期間A & "'"   End If   If IsNull(Me!テキスト期間A)=True And IsNull(Me!テキスト期間B)=False And IsNull(Me!テキスト品番)= True Then    抽出条件 = "[レンタル日] >= '" & Me!テキスト期間B & "'"   End If   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=False And IsNull(Me!テキスト品番)= True Then    抽出条件 = "[品番] <= '" & Me!テキスト品番 & "'"   End If   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=True And IsNull(Me!テキスト品番)= False Then    抽出条件 = "[レンタル日] >= '" & Me!テキスト期間A & "'" And "[品番]='" & Me!テキスト品番 & "'"   End If   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=False And IsNull(Me!テキスト品番)= False Then    抽出条件 = "[レンタル日] Between " $ Me!テキスト期間A & " & Me!テキスト期間B And "[品番] = '" & Me!テキスト品番 & "'"   End If Me!サブフォーム.Form.Filter = 抽出条件 ← 実行時エラー2465 指定した式で参照されている'サブフォーム'フィールドが見つかりません。 Me!サブフォーム.Form.FilterOn = True End Sub 上記エラーが出てしまうのですが、まだまだ未熟で どこが悪いかわからなくて困っております。 間違っていたりと上手くないコードだとは思いますが ご教授の程宜しくお願い致します。   

  • ACCESS2000での最終データ検索又は抽出について。

    ACCESS2000での最終データ検索又は抽出について。 現在レンタル品管理をACCESS2000にて作成しているのですが、 ACCESSを勉強しながら(ネット検索等)作成しており ACCESSを始めて10日の初心者のため、行き詰ってしまったので ご質問させて頂きたいと思います。 状況 テーブル:レンタル品マスター       品番      貸出日      返却日     00000     2010/4/1    2010/4/16     11111     2010/4/2    2010/4/5     22222     2010/4/5     00000     2010/4/17    2010/4/20     33333     2010/4/18     00000     2010/4/22     11111     2010/4/23 フォーム:レンタル品管理      テキストボックス(textレンタル品番)      テキストボックス(text貸出日)      テキストボックス(text返却日)      コマンドボタン(command貸出)      コマンドボタン(command返却) 上記2点作成してあり、現在わからなく止まってしまっている所は (1) フォーム上のテキストボックス(textレンタル品番)に入力しエンターキー等を 押したら、入力したレンタル品番の最新の日付(貸出日)をフォーム上text貸出日に 表示させる。 ex textレンタル品番に 00000 と入力しエンターキー等を押すと   text貸出日に自動的に 2010/4/22 と表示される。 (2) (1)で表示させたデータに返却日をtext返却日に入力&command返却を押す事で 更新登録させる。 この2点がわからないのです。 まず(1)は  Private Sub textレンタル品番_AfterUpdate() ここからコードの書き方がわかりません。 多分 ADODB.Recordset 等使い、Max関数で抽出なのかなぁとは 考えているのですが、書き方がわからず、ネット検索で調べてみたものの 私ができ悪いため、理解できず・・・・なのです。 End Sub (2)は、どうしていいのか検討もついておりません。 皆様お手数お掛け致しますが、何卒ご教授の程宜しくお願い致します。 また、説明がわかりずらい・不足している等ございましたら 言って下さい。説明等の訂正・追加を致しますので。

  • 抽出したデータの重量を足したい

    VBA初心者です。 2つのデータ表から品番データを抽出し、データの重量も足したいです。 データ表(A)  品番 B1 10 B2 20 B3 30  データ表(B)  品番          重量 B8 10       C8 1000  B9 12       C9 2300 B10 10      C10 2000 (B)から品番10を抽出し、データにすることはできましたが、同時に品番10の重量も足したいのです。 よろしくおねがいします!

  • ACCESS で、古い日付順に抽出したい

    こんにちは。質問ばかりですみません。 EXCEL から ACCESS に移行するため、四苦八苦している者です。 たとえば下のようなCSV データがあったとします。 品番,納入日 A001,2006/1/24 A001,2006/2/10 A001,2006/2/13 A001,2006/2/14 A001,2006/2/15 B002,2006/1/26 B002,2006/2/3 B002,2006/2/14 B002,2006/2/24 B002,2006/2/27 C003,2006/1/27 C003,2006/2/7 C003,2006/2/9 C003,2006/2/14 C003,2006/2/21 品番に対して、日付は納入日です。 このデータに対して、以下のように一番近い日付だけ抽出し、納入日一覧クエリーを作りたいです。 品番,納入日 A001,2006/1/24 B002,2006/1/26 C003,2006/1/27 EXCEL だと日付順に並び替えてから、別シートからVLOOKUP で上から抽出してくれますよね。 アイデア下さい。 また、どんな言葉で検索していいかわからなくて、既出だったらごめんなさい。 ACCESS 97 で、WINDOWS 2000です。 よろしくお願いします。

  • Access データ抽出および集計の方法

    Access2016を使って下記データ抽出および集計をしたいのです。 テーブルA 商品CD 契約日 会社CD テーブルB 会社CD 契約期間開始日 契約期間終了日 テーブルC 商品CD 商品種別 テーブルAとテーブルCの商品CDをリレーション テーブルAとテーブルBの会社CDをリレーション 集計したいデータ 契約日が期間開始日~期間終了日に含まれるテーブルAのデータを抽出したいです。 これが取れれば、クロス集計で会社CD毎の商品種別の数を最終的に計算します。 期間開始日~期間終了日はそれぞれの会社CD毎に違います。 また、同じ会社CDに開始日~終了日以外の日付データも含まれています。 このような抽出はできないでしょうか?

  • 空白の日付型の抽出について

    初心者なのでどなたかご指導ください。 日付型のデータ「A」と「B」があります。 「A」が空白以外で、「B」が空白の時のデータをfilterを使って抽出したいのですが、上手くいきません。 こんな感じでやってみたのですが、やはり駄目でした。 objrs.filter = "A<>"" and isnull(objrs('B'))" どなたか教えてください。

  • 2つの条件をデータテーブルに照らし合わせデータを抽出する

    2つの条件をデータテーブルに照らし合わせデータを抽出する 品番  顧客ID  価格 35894  312    A 35894  635    B 35895  215    C 別のシートに下記の価格表があります。 品番   312    215     635 35894  12,000  13,000   14,000 35895  5,000   6,000     7,000 価格欄のA, B, Cに入力すべき数式はどうなるでしょうか。 A=12,000 B=14,000 C=6,000 と表示されるのが求めている結果です。 どなたか教えて下さい。 IFとINDEXとMATCHを使って6つの顧客IDまでなら実現できましたが 顧客数は約50ありますので行き詰まりました。

  • コンボボックスからのデータ抽出

    Access2000です。 hozon - テーブル コンボボックス-nenn(2003,2004) コンボボックス-tsuki(1月から12月) コンボボックス-hi(1日~31日) コマンドボタン-抽出ボタン があり、各コンボボックスで抽出したい年月日を選択してコマンド抽出ボタンをクリックして その下にサブフォームにてテーブルから抽出したデータを表示したいのですが、どのようなコードになるのか教えてくださいませんか? データは月別の場合と日にちべつの場合とできればうれしいのですが、、 初心者なのでよろしくお願いします。

  • SQLでデータを抽出する方法

    テーブルAとテーブルBがあり、AとBには「項目番号」と言うフィー ルドがそれぞれある。 この時、Aの「項目番号」とBの「項目番号」が一致しないデータを 抽出したい。 例: A:番号,名称   1 ,あ   2 ,い   3 ,う B:番号   1   4   5 この場合、抽出したいデータは、  番号   2 ,い   3 ,う なのですが、どうしても、   1 ,あ   1 ,あ   2 ,い   2 ,い   2 ,い   3 ,う   3 ,う   3 ,う となってしまいます。 どうしたら良いか教えてください。 よろしくお願いします。

  • アクセスでデーター抽出方法を教えて

    アクセスで、クエリー&サブフォームを使わず、テーブルのデータをフォーム上で抽出したいです。教えて下さい。(例)テーブル1:商品名A 商品番号2・・・・・、フォーム上で商品番号2と入力したら商品名Aだけを表示したい。

専門家に質問してみよう