• ベストアンサー

access VBAで検索および抽出が出来ません・・・

VBA初心者なのですが、あるサンプルデータを参考に顧客管理のフォームを作成しています。 検索条件が未入力なら全リストを、条件入力すれば検索・抽出したいのです。 未入力の場合は全リストが表示されていますが、条件入力すると真っ白になります・・・ リストボックスで表示するようにしています。 なぜ出来ないのか、どなたか詳しく教えてください。宜しくお願いします。 ______________________________________ Private Sub subSetFiler() Dim strWhere As String '変数の初期設定 strWhere = "" 'フリガナを部分一致で検索 If IsNull(Me![txtFurigana]) <> True Then If strWhere <> "" Then strWhere = strWhere & " And" End If strWhere = strWhere & "tm01_Kokyaku.tm01_Furigana Like'*" & Me![txtFurigana] & "*'" End If '物件を部分一致で検索 If IsNull(Me![txtBukken]) <> True Then If strWhere <> "" Then strWhere = strWhere & " And" End If strWhere = strWhere & "tm01_Kokyaku.tm01_Bukken Like '*" & Me![txtBukken] & "*'" End If 'Where文字列の加工 If strWhere <> "" Then strWhere = "Where" & strWhere End If 'リストボックスノ値集合ソース更新 Me![1stKokyakuCode] = Null Me![1stKokyakuCode].RowSource = "SELECT [tm01_Kokyaku].[tm01_Code] AS コード, [tm01_Kokyaku].[tm01_KokyakuName] AS 顧客名, [tm01_Kokyaku].[tm01_Bukken] AS 物件名, [tm01_Kokyaku].[tm01_Gouchi] AS 号地, [tm01_Kokyaku].[tm01_Address1] AS 住所, [tm01_Kokyaku].[tm01_Tel] AS 電話番号 " & _ "FROM tm01_Kokyaku" & _ strWhere & " " & _ "ORDER BY [tm01_Kokyaku].[tm01_Bukken], [tm01_Kokyaku].[tm01_Gouchi]" Me![1stKokyakuCode].Requery

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

半角スペースを確認してみてください。 例えば、以下など " And" → " And " Like'* → Like '* "Where" → " Where " "ORDER → " ORDER

shiho92
質問者

お礼

半角スペースを確認して見ましたところ、抽出できました。 ありがとうございました。

その他の回答 (1)

  • Anzu4699
  • ベストアンサー率59% (26/44)
回答No.2

机上デバックで気づいた点 01.文法を見ると、SQL文(Select区部分)とstrWhere句の間に半角スペースがありません >"FROM tm01_Kokyaku" & _ >strWhere & " " & _ この文法方式でいえば以下のように記載しないといけないはずなのですが "FROM tm01_Kokyaku" & _ " " & strWhere & " " & _ 01でだめなら試しにSQL文(Select区部分)とstrWhere句を1つの変数値に代入し そのSQL文ソースをクエリーで単発実行してみる それで動作しないなら、SQL文が間違っている事がわかる それで動作するなら、リストボックスのプロパティーを疑う

shiho92
質問者

お礼

>この文法方式でいえば以下のように記載しないといけないはずなのですが >"FROM tm01_Kokyaku" & _ >" " & strWhere & " " & _ 上記の方法と半角スペースの入力ミスでした。 ありがとうございました。

関連するQ&A

  • ACCESS SQL 日付での検索ができない。

    ACCESSにて 登録したデータの検索機能を作っているのですが、 文字列での検索は引用したサンプルプログラムの通りにして 問題なく検索できるのですが、日付の検索をすると、1件も検索されません。 どのような文法的な誤りがあるかご指導ください。 検索での「日付の比較」部分のコード strWhere = strWhere & "R業務依頼日 = #" & "Me![txtYKSDay]" & "#"  strWhereでは、SELECT文のWHERE句の検索条件部分を文字列として作成しています。 後で、リストボックスの値集合ソースに突っ込む為。 私のレベルは、開発の経験はありません。 正規化とかクエリーが理解できるレベルです。 ACCESS:2000 OS:WindowsMe 800文字の制限を越えてしまったので、文字列の比較の部分と 日付の比較の部分のコードを付加します。 -------------------------------------------- '変数の初期設定 strWhere = ""   (略) '業務依頼日で検索 If IsNull(Me![txtYKSDay]) <> True Then If strWhere <> "" Then strWhere = strWhere & " And " End If strWhere = strWhere & "R業務依頼日 = #" & "Me![txtYKSDay]" & "#"  <==ココ End If   (略) 'フリガナを部分一致で検索 If IsNull(Me![txtYKSFurigana]) <> True Then If strWhere <> "" Then strWhere = strWhere & " And " End If strWhere = strWhere & "Kフリガナ Like '*" & Me![txtYKSFurigana] & "*'" End If

  • accessの検索フォームについて(複数条件)

    access初心者です。 本などを参考に検索フォームを作成しました。 1つの条件で検索することは出来たのですが、複数の条件を入力するとうまく検索出来ません。 全ての条件を満たすデータの抽出を行いたいと思います。 「あ」「い」「う」というテキストボックスを用意しています。 Private Sub コマンド14_Click() If Not IsNull(Me.txt_あ) Then ' Me.Filter = "あ LIKE '*" & Me!txt_あ & "*'" End If If Not IsNull(Me.txt_い) Then ' Me.Filter = "い LIKE '*" & Me!txt_い & "*'" End If If Not IsNull(Me.txt_う) Then ' Me.Filter = "う LIKE '*" & Me!txt_う & "*'" End If Me.FilterOn = True End Sub よろしくお願いします。

  • Access2007の初心者です。VBAの記述で困っています、お力添え

    Access2007の初心者です。VBAの記述で困っています、お力添えお願いします。 チェックボックスにチェックが入っている場合に、誕生日が空白のものを抽出する部分のVBAの 記述のところで躓いているのだと思っています。 ■テーブルの情報 ・テーブル名:T_会員情報 ・T_会員情報のフィールド:会員名(テキスト形式)・性別(数値型)・誕生日(日付/時刻型) ■実現したいこと ・T_会員情報で、「検索」ボタンを押下したら、条件にあった情報がフォーム上に抽出できるもの。 ■用意したフォーム T_会員情報の連結フォーム ・フォーム上には以下を用意  ◆「性別」の非連結コンボボックス:txtSeibetsu  ◆「誕生日が空白」という非連結チェックボックス:chkBirthday  ◆「AND OR」のいずれかが選択できるオプションボタン  ◆「検索ボタン」  ◆「会員名」「性別」「誕生日」のT_会員情報の帳票フォーム ■VBA Option Compare Database Option Explicit Const cAnd = 1 Const cOr = 2 Const cBaseQuery = "SELECT * FROM T_会員情報" Private Sub 検索ボタン_Click() Dim strWhere As String Dim strAndOr As String strWhere = vbNullString If Me.optAndOr.Value = cAnd Then strAndOr = " AND " Else strAndOr = " OR " End If '性別検索 If ISNull(Me.txtSeibetsu.value)=False Then strWhere = strWhere & strAndOr & " 性別 = " & Me.txtSeibetsu.Value End If '誕生日空白検索 If Me.chkBirthday=False Then strWhere = strWhere & strAndOr & " 誕生日= " & Null End If 'WHERE句編集 strWhere = Replace(strWhere, strAndOr, "WHERE", , 1) 'レコードソース書き換えと再クエリ Me.RecordSource = cBaseQuery & " " & strWhere Me.Requery 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検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • 帳票フォームの全件のレポート出力

    OS:XP Access Version:2007 抽出されたレコードが帳票フォームで表示されているのですが、 その複数抽出のレコードすべてをレポート出力したいのですが。。。どうすばいいわからなくて どなたかいい方法をおしえてください。 抽出条件コードはこれです。 Private Sub btnSearch_Click() Dim strWhere As String Dim strAndOr As String strWhere = vbNullString If Me.optAndOr.Value = cAnd Then strAndOr = " AND " Else strAndOr = " OR " End If If Me.txtYear.Value <> vbNullString Then strWhere = strWhere & strAndOr & " 年度 LIKE '*" & Me.txtYear.Value & "*'" End If If Me.txtName.Value <> vbNullString Then strWhere = strWhere & strAndOr & " 営業担当 LIKE '*" & Me.txtName.Value & "*'" End If 'WHERE句編集 strWhere = Replace(strWhere, strAndOr, "WHERE", , 1) 'レコードソース書き換えと再クエリ Me.RecordSource = cBaseQuery & " " & strWhere Me.Requery End Sub

  • AND、OR文にすると選択後の編集が出来ない

    Private Sub 選択_Click() If NewRecord Then MsgBox "編集できません。選択しなおしてください。" Me.Undo End If End Sub 上記の命令が効いていないようです。メッセージも出ません。 Private Sub 編集_Click() Dim strFil As String strFil = "[選択]=" & True DoCmd.OpenForm "編集F", , , strFil 'DoCmd.Close acForm, "スタート画面F" '選択.Value = Null End Sub 上記のスタート画面は消したくないので’を付けてあります。 選択.Value=Null でコンパイルエラーが発生していますので’を付けています。 Private Sub 検証_Click() Dim strFil As String If IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then MsgBox ("コンボボックスの選択がされていません") Exit Sub End If If Not IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then strFil = "[ステータス] ='" & Me![ステータスリスト] & "'" End If If IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then strFil = "[申請内容] = '" & Me.申請リスト & "'" End If If Not IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then If MsgBox("二つの条件でAND検索をしますか", vbYesNo) = vbYes Then MsgBox ("二つの条件でAND検索をします") strFil = "[ステータス] = '" & Me.ステータスリスト & "'and " & "[申請内容]='" & Me.申請リスト & "'" Else MsgBox ("二つの条件でOR検索をします") strFil = "[ステータス] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'" End If End If Me.Filter = strFil Me.FilterOn = True End Sub 上記はそのままです。 選択のチェックボックスにチェックを入れてもそのデータが編集画面に反映されない現象が発生してしまいました。どこが悪いのか教えて頂ければ幸いです。

  • Access VBA  複数検索方法(初心者)  

    下記の様に検索すると、 "テキスト名称"と"テキスト分類"の2つのテキストボックスを使用して検索ですが、 1つのテキストボックス"テキストA"で両方(名称・分類)又は2つ以上を検索させるには、どのようにしたら良いでしょうか? <テキストボックス1つでテーブル全部を検索したい> ご教授お願い致します。(Access2000) Private Sub コマンド17_Click() Dim st As String If Not IsNull(Me.テキスト名称) Then st = st & " AND 名称 like'*" & Me.テキスト名称 & "*'" End If If Not IsNull(Me.テキスト分類) Then st = st & " AND 分類 like '*" & Me.テキスト分類 & "*'" End If st = Mid(st, 6) DoCmd.OpenReport "レポート", acViewPreview, , st 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

  • アクセスで検索したものを直接編集したいのですが・・・

    アクセスで検索したものを直接編集したいのですが・・・。今のところ、検索はできるのですが、編集ができません。読み取り専用ですと表示されます。(VBAの本を参照してここまで頑張ったのですが、記載は下記のとおりです。)よろしくお願いいたします。 Private Sub 検索_Click() Dim wCNN As ADODB.Connection Dim wRec As ADODB.Recordset Dim strSQL As String Set Me.Recordset = Nothing Me.得意先名.ControlSource = "" Me.住所.ControlSource = "" Me.TEL.ControlSource = "" strSQL = "SELECT * FROM 得意先マスタ" If IsNull(Me.検索文字) = False And Len(Me.検索文字) <> 0 Then If IsNull(Me.検索区分) = True Or Len(Me.検索区分) = 0 Then MsgBox "検索区分を選択してください。", vbOKOnly + vbCritical, "" Me.検索区分.SetFocus Exit Sub End If strSQL = strSQL & " WHERE " & Me.検索区分 & " LIKE '%" & Me.検索文字 & "%'" End If strSQL = strSQL & ";" Set wCNN = Application.CurrentProject.Connection Set wRec = New ADODB.Recordset wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly If wRec.EOF = False And wRec.BOF = False Then Set Me.Recordset = wRec Me.得意先名.ControlSource = wRec("得意先名").Name Me.住所.ControlSource = wRec("住所").Name Me.TEL.ControlSource = wRec("TEL").Name End If wRec.Close Set wCNN = Nothing Set wRec = Nothing Me.Requery End Sub

  • アクセスvba if文の記述方法

    検索フォームを作成しました。 入力項目は「氏名」「カナ」で入力チェックをおこなっております。 (未入力)メッセージを表示「未入力です」 (入力有)結果一覧のフォームを表示 未入力チェックは正常に処理されておりメッセージが表示されます。 項目に値を入力した場合フォームが起動しません。 if文から外した場合は正常に実行されます。 この条件の場合if文でどのように記述したらよいのでしょうか。 宜しくお願いします。 Private Sub 検索_Click() Dim mct As Control Dim flg As Boolean flg = False For Each mct In Me.Controls  If mct.ControlType = acTextBox Then   If mct.Tag = "Check" Then    If Not IsNull(mct) Then     flg = True     Exit Sub    End If   End If  End If Next mct If flg = True Then  Dim str As String  str = "[氏名] Like ""*" & Me!氏名 & "*"" And [カナ] Like ""*" & Me!カナ & "*"""  DoCmd.OpenForm "結果一覧", , , str Else  MsgBox ("未入力です") End If End Sub

専門家に質問してみよう