Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルフォーム上でのフィルタ検索について
記事No42890
投稿日: 2018/03/22(Thu) 10:04
投稿者yp
解決済: ON
OS:Windows7
Access Version:2016

はじめまして、こんにちは。
現在、仕事で社内の経費を管理するのにACCESSにて管理しています。
(経理ではありませんのでほぼ自己流で作りました。)

したいことは、フォーム上で全てのレコードを表示させ(・・経費一覧みたいなかんじです。)、
そのフォームのフォームヘッダーにいろいろなテキストボックス・コンボボックスを設置し、
一つの「抽出」ボタンを押すとフィルターがかかる。というVBAを知りたいです。

それぞれのレコードは下記の通りです。(名前で表記します。)
<テキストボックス>
txt精算No・txtd精算日・txtd開始日・txtd終了日・txt精算月・txt開始月・txt終了月

<コンボボックス>
cmb案件No・cmb担当者・cmb科目

<ボタン>
btn抽出・btn抽出解除・btn抽出印刷・btnクリア

やりたいことは@〜Dです。

@全部の項目を入力しなくても、入力したところの項目に対してフィルターをかける
(もちろん、全て入力してもフィルター実行。データがなければ「該当データはありません。」)
A全部空白なら「入力してください。」のメッセージを出す
Bクリアボタンを押すと入力した項目が空白になる
C抽出解除ボタンを押すと、フィルター解除
D抽出結果を印刷

上記、A〜Dはわかるのですが、肝心の@がわかりません・・。
どなたかご教授いただけますでしょうか、、

ちなみに・・・
txt***は書式設定なし、txtd***は日付(S)型に設定してます。


よろしくお願いいたします。

タイトルRe: フォーム上でのフィルタ検索について
記事No42891
投稿日: 2018/03/23(Fri) 08:35
投稿者hatena
解決済: ON
下記が参考になるでしょう。

複数条件の抽出フォームの設計 その1 - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-129.html

タイトルRe^2: フォーム上でのフィルタ検索について
記事No42892
投稿日: 2018/03/23(Fri) 10:24
投稿者yp
解決済: ON
> 下記が参考になるでしょう。
>
> 複数条件の抽出フォームの設計 その1 - hatena chips
> https://hatenachips.blog.fc2.com/blog-entry-129.html

hatenaさん
ありがとうございます。
私もGoogleで検索したときに参考にしようと思い、自分なりに解読してみようと
思いましたが、ほぼほぼわからなく・・・(;_;)

教えていただいたリンク先にある下記のコードの意味を
わかれば教えて頂きたいです・・・。
1行目はわかるのですが、それ以降がわかりません・・。
ここの「社員コード」に、「txt精算No」をあてはめようとしたのですが、
いざやってみると、「データ型が一致しません。」とエラーが出てしまいます。
実際の精算Noは数字のみの場合もありますが、アルファベットも入ったりしますので
書式設定はしていないんです・・・。

If Not IsNull(Me.txt社員コード) Then
strFilter = " AND " & BuildCriteria("社員コード", _
dbLong, Me.txt社員コード)
End If


よろしくお願いいたします。。。

タイトルRe^3: フォーム上でのフィルタ検索について
記事No42893
投稿日: 2018/03/23(Fri) 20:37
投稿者hatena
解決済: ON
> 1行目はわかるのですが、それ以降がわかりません・・。
> ここの「社員コード」に、「txt精算No」をあてはめようとしたのですが、
> いざやってみると、「データ型が一致しません。」とエラーが出てしまいます。
> 実際の精算Noは数字のみの場合もありますが、アルファベットも入ったりしますので
> 書式設定はしていないんです・・・。

精算No フィールドのデータ型を確認ください。
テキスト型(短いテキスト) になっているなら、


If Not IsNull(Me.txt精算No) Then
    strFilter = " AND " & BuildCriteria("精算No", _
                                        dbText, Me.txt精算No)
End If

フィールドのデータ型によって、第2引数を下記のように設定してください。

数値型      → dbLong
テキスト型  → dbText
日付/時刻型 → dbDate

タイトルRe^4: フォーム上でのフィルタ検索について
記事No42894
投稿日: 2018/03/26(Mon) 09:02
投稿者yp
解決済: ON
> > 1行目はわかるのですが、それ以降がわかりません・・。
> > ここの「社員コード」に、「txt精算No」をあてはめようとしたのですが、
> > いざやってみると、「データ型が一致しません。」とエラーが出てしまいます。
> > 実際の精算Noは数字のみの場合もありますが、アルファベットも入ったりしますので
> > 書式設定はしていないんです・・・。
>
> 精算No フィールドのデータ型を確認ください。
> テキスト型(短いテキスト) になっているなら、
>
>
> If Not IsNull(Me.txt精算No) Then
> strFilter = " AND " & BuildCriteria("精算No", _
> dbText, Me.txt精算No)
> End If
>
> フィールドのデータ型によって、第2引数を下記のように設定してください。
>
> 数値型 → dbLong
> テキスト型 → dbText
> 日付/時刻型 → dbDate


hatena様

できました!!
ありがとうございます(;_;)

他のも同様に増やしていこうと思います。

ちなみに・・・
このtxt精算Noをあいまい検索しようとする時は、
どの部分にLikeを入れたら良いでしょうか・・?

strFilterの次の部分になるんですかね。。?

何度もすみません・・・。

よろしくお願いいたします。

タイトルRe^5: フォーム上でのフィルタ検索について
記事No42895
投稿日: 2018/03/26(Mon) 09:51
投稿者hatena
解決済: ON
> ちなみに・・・
> このtxt精算Noをあいまい検索しようとする時は、
> どの部分にLikeを入れたら良いでしょうか・・?


下記のように検索語の前後に、"*"を付加するだけです。

strFilter = " AND " & BuildCriteria("精算No", _
dbText, "*" & Me.txt精算No & "*")

これで、BuildCriteria関数が自動でLikeを挿入してくれます。
クエリの抽出条件欄に、式を記述するときにAccessが自動でしてくれるとことと
同じことをしてくれます。

タイトルRe^6: フォーム上でのフィルタ検索について
記事No42896
投稿日: 2018/03/26(Mon) 11:14
投稿者yp
解決済: ON
>
> 下記のように検索語の前後に、"*"を付加するだけです。
>
> strFilter = " AND " & BuildCriteria("精算No", _
> dbText, "*" & Me.txt精算No & "*")
>
> これで、BuildCriteria関数が自動でLikeを挿入してくれます。
> クエリの抽出条件欄に、式を記述するときにAccessが自動でしてくれるとことと
> 同じことをしてくれます。

hatena様

なるほど・・・!
Likeをいれなくても出来るんですね。
勉強になりました。

ご丁寧に教えていただきありがとうございます。(^o^)
大変、助かりましたm(_ _)m

タイトルRe^7: フォーム上でのフィルタ検索について
記事No42897
投稿日: 2018/03/26(Mon) 13:47
投稿者yp
解決済: ON
> hatena様
>
> なるほど・・・!
> Likeをいれなくても出来るんですね。
> 勉強になりました。
>
> ご丁寧に教えていただきありがとうございます。(^o^)
> 大変、助かりましたm(_ _)m

度々すみません・・・
上記で解決したと思ったんですが、設置しているテキスト(コンボ)ボックスを
全て入れようと思い、下記の分をどんどん追記していったんですが、
なかなか上手くいきません。

<追加していった構文>

If Not IsNull(Me.cmb担当者) Then
strFilter = strFilter & " AND 担当者 '" & Me.cmb担当者 & "'"
End If

この「cmb担当者」を「cmb案件No」・「cmb科目」・「txtd開始日」・「txtd終了日」などを
追加していきました。

ですが、構文エラー:演算子がありません。 と、
出てきてしまいます。
(どのデータを入れても出てきてしまいます。)

再度教えていただけませんでしょうか(;_;)

よろしくお願いいたします。

タイトルRe^8: フォーム上でのフィルタ検索について
記事No42898
投稿日: 2018/03/26(Mon) 14:13
投稿者hatena
解決済: ON
> <追加していった構文>
>
> If Not IsNull(Me.cmb担当者) Then
> strFilter = strFilter & " AND 担当者 '" & Me.cmb担当者 & "'"
> End If
>

Likeがいらないというのは、BuildCriteria関数を使った場合だけです。

使わない場合は、適切な演算子をいれてください。
完全一致なら、

If Not IsNull(Me.cmb担当者) Then
strFilter = strFilter & " AND 担当者 = '" & Me.cmb担当者 & "'"
End If

部分一致なら、

If Not IsNull(Me.cmb担当者) Then
strFilter = strFilter & " AND 担当者 Like '*" & Me.cmb担当者 & "*'"
End If

コンボボックスなら、完全一致でいいはずですね。

タイトルRe^9: フォーム上でのフィルタ検索について
記事No42899
投稿日: 2018/03/26(Mon) 15:36
投稿者yp
解決済: ON
> Likeがいらないというのは、BuildCriteria関数を使った場合だけです。
>
> 使わない場合は、適切な演算子をいれてください。
> 完全一致なら、
>
> If Not IsNull(Me.cmb担当者) Then
> strFilter = strFilter & " AND 担当者 = '" & Me.cmb担当者 & "'"
> End If
>
> 部分一致なら、
>
> If Not IsNull(Me.cmb担当者) Then
> strFilter = strFilter & " AND 担当者 Like '*" & Me.cmb担当者 & "*'"
> End If
>
> コンボボックスなら、完全一致でいいはずですね。


hatena様

Likeが使いたいのはBuildCriteria関数が入っている精算Noの部分だけ
ですので、後は完全一致で大丈夫なんです。

全部のテキストボックスを設置した現在かいている構文をそのまま
コピペします。

どこがおかしいかご教授いただけますでしょうか。。。


Private Sub btn抽出_Click()
Dim strFilter As String, strExp As String, aryOpe As Variant

If Not IsNull(Me.txt精算No) Then
strFilter = " AND " & BuildCriteria("精算No", _
dbText, "*" & Me.txt精算No & "*")
End If

If Not IsNull(Me.cmb案件No) Then
strFilter = strFilter & " AND 案件No '" & Me.cmb案件No & "'"
End If

If Not IsNull(Me.cmb担当者) Then
strFilter = strFilter & " AND 担当者 '" & Me.cmb担当者 & "'"
End If

If Not IsNull(Me.cmb科目) Then
strFilter = strFilter & " AND 科目 '" & Me.cmb科目 & "'"
End If

If Not IsNull(Me.txtd開始日) Then
strFilter = strFilter & " AND 精算日 >= #" & Nz(Me.txtd開始日) & "#"
End If

If Not IsNull(Me.txtd終了日) Then
strFilter = strFilter & " AND 精算日 <= #" & Nz(Me.txtd終了日) & "#"
End If

Me.Filter = Mid(strFilter, 6)
If strFilter = "" Then
Me.FilterOn = False
Else
Me.FilterOn = True
End If
End Sub


よろしくお願いいたします。(;_;)

タイトルRe^10: フォーム上でのフィルタ検索について
記事No42900
投稿日: 2018/03/26(Mon) 16:17
投稿者hatena
解決済: ON
> If Not IsNull(Me.cmb担当者) Then
> strFilter = strFilter & " AND 担当者 '" & Me.cmb担当者 & "'"
> End If
>
> If Not IsNull(Me.cmb科目) Then
> strFilter = strFilter & " AND 科目 '" & Me.cmb科目 & "'"
> End If

上記のコードの適切な位置に = を挿入してください。
前回の私の回答を参考にしてください。

タイトルRe^11: フォーム上でのフィルタ検索について
記事No42901
投稿日: 2018/03/27(Tue) 09:17
投稿者yp
解決済: ON
> > If Not IsNull(Me.cmb担当者) Then
> > strFilter = strFilter & " AND 担当者 '" & Me.cmb担当者 & "'"
> > End If
> >
> > If Not IsNull(Me.cmb科目) Then
> > strFilter = strFilter & " AND 科目 '" & Me.cmb科目 & "'"
> > End If
>
> 上記のコードの適切な位置に = を挿入してください。
> 前回の私の回答を参考にしてください。

hatena様

strFilter = strFilter & " AND 担当者 = '" & Me.cmb担当者 & "'"
で、出来ました!!

わ〜、スッキリ。

ご丁寧にありがとうございます。
今度こそ解決です!!(^ω^)

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る