検索用テキストが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検索の様に複数曖昧検索ができない
中途半端な検索で抽出してる状態です。
どなたか手直しいただけますでしょうか?
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1です
> 今日職場で上記のVBA貼り付けて見ましたが、検索ボタンをクリックしても何の反応もしなかったり固まるだけでした。
これだけでは、そうですか・・・としか、言いようがありません。
情報が全くありません。
sFilter を作っているだけなので、それ以降どのような記述されたのか見えません。
提示した範囲で固まる部分は無いと思いますが・・・
私には無理だと思います。
私から最後になります(補足等あれば別ですが)
フォームのデザインで、「一」とか「コンボ62」等の名前は変更されたと思いますが
以下の操作をしてどうなりますか
・ sFilter = "" の行にブレイクポイントを設定
・検索ボタンのクリックで、上記箇所で止まりますか
・止まったのなら、ステップ実行して sFilter の内容はどのように変化していきますか
ご質問された時の VBA 記述部分は、どのようになっていたのでしょう。
コピー&貼り付けされたものではないですよね。
(実際に記述され、動いていた/動かそうとしていたものではなさそうですが)
Private sub 検索ボタン_click() 普通にイベントプロシージャで作っていたら
Private Sub 検索ボタン_Click() になっていると思われ、
Format ( や Replace ( は、Format( や Replace( になっていたと思われますが。
BuildCritera は自作されたものだったでしょうか。
そのようなものを何故提示されたのかが疑問にありますが
私が提示したのは、標準モジュールに実際に記述してみて、その結果を貼り付けています。
フォームは作っていないので未検証です。(西暦・和暦部分だけ動かしてみたけど)
連続スペースをスペース1個にする部分は、以下で検証済みです
Private Sub test33()
Dim sFilter As String, sS As String
Dim iL(1) As Long
Const sAndOr As String = " AND "
sFilter = ""
sS = "A B C D"
iL(0) = 0
iL(1) = Len(sS)
While (iL(0) <> iL(1))
sS = Replace(sS, " ", " ") ' 2個スペースを1個に
iL(0) = iL(1)
iL(1) = Len(sS)
Wend
sS = "*" & Replace(sS, " ", "* AND *") & "*"
sFilter = sFilter & sAndOr & BuildCriteria("タイトル", dbText, sS)
If (Len(sFilter) > 0) Then sFilter = Mid(sFilter, Len(sAndOr) + 1)
MsgBox sFilter
End Sub
注意が一つ
> sS = Replace(sS, " ", " ") ' 2個スペースを1個に(QA表示上わからないかも)
の記述がありますが、
教えてgoo、 OKWave とも、コピー&貼り付けではおかしくなるようです。
両方とも、スペースが1つになってますね。
(お礼・補足の通知メールが来ましたが、その中の記述はまともでした)
上記半角スペース部分を ▲ に置換えて記述すると以下の様になります。
sS = Replace(sS, "▲▲", "▲")
ここがコピー&貼り付け後の状態のままでも、動作としてはおかしくなることはありません。
スペースが連続した時には タイトル Like "**" が増えていくだけです。
なお、現状では
教えてgoo からのコピー&貼り付けでは、行頭に不要なスペースが付加されるようです。
コピー&貼り付けに関しては、OKWave の方がまだましかも・・・・
補足)
> sS = "*" & Replace(sS, " ", "* AND *") & "*"
上記部分は sS = "*" & Replace(sS, " ", "*" & sAndOr & "*") & "*"
の方が良かったかも・・・
以上
情報が無い状況ではお手上げです。
(提示された部分の手直しは完了していると思っています)
No.1
- 回答日時:
以下、私なりに気付いた点
・コントロール名はわかりやすく
例)
「一」→「txt出版社」
「コンボ62」→「cmb種類」
・一致は Like ではなく =
・何を記述しているのか理解する
例1)
strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'"
↓?
strfilter = strfilter & " And 種類 Like '*" & Me.コンボ62 & "*'"
例2)
"*" Replace ( me.五, "", "*AND*") & "*"
↓
"*" & Replace( me.五, " ", "* AND *") & "*"
「A B C」(A空白B空白C)という文字列があったら
「*A* AND *B* AND *C*」にするんじゃ・・・
「A B C」(A空白空白B空白C)という文字列があったら
「*A* AND ** AND *B* AND *C*」になるけど・・・
・スペースの扱い方に気を付ける
例)
"And 発刊日 = # " → " And 発刊日 = #"
Format (me.四. → Format(me.四,
・実際にある関数を使用する
例)
BuildCritera → BuildCriteria
上記を踏まえ、全体的に書き換えて見ると以下に(変数名は適宜変更してください)
Dim sFilter As String, sS As String
Dim iL(1) As Long
Const sAndOr As String = " AND "
sFilter = ""
If Not IsNull(Me.txt出版社) Then
sFilter = sFilter & sAndOr & "出版社 Like '*" & Me.txt出版社 & "*'"
End If
If Not IsNull(Me.cmb種類) Then
sFilter = sFilter & sAndOr & "種類 Like '*" & Me.cmb種類 & "*'"
End If
If Not IsNull(Me.txt番号) Then
sFilter = sFilter & sAndOr & "番号 = '" & Me.txt番号 & "'"
' sFilter = sFilter & sAndOr & "番号 = " & Me.txt番号 ' 番号が数値型ならこっち
End If
If Not IsNull(Me.txt発刊日) Then ' 発刊日が、日付/時刻型の場合
sFilter = sFilter & sAndOr & "発刊日 = #" & Format(Me.txt発刊日, "yyyy/mm/dd") & "#"
End If
If Not IsNull(Me.txtタイトル) Then
sS = Me.txtタイトル
iL(0) = 0
iL(1) = Len(sS)
While (iL(0) <> iL(1))
sS = Replace(sS, " ", " ") ' 2個スペースを1個に(QA表示上わからないかも)
iL(0) = iL(1)
iL(1) = Len(sS)
Wend
sS = "*" & Replace(sS, " ", "* AND *") & "*"
sFilter = sFilter & sAndOr & BuildCriteria("タイトル", dbText, sS)
End If
If (Len(sFilter) > 0) Then sFilter = Mid(sFilter, Len(sAndOr) + 1)
上記は環境が無いので、未検証
発刊日の検索について、表示は西暦、入力は和暦・・・
やったことないので間違っていると思いますが、そのテキストボックス「txt発刊日」の
書式を「日付(S)」に、
定型入力を「>L99\年99\月99\日;0;_」
とすると、入力時は「T S H」を付けた入力になるようです。
操作上良いのか悪いのかわかりませんが、「txt発刊日」の「フォーカス取得時」を
Private Sub txt発刊日_Enter()
Me.txt発刊日 = Null
End Sub
とすると、必ず和暦での入力になるようです。
この回答への補足
30246kikuさん、こんばんわ。
今日職場で上記のVBA貼り付けて見ましたが、検索ボタンをクリックしても何の反応もしなかったり固まるだけでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?
Access(アクセス)
-
フォームに複数の検索機能をつける方法
Access(アクセス)
-
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
-
4
ACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです
Access(アクセス)
-
5
accessvba 複数条件でFilterをしたい
Access(アクセス)
-
6
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
7
ACCESS 「パラメータの入力」を消したい!!
Access(アクセス)
-
8
アクセスVBAのMe!と[ ]
Access(アクセス)
-
9
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
-
10
ACCESS検索★ある文字を複数のフィールドの中から検索したい
その他(コンピューター・テクノロジー)
-
11
accessで重複を防ぎたい
Access(アクセス)
-
12
Access VBAでボタンの背景色を変更したい
その他(データベース)
-
13
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
14
Access2010 Enterで次テキストへ移動
その他(Microsoft Office)
-
15
Accessクエリ 複数フィールドを対象に空白の場合は全件表示したい
Access(アクセス)
-
16
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
ACCESSで条件によってフォーム上のフィールドの色を変更
Access(アクセス)
-
19
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
20
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
昔のテレビっておっぱいが出て...
-
【バッチファイル】ホスト名を...
-
TextBoxコントロールを引数とし...
-
複数のテキストファイルをエク...
-
VBAで○○:○○と表示させたいのに...
-
参照設定は2.8と6.0 6.1とどち...
-
Adobe Acrobat と Adobe Reader...
-
latestの対義語
-
水に映った月明かりを表す言葉
-
XJAPANバンド内いじめはほんと...
-
東京ドームのコンサート、一番...
-
twiceの ツウィて そんなに美人...
-
確率の問題です。 10人を4人、4...
-
Red velvetのアイリーンって可...
-
動画が緑のモザイクのような画...
-
ウェブサイトで常に最新の状態...
-
雪の女王、ボラの少女時代を演...
-
このアミボムって偽物ですかね...
-
imac2012ってまだ使えますか?...
-
、k-popが嫌いな日本人って結構...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
昔のテレビっておっぱいが出て...
-
複数のテキストファイルをエク...
-
【バッチファイル】ホスト名を...
-
雪の女王、ボラの少女時代を演...
-
堀秀政の通称「久太郎」の読み方
-
バンタンのDOPEの最初って ラプ...
-
VBAで○○:○○と表示させたいのに...
-
TextBoxコントロールを引数とし...
-
参照設定は2.8と6.0 6.1とどち...
-
韓流女と別れたい
-
Adobe Acrobat と Adobe Reader...
-
水に映った月明かりを表す言葉
-
韓流好き妻の行動に怒り…私は狭...
-
デスクチェア―のガスシリンダー...
-
確率の問題です。 10人を4人、4...
-
TWICEのライブについてです 母...
-
imac2012ってまだ使えますか?...
-
Red velvetのアイリーンって可...
-
角度の求め方
-
次の問題(本文の下にあります...
おすすめ情報