ワイルドカード「Not like」でのエラーへの対処方法

このQ&Aのポイント
  • エクセルからアクセスへADOで接続している際、条件付きフィルタで「タイトル not Like '%ヒットしたくない文字%'」を使用するとエラーが発生します。このエラーの対処方法を教えてください。
  • 条件付きフィルタで「タイトル not Like '%ヒットしたくない文字%'」を使用する際、エラーが発生します。このエラーにはどのように対処すればよいでしょうか?
  • アクセスへのADO接続中に、条件付きフィルタで「タイトル not Like '%ヒットしたくない文字%'」を使用するとエラーが発生します。このエラーに対処する方法を教えてください。
回答を見る
  • ベストアンサー

ワイルドカード 「Not like」

エクセルからアクセスへADOで接続しているのですが RS.Open "Tテーブル", CN, adOpenStatic, adLockOptimistic RS.Filter = "タイトル Like '%ヒットしたくない文字%'" なら問題なく行くのですが RS.Filter = "タイトル not Like '%ヒットしたくない文字%'" や RS.Filter <> "タイトル Like '%ヒットしたくない文字%'" にするとエラーになります。 (競合しています、コンパイルエラー) どうすれば、「含まない」ができるのでしょうか? アドバイス宜しくお願い致します。

  • o9i8u7
  • お礼率99% (330/332)

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

FilterにはNotが使えないかもしれませんね。 代替案として、SQL文でOpenしてみたらどうですか。 RS.Open "SELECT * FROM Tテーブル WHERE タイトル Not Like '%ヒットしたくない文字%'", CN, adOpenStatic, adLockOptimistic

o9i8u7
質問者

お礼

こちらならnotを使えました! ありがとうございます。大変参考になりました。

その他の回答 (1)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

RS.Filter = "Not (タイトル Like '%ヒットしたくない文字%')" ではどうですか?

o9i8u7
質問者

お礼

早速ご回答ありがとうございます。 しかしやってみましたが 実行時エラー 3001 引数が間違った型、許容範囲外、又は競合、、 となります。 RS.Filter = "タイトル = '文字'" などなら動くのですが、なぜでしょう?

関連するQ&A

  • WHERE と Filter

    アクセスのADOで rs.Open "SELECT * FROM テーブル1 WHERE フィールド1=あ", cn, adOpenStatic, adLockOptimistic とするのと、 rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "フィールド1゛ = 'あ'" とするのでは、 どちらの方が処理速度が速いですか?

  • adoでBetween は使えないのでしょうか?

    ADOで期間で抽出したいのですが rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 = #2015/01/01#" は問題なく通るのですが、 rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 Between #2015/01/01# And #2015/01/31#" だと 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 と言うエラーになります。 adoでBetween は使えないのでしょうか?

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • オブジェクトが開いている場合は、操作は許可されませ

    エクセルvbaです。 ADOを使ってループしているのですが 前回のループで rs.Close: Set rs = Nothing をしなかったために rs.Open strSQL, cn, adOpenStatic, adLockOptimistic で 「オブジェクトが開いている場合は、操作は許可されません」 となるので、 イミディエイトウインドウで rs.Close: Set rs = Nothing としてるのに、 実行時エラー 3219 このコンテキストで操作は許可されていません。 となります。 rs.Closeだけでも同じエラーです。 この状態で、vbaを中断せずに rs.Open strSQL, cn, adOpenStatic, adLockOptimistic を通過させるにはどうすればいいですか?

  • VBA ADOのフィルタのアポストロフィーの意味は

    VBAで文字列はダブルコーテーション「”」で括りますが ------------------------------------------------ Sub ADO_Filter() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T社員名簿", cn, adOpenKeyset, adLockOptimistic rs.Filter = "質問タイトル LIKE '*田*'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------ 上記の '*田*' のアポストロフィーはどういう時に必要なのでしょうか? LIKE演算子を使ってるからか Filterだからか など理由があれば教えて下さい。 また、「'」を使っているのに、以後がコメントにならないのも不思議です。 よろしくお願い致します。

  • 「オブジェクトが開いている場合は操作は許可され

    vbaループしながらマクロを実行しているのですが、 2度目のループで rs.Open "SELECT * FROM T明細", cn, adOpenStatic, adLockOptimistic の場所で 「オブジェクトが開いている場合は操作は許可されません」 となってしまいます。 エラーになって中断中に rs.Open "SELECT * FROM T明細", cn, adOpenStatic, adLockOptimistic の一つ前に、rs.Closeを入れて、 rs.Close rs.Open "SELECT * FROM T明細", cn, adOpenStatic, adLockOptimistic としてみましたが、 rs.Close の部分で 実行時エラー 3219 このコンテキストで操作は許可されていません。 となります。 マクロを停止せず、コードを修正して続行する方法と エラー発生の原因を教えてください。

  • ado フィルタで 含まない とするには?

    含むなら rs.Filter = "文字列 like '*A*'" でいけるのですが rs.Filter = "文字列 not like '*A*'" だと 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。 rs.Filter = "文字列 not like '%A%" でもダメでした。 NOTの位置がおかしいのでしょうか?

  • VBA ADO 複数条件のフィルタ

    エクセルからアクセスヘADOで接続し、レコードをエクセルに書き出しています。 アクセスのTPWIDには、 「URL」フィールド(テキスト型) 「終了」フィールド(YesNo型) があります。 (主キーは他のフィールド) エクセルVBAで --------------------------------------------------------- Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\テーブルのみ.mdb" RS.Open "SELECT * FROM TPWID", CN, adOpenStatic, adLockOptimistic RS.Filter = "終了 = " & False RS.Close: Set RS = Nothing End Sub --------------------------------------------------------- とする分には問題なくできますが、実際行いたい行為は下記なのですが RS.Filter の部分で、 「実行時エラー 3001 引数が間違った型、許容範囲外、又は競合しています」 と言うエラーになってしまいます。 --------------------------------------------------------- Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\テーブルのみ.mdb" RS.Open "SELECT * FROM TPWID", CN, adOpenStatic, adLockOptimistic RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' or URL = '" & "www.google.co.jp" & "' And 終了 = " & False RS.Close: Set RS = Nothing End Sub --------------------------------------------------------- RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' or URL = '" & "www.google.co.jp" & "' And 終了 = " & False を RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' and URL = '" & "www.google.co.jp" & "' And 終了 = " & False にすれば、エラーは発生しませんが その次のコードを実行しようとすると 「実行時エラー'3021' BOFとEOFのいずれかTRUEになっていか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。」 となってしまいます。 MsgBox RS.RecordCount で件数を取得したら0件なので、それでエラーになります。 条件としては、 URLフォールドでは ・www.yahoo.co.jp ・www.google.co.jp のどちらかの文字列を含み、なおかつ 終了フィールドにチェックがついてない(値は0) です。 ご教授よろしくお願いします。

  • ADONull以外のレコ-ドの件数を取得するには

    こんばんは。アクセス2007です。 フィールド1がnullになっているレコードがあり、 それをADOで抽出したいのですが、エラーになってしまいます。 コードは下記です。 ---------------------------------------------------------------- Option Compare Database Option Explicit Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "テーブル1", cn, adOpenForwardOnly, adLockOptimistic ' rs.Filter = "IsNull(フィールド1) = False" 'ダメ ' rs.Filter = "フィールド1 Is Not Null" 'ダメ MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ---------------------------------------------------------------- Filter の部分で、 「実行時エラー 3001 引数が間違った型、許容範囲外、又は競合していますとのエラーが発生します。」 になります。 null以外のレコードを読み取った後、addnewで追加していきたいので、 adLockReadOnlyは使わない方がいいですよね? ご回答よろしくお願いします。

  • ADO 「NEW」の意味、必要性

    ADOを使ってACCESSやSQLサーバーへ接続する時に Option Explicit Sub ADO() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=SQLOLEDB;Data Source=○○○\SQLEXPRESS;Initial Catalog=test;Integrated Security=SSPI" rs.Open "table1", cn, adOpenStatic, adLockOptimistic というようなコードを書きますが、 変数の宣言の「 New 」はどういう意味なのでしょうか? 何のためにつけるのでしょうか? あえて「 New 」を取ると、 「オブジェクト変数または With ブロック変数が設定されていません。」 というエラーになります。 普通の変数(Dim table名 As String)に 「 New 」を付けるとコンパイルエラーになります。 違いがわかりません。 よろしくお願いします。

専門家に質問してみよう