質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

3671閲覧

Access VBA 日付型を含めた抽出

ttakka

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/07/10 05:21

前提・実現したいこと

入力した日付と氏名でフィルターをかけ、サブフォームに結果を表示したい。

発生している問題・エラーメッセージ

・構文エラー
・演算子がありません
・エラーは出ないがうまく抽出されない
日付・文字列の型、またその扱いがうまくできずフィルター文がうまくかけません。

テーブルに
日付型で[2020/07/10 9:00:00]
が存在している状態です。

該当のソースコード

VBA

1Dim WhereString As String 2 3 If Me.txt氏名 <> "" Then 4 WhereString = WhereString & " AND 氏名 like '*" & Me.txt氏名 & "*'" 5 End If 6 7 If Me.txt日付 <> "" Then 8 WhereString = WhereString & [分からない部分] 9 End If 10 11 Me.Filter = Mid(WhereString, 6) 12 Me.FilterOn = (WhereString <> "") 13 14 Me.txt氏名.SetFocus

試したこと

日付型に[#]、文字列に["]等は理解しているのですが、結果的にどうそれらで挟めばよいかわからない状態です。

入力データを日付に変換する、またその逆も試そうとしたのですがクォーテーションや#等が複合し場合の記述の仕方がわからず結局詰まってしまっている状態です。

一度
WhereString = WhereString & " AND 日付 like '" & Me.txt日付 & "'"
のようにFormat・CDateで変換は行わずに文字列として試した時、[2020/07]だと抽出され、[2020/07/10]だと抽出されない事がありこれも原因がわからず詰まっています。

補足情報(FW/ツールのバージョンなど)

Access2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テーブルに
日付型で[2020/07/10 9:00:00]
が存在している状態です。

 

[2020/07]だと抽出され、[2020/07/10]だと抽出されない事があり

2020/07 というような入力もありうるのでしょうか。その場合は、どのような抽出条件がご希望でしょうか。

2020/07/01 0:00:00 から 2020/07/31 23:59:59 でしょうか。


とりあえず、「2020/07/10」というように日まで入力するという前提で回答します。

vba

1 Dim WhereString As String 2 3 If Me.txt氏名 <> "" Then 4 WhereString = " AND 氏名 like '*" & Me.txt氏名 & "*'" 5 End If 6 7 If IsDate(Me.txt日付) Then 8 WhereString = WhereString & " AND 日付 >= #" & Me.txt日付 & _ 9 "# AND 日付 < #" & DateAdd("d",1,Me.txt日付) & "#" 10 Else 11 MsgBox "正しい日付を入力してください。" 12 Me.txt日付.SetFocus 13 Exit Sub 14 End If 15 16 Me.Filter = Mid(WhereString, 6) 17 Me.FilterOn = (WhereString <> "") 18 19 Me.txt氏名.SetFocus

投稿2020/07/10 07:16

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttakka

2020/07/10 08:03

根本的な原因は日付の入ったテーブルがフィールドリストに入っておらず参照ができないようでした、大変申し訳ありません・・・。 しかし色々なやり方を教えて頂きとても助かりました、勤怠管理のようなものを作成しているので範囲で指定するものなど参考にさせていただいています、ありがとうございました!
guest

0

Me.txt日付の値は文字列ですから、日付型/時刻項目に対しての条件とする場合には、日付型に変換する必要があります。
#で括ると日付/時刻型として認識されます。

VBA

1If Me.txt日付 <> "" Then 2' WhereString = WhereString & [分からない部分] 3 WhereString = WhereString & " and 日付 >= #" & Me.txt日付 & "#" & " and 日付 < #" & Me.txt日付 & "# + 1" 4End If

若干性能は落ちると思いますが、文字型で揃えると以下になります。

VBA

1If Me.txt日付 <> "" Then 2 WhereString = WhereString & " and Format(日付,'yyyy/mm/dd') = '" & Me.txt日付 & "'" 3End If

投稿2020/07/10 05:49

編集2020/07/10 07:23
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttakka

2020/07/10 06:47

回答ありがとうございます! やはりエラーは出ないのですが[2020/07/10 9:00:00]や、Now関数を使って入力した日付データもうまく抽出できませんでした。 Format関数を使い WhereString = WhereString & " and 日付 <> " & Format(Me.txt日付, "yyyy/mm/dd") エラー出ず、抽出されず 一度変数に入れ Dim s Dim sd s = Now() sd = CDate(s) WhereString = WhereString & " and 日付 <> #" & sd & "#" エラー出ず、抽出されず フォームウィザードでサブフォームを作成した後に、テキストボックスでそれぞれ氏名と日付で値を指定できるよう作成しました。 氏名のみだと抽出できるので型や記述の仕方に原因があると思っていたのですが、もしかして他に原因があるのでしょうか。
sazi

2020/07/10 06:53 編集

formatするならテーブルの項目の方です。 何れにしても画面の項目そのままを記述すると、単なる文字列としてwhere条件が作成されますので、型を合わせる事が必要です。 クエリーの条件部分をコピーして置き換えてみればはっきりすると思います。
sazi

2020/07/10 07:22 編集

テーブルのデータは時刻まで入っているので、画面の項目に時刻が含まれていないようですので、文字として比較するなら、テーブルのデータから時刻部分をカットする必要がありますし、データはそのままで画面の項目を条件とするなら日付の範囲での指定が必要になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問