日付によるデータ抽出について
環境: ACCESS2000
状況: メインフォーム(テキスト期間A、テキスト期間B、テキスト品番、検索ボタン)
サブフォーム(データシート)
管理テーブル( 品番 / レンタル日 / 返却日)
※管理テーブルは他テーブルのコピー用
やりたい事: 簡潔にいうと期間と品番による抽出。
但し、テキスト期間Bが空白の場合、テキスト期間A以降のデータ抽出。
テキスト期間Aが空白の場合、テキスト期間B以前のデータ抽出。
さらに、テキスト品番が空白の場合、期間のみでの抽出。
逆にテキスト期間A・Bが空白の場合、テキスト品番で抽出。(品番の履歴抽出)
1度コードを作ってはみたものの、エラーばかりでひどかったので
0から教えて頂けると有難いです。
お手数お掛けしますが、何卒宜しくお願い致します。
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!品番 & "'"
30246kikuさんありがとうございます。
コードまで書いて頂き、さらに説明があったので
わかりやすかったです。
まだ完全に理解してはいないので、調べながら勉強していこうと思います。
また、補足にあったコードはご指摘通りにしたところ動作確認取れました。
Andの使い方とでも言えばいいのかわかりませんが、
その理解が間違っていたようですね。勉強になりました。
本当に助かりました。ありがとうございます。
No.2
- 回答日時:
追加。
最後に、
Me!サブフォーム.Form.Filter = 抽出条件
Me!サブフォーム.Form.FilterOn = True
Me!サブフォーム.Form.Requery
db.Close
Set db = Nothing
End Sub
としてください。
No.1
- 回答日時:
見落としがありました。
前の板が閉まりかけていたのでこちらで。
>抽出条件 = "[レンタル日] >= '" & Me!テキスト期間B & "'"
を
抽出条件 = "[レンタル日] >= # " & Me!テキスト期間B & "#"
のように変更してみてください。他の箇所も同様に。
多分キャンセルはこれで解消されると思いますが。
抽出条件はそのままで試してみてください。
piroin654さんいつも親切にありがとうございます。
ご指摘の通り「#」で囲んだら動作確認できました。
これは、Fomat()と同じ役割なのですね。
ネットで「#」を調べたらわかりました。
型を指定してあげないと判断が困難になっているために
今までは反応しなかったみたいですね。
ありがとうございます。
また、1つ教えて頂きたいのですが、
単に私のコードの組み方が悪いだけですが、どう改善したら良いものか
わからないので・・・。
複数条件のコード
抽出条件 = "[レンタル日] Between #" & Me!テキスト期間A & "# And #" & Me!テキスト期間B & "#" And "[品番] = '" & Me!品番 & "'"
実行時エラー13 型が一致しません。
お手数をお掛けしますが、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) Excelでデータを抽出するに良い方法 9 2023/02/06 12:42
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(Microsoft Office) 【スプレッドシート】最初の契約日と最後の契約期間を抽出したい 添付のように派遣先、スタッフ、契約開始 2 2023/03/13 21:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
小学1年生の子です。塾に行かせ...
-
楽しくて最高のプログラミング...
-
ラズパイpico PIOモード
-
Pythonでgif画像が上手く作れない
-
pythonで複数画像からgifを作る...
-
プログラミング
-
vba クリップボードクリアにつ...
-
RTKPOSTのファイル生成について
-
プログラミング ソースコード
-
正規表現で複数マッチ条件で悩...
-
windowsでテキストファイルの各...
-
スカラーのベクトル微分
-
Pythonって何を意識した言語な...
-
Selenium4でボタンをクリックで...
-
ExcelVBAでFormulaR1C1を列範囲...
-
HTMLソースが表示のページのも...
-
シェルのSTEP数について教えて...
-
Google ColaboでGUI作成
-
ものづくりに向いているプログ...
-
https://paiza.jp/challenges/5...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
chatGPTで次々と質問をしていく...
-
昔のパソコン少年の武勇伝「店...
-
スカラーのベクトル微分
-
ハッシュテーブル(連想配列)が...
-
最新のプログラム言語を学ぶに...
-
pythonにてseleniumを使うも、...
-
Windowsのアプリ開発ってなんの...
-
vba クリップボードクリアにつ...
-
Google ColaboでGUI作成
-
sublimit textっていうエディタ...
-
フリーランスのエンジニアって...
-
ExcelVBAでFormulaR1C1を列範囲...
-
matplotlibで任意の角度の円弧...
-
そのまま使っただけなのに・・...
-
家庭のパソコンで Python の 環...
-
初心者powershellのPS1ファイル...
-
Webプログラムってネイティブア...
-
httpリクエストの送り元の特定
-
プログラミングで例えばゲーム...
-
rpa化する言語としてら何があり...
おすすめ情報