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

このQ&Aのポイント
  • ACCESS2000の環境で、期間と品番によるデータ抽出を行いたい場合、テキスト期間Bが空白の場合はテキスト期間A以降のデータを抽出し、テキスト期間Aが空白の場合はテキスト期間B以前のデータを抽出します。さらに、テキスト品番が空白の場合は期間のみでの抽出を行います。
  • コードの実行時エラー2465が発生している場合、'サブフォーム'フィールドが見つからないことが原因です。コード内で指定しているフィールド名やオブジェクト名が正しいか確認しましょう。
  • ACCESSデータベースの操作に慣れていない場合は、コードの書き方やオブジェクトの指定方法について学習することをおすすめします。また、データベースのエラーメッセージを調査し、適切な修正を行うことも重要です。
回答を見る
  • ベストアンサー

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

日付によるデータ抽出について 環境: 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 上記エラーが出てしまうのですが、まだまだ未熟で どこが悪いかわからなくて困っております。 間違っていたりと上手くないコードだとは思いますが ご教授の程宜しくお願い致します。   

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

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

>Me!サブフォーム.Form.Filter = 抽出条件 ← 実行時エラー2465 ここでサブフォームはサブフォームそのもの ではなく、メインフォームでサブフォームを 表示するコントロールを示します。 メインフォームでサブフォームを表示する コントロールを貼り付けると、既定値では 埋め込み0とかいう名前で登録されます。 したがって、既定値のままで表示すると、 Me!埋め込み0.Form.Filter = 抽出条件 となり、他の表現をすると Me![サブフォームを表示するコントロール名].Form.Filter = 抽出条件 となります。

taho1999
質問者

お礼

新しい質問を出したので、こちらの質問は閉じないと・・・ですね。 すみません。 まだこのサイト使い慣れてなくて・・・。 この板で1歩全身できた回答なので、こちらをベストアンサーに させて頂きます。 色々ご面倒お掛けしました。 本当にありがとうございます。

taho1999
質問者

補足

piroin654さん色々ありがとうございます。 ご指摘の通り名前を変更(訂正)したところエラーはなくなりました。 しかし、本来の目的である抽出が全然動いておらず エラーは出てなかったのですが、 これは、何が原因で、どのように改善したら良いのでしょうか? やはりIf文の組み方が悪いのでしょうか? 宜しくお願い致します。

その他の回答 (4)

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

まだ回答できたようですね。 新しい板に書き込みました。

回答No.4

抽出条件に希望する条件文字列が入っているか確認してみては? MsgBox 抽出条件 Me!サブフォーム.Form.Filter = 抽出条件 として、抽出条件の内容を確認してみてください。

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

SQLのエラーは勘違い。 ただ、 抽出条件 = "[レンタル日] Between " & Me!テキスト期間A & " & Me!テキスト期間B " And "[品番] = '" & Me!テキスト品番 & "'" では?はずしていたらごめん。

taho1999
質問者

お礼

度々ありがとうございます。 If文を書き換えても駄目でした。 今度は実行時エラー2001 直前の~ と出てしまいました。 コードを0から作り直すために 新しい質問で出してみます。 色々すみません。本当にありがとうございました。

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

えーっと、試していないのでこのような 感じでIf文を書き換えたらどうなりますか。 If IsNull(Me!テキスト期間A) = False Then If IsNull(Me!テキスト期間B) = True Then If IsNull(Me!テキスト品番) = True Then 抽出条件 = "[レンタル日] <= '" & Me!テキスト期間A & "'" End If End If End If それから、一番下の 抽出条件 = "[レンタル日] Between " $ Me!テキスト期間A & " & Me!テキスト期間B And "[品 番] = '" & Me!テキスト品番 & "'" は[レンタル日] とBetweenの関係が無いので多分エラー が出るのでは?

関連するQ&A

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

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

  • データの抽出で

    VB6.0 SQLSERVER  ID  品名  数量 コード 1  りんご  5  A-1 2  りんご  8  A-2 3 りんご  3  B-1 4  みかん  5  A-2 済みません。うまく説明できないのですが IDとコードの二つを抽出条件にしたいのです。 例えば1とコードA-1なら 1りんご5A-1を IDだけとかコードだけを条件にしたら うまく抽出できるのですが 2つになると「型が一致しません」とエラーになってしまいます。 お願いします。 教えてください。 Public Sub GetYukouzaiSuu(Optional Result As Boolean = True) Dim sSQL As String Dim dYukouzaiSuu As Double sSQL = ("品番=" + pvBase.CvtSQL(txtHinban.Text)) AND ("棚番=" + pvBase.CvtSQL(txtTanaban.Text)) dYukouzaiSuu = pvBase.CvtDbl(pbAdo.Lookup("m_zaiko", "isnull(実在庫数,0)-isnull(引当数,0)", sSQL)) numYukouzaiSuu.Value = MaxValueCheck(dYukouzaiSuu, numYukouzaiSuu.MaxValue) If pvBase.CvtLng(txtSeihinID.Text) = 0 Then If pvBase.StrLen(txtHinban.Text) > 0 Then labHinbanSt.Caption = "!" End If Else labHinbanSt.Caption = "" End If End Sub

  • VBAで日付型とテキストでフィルタをかけるには?

    テーブルのデータは フィールド1 2012/1/1 2012/1/2 2012/1/3 2012/1/4 2012/1/5 2012/1/6 2012/1/7 2012/1/8 2012/1/9 2012/1/10 フィールド2 A A A A A B B B B B です。 このクエリをもとに票フォームを作成して、 ・txt_始まりテキスト ・txt_終わりテキスト ・txt_フィールド2テキスト を作りました。 あとコマンドボタン(cmd_抽出)も作りました。 このコマンドボタンを押して 日付とテキストを抽出したいのですがVBAでのやり方を教えてください。 クエリなら ------------------------------------------------------------ SELECT テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.フィールド1) Between #1/4/2012# And #1/6/2012#) AND ((テーブル1.フィールド2)="A")); でできました。 ------------------------------------------------------------ しかしVBAで ------------------------------------------------------------ Private Sub cmd_抽出_Click() Me.Form.Filter = "フィールド1 Between #" & Me.txt_始まりテキスト.Value & "# And #" & Me.txt_終わりテキスト.Value & "#" & _ "' And フィールド2 like '*" & Me.txt_フィールド2テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub ------------------------------------------------------------ をすると、 ------------------------------ 実行時エラー3075 構文エラー:演算子がありません。 ------------------------------ になります。 どうすればいいか教えてください。 結果は、 ------------------------------ フィールド1 フィールド2 2012/01/04 A 2012/01/05 A ------------------------------ です。 ご回答よろしくお願いします。

  • 複数条件でのレコード抽出について

    いつも大変お世話になっています。 複数条件でのレコード抽出で教えていただけますでしょうか? 下記のようなサンプルコードを見つけ、実際に抽出できることを確認しました。 ただ、テーブル名:学生名簿の 身長と体重のデータ型が数値型である必要が あるようで、他の型では Set rs = CurrentDb.OpenRecordset(SQL) でエラー となってしまいます。テキスト型の入力でエラーが出ないように記述するには どうしたらよいのでしょうか? Access2010、Win7を使用しています。 サンプルコードは身長と体重を入力し、条件にあった内容をテキスト1に出力する コードです。 ーーサンプルコードーー Option Compare Database Private Sub コマンド8_Click() Dim SQL As String Dim rs As Recordset If IsNull(Me!テキスト2) Then MsgBox "抽出する身長を入力してください。" Me!テキスト2.SetFocus Exit Sub End If If IsNull(Me!テキスト3) Then MsgBox "抽出する体重を入力してください。" Me!テキスト3.SetFocus Exit Sub End If Me!テキスト1 = Null SQL = "SELECT 学生ID,身長,体重 FROM 学生名簿 WHERE 体重>=" & Me!テキスト3 & " AND 身長>=" & Me!テキスト2 Set rs = CurrentDb.OpenRecordset(SQL) Do Until rs.EOF Me!テキスト1 = Me!テキスト1 & rs![学生ID] & ": " & rs![身長] & " " & rs![体重] & vbCrLf rs.MoveNext Loop Set rs = Nothing End Sub

  • Accessフォームでの複数条件検索

    検索用テキストが4つとコンボボックスが1つあり、検索ボタンというコマンドボタンを押すと 該当するレコードを表示させるフォームを作りました。 以下がそのVBAです。 Private sub 検索ボタン_click() Dim strfilter As String, strexp As String, aryope As Variant If Not IsNull (me.一) Then strfilter = "And 出版社 Like '*" & Me.一 & "*'" End If If Not IsNull (me.コンボ62) Then strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'" End If If Not IsNull (me.三) Then strfilter = "And 番号 Like '*" & Me.三 & "*'" End If If Not IsNull (me.四) Then strfilter = "And 発刊日 = # " & Format (me.四. "yyyy-mm-dd") & "#" End If If Not IsNull (me.一) Then strfilter = strfilter & " AND " & BuildCritera ( "タイトル", dbText, "*" Replace ( me.五, "", "*AND*") & "*") End If 改正したいことは   1. 検索用テキストボックスに入力された値全てを満たすレコードを表示したい(現在は例えば     出版社、タイトル、番号の3つを入力するとそれぞれの項目にヒットする物がすべて検出さ     れる)   2. テキストボックス[三]の番号は完全一致で抽出したい(26を抽出したいのに126や2673     等も抽出されてしまう)   3. テキストボックス[四]の発刊日は西暦表示から和暦で入力して検索したい     (テキストボックス[四]をコンボボックスに変え、西暦・和暦両方表示にし、[四A]を追加して     月日という名前にしてこれら年月日をくっつけて完全一致で検索する方法を考えましたが     記述がわかりません)   5.タイトルがWeb検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • アクセスのフォームで

    アクセスのフォームで、品番一覧というテーブルを基にした、F品番一覧というフォームがあります。 ヘッダー部に検索するコンボボックスがあり、品番一覧テーブルの品番を参照しています。 検索ボタンを押すと、コンボボックスの内容に当てはまるものが、フォームの詳細部に一覧として表示させる様にしたのですが、品番に"50#1"や"50#2"という#を使い、1と2を分けている物があるのですが、コンボボックスで、この#が付いた物で検索すると検索結果がなにも表示されません。#が付いていない物はちゃんと一覧が表示されます。 #が付いている場合でもちゃんと表示するにはどの様にしたら良いですか?テーブル側の#を取り除く事はできません。 検索ボタンのコードは Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.txt氏名) Then strFilter = strFilter & " AND 品番 Like *" & Me.品番一覧 & "*" End If Me.Filter = Mid(strFilter, 5) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If となっています。 うまく説明できなくてすいませんが、誰か教えて頂けませんか? よろしくお願いします。 End Sub

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

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

  • (ACCESS)条件に応じて、テキストボックスを表示・非表示設定

    (ACCESS)条件に応じて、テキストボックスを表示・非表示設定 フォーム上のテキストボックスAを条件に応じて表示・非表示にさせたいです。 条件は、サブフォームのテキストボックスBに「支払」を言う文字があれば、 テキストボックスAが表示され、なければ非表示にする方法が探しています。 わからないなりに調べて、多分以下の文章になると思いますが、「?」の条件式がうまくいきません Private Sub AA_GotFocus() If  ????? Then Me!テキストボックスA.Visible = False Else Me!テキストボックスA.Visible = True End If End Sub どなたか教えてください。 宜しくお願い致します。

  • アクセスで期間抽出

    お尋ねします アクセスで納品書のデータベースがあります   納品書データFormには 伝票番号、日付、客先名、数量のフィールドのフォームで テキストボックス1:始めの日 テキストボックス2:終了日 コマンドボタン1:期間で抽出 が配置しています テキストボックス1,2に日付、記入後、コマンドボタン1をクリックして 所要期間でフィルターで抽出するのですがうまく行きません コマンドボタン1クリック時のコード Private Sub コマンド1_Click() Me.Filter = "日付= 'Between" & Me![テキスト1] & "And" & Me![テキスト2] & "'" Me.FilterOn = True End Sub のコードで抽出してくれません、不都合をご指摘下さい なお 指定日での抽出は以下で出来ました。 Private Sub コマンド1_Click()  Me.Filter = "日付= '" & Me![テキスト1] & "'" Me.FilterOn = True End Sub エクセルのモジュールは少しかじったのですがアクセスは 始めたばかりでなかなか要領を得ません 宜しくお教え下さい。

  • 1つのテキストボックスで全フィールドを検索するには

    1つのテキストボックスで全フィールドを検索するには Access2002使用です。 現在フォームにて、それぞれのフィールド毎に検索用のテキストボックスを用意してる為、 下記のようになっています。 これを、1つのテキストボックスで全てのフィールドを検索できるようにするには、 どこを訂正したらよろしいでしょうか? 宜しくお願い致します。 Option Compare Database Function exeFilter() Dim strFilter As String If Not IsNull(姓検索) Then strFilter = " AND 姓 Like '*" & Me.姓検索 & "*'" End If If Not IsNull(名検索) Then strFilter = strFilter & " AND 名 Like '*" & Me.名検索 & "*'" End If If Not IsNull(姓ふりがな検索) Then strFilter = strFilter & " AND ふりがな(姓) Like '*" & Me.姓ふりがな検索 & "*'" End If If Not IsNull(名ふりがな検索) Then strFilter = strFilter & " AND ふりがな(名) Like '*" & Me.名ふりがな検索 & "*'" End If If Not IsNull(住所1検索) Then strFilter = strFilter & " AND 住所1 Like '*" & Me.住所1検索 & "*'" End If If Not IsNull(住所2検索) Then strFilter = strFilter & " AND 住所2 Like '*" & Me.住所2検索 & "*'" End If If Not IsNull(住所1ふりがな検索) Then strFilter = strFilter & " AND 住所1ふりがな Like '*" & Me.住所1ふりがな検索 & "*'" End If If Not IsNull(住所2ふりがな検索) Then strFilter = strFilter & " AND 住所2ふりがな Like '*" & Me.住所2ふりがな検索 & "*'" End If Me.Filter = Mid(strFilter, 6) Me.FilterOn = True End Function Private Sub Form_AfterUpdate() End Sub

専門家に質問してみよう