• ベストアンサー

テキスト形式だけど「between a and b」を使うには?

temtecomai2の回答

回答No.2

ちと行間を読むのが下手なので勝手な想像も交えます。 [Data] フィールドはテキスト型だけど「日付型」と解釈できる値が入力されてる。(2004/01/01 とか) この質問文には BETWEEN 部分でエラーになったと書かれていますが、実際には他にも抽出条件を指定してませんか? エラーの説明でいきなり 'and(・・・' ってありますけど、この and ってなんですか? [Data] フィールド以外のフィールドにも条件式を設定してるんですか? 私のところで実験した限り、 テーブル名:tbl01 フィールド名:m01Name (テキスト型), m01Date (テキスト型) 上記テーブルを参照するフォーム:frm01Test Dim sWhere As String sWhere = "(m01Name = 'hoge') AND (m01Date BETWEEN #2004/01/01# AND #2004/12/31#)" DoCmd.OpenForm "frm01Test", acNormal, , sWhere これできちんと表示されていますよ。 もし [Data] フィールドだけしか条件式をせっていしないのでしたら WhereCond = WhereCond & "and" & condData の "and" が邪魔してませんかね。 とにかく質問文にあるコードよりも前の部分が見えないので何ともいえませんけど・・・ WhereCond = WhereCond & "and" & condData って、これ以前に WhereCond に何か入れてるんですか? strCount って・・・

w-inty
質問者

お礼

回答ありがとうございます。 ほかの箇所で使用していた検索VBAを流用しているので多少変なコードがあるかもしれません(笑 ちょっと変更してみました。 WhereCond = WhereCond & condData として、 WhereCond = Mid(WhereCond, strCount + 1) の箇所はなくしました。 その他#3の方のアドバイスのようにVal関数を使わなくしました。 エラーはでなくなったのですが、検索結果が想像していたものと違う…。 検索しているのは下記のようなデータです。 *.*.*.1 *.*.*.2 *.*.*.4 *.*.*.10 例えば検索キーに*.*.*.2から*.*.*.5 とした場合には *.*.*.2 *.*.*.4 と出てほしいのですが…。

関連するQ&A

  • Accessの検索で「~以外」

    VBAで検索フォームを作成しています。 普通は「○○にあてはまるもの」という検索ですが、 「○○以外のものを検索」というようにしたい場合はどのようにすればいいのでしょうか? 通常の検索はこんな感じです。 If Me!検索値.Value <> "" Then condKey = "(T_マスタ.フィールド like '*" & Me!検索値.Value & "*')" WhereCond = WhereCond & tempOper & condKey End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果", acNormal, , WhereCond access2000です。

  • Accessの検索フォーム

    以前にも似たような質問をして、その時は解決したのですが、また同じようなことでつまづいて、以前の回答をみて、 そのとおりにやってるつもりなのに、できなくて…。 テーブル1とフォーム1・フォーム2があります。 フォーム1に入力された情報をもとに、テーブル1の内容を検索して、フォーム2に表示するものを作成しています。 テーブル1には「***.***.**.☆」(情報)という形の情報が入っています。 *の部分の桁数は固定で☆は不定形です。(テキスト形式) フォーム1に入力された情報は「(***.***.)**.*」(検索1)や「(***.***.)**.**」(検索2)などです。 ※()内は入力せず テーブル1の情報の9文字目以降と、フォーム1に入力された情報を比べたくて、以下のようなものを作成しました。 (多少省略等があります) condKensaku = "(Mid(Val(テーブル1.情報),9) between " & Val(Me!検索1.Value) & " and " & Val(Me!検索2.Value) & ")" wherecond = condKensaku DoCmd.OpenForm "フォーム2", acNormal, WhereCond これを実行すると 実行時エラー '2501': OpenForm アクションの実行はキャンセルされました。 と出て、デバッグを押すと、 DoCmd.OpenForm "フォーム2", acNormal, WhereCond の行が黄色になります。

  • Accessの検索フォーム(CLng)で。

    検索フォームの項目は以下の通りです。 ○ AND  ○ OR 名前  [    ] 項目  [    ]▼  [    ]▼  [    ]▼ もとになってるテーブルは ・名前 ・項目1 ・項目2 ・項目3 ・項目4 ・項目5 というようなっています。 (項目1-5は数値データなのであいまい検索はしたくありません。) 検索ボタンのコードは Select Case Me!検索方法.Value Case 1 'or tempOper = " AND " strCount = 5 Case 2 'and tempOper = " OR " strCount = 4 End Select '名前 If Me!SyainName.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!SyainName.Value & "*')" WhereCond = WhereCond & tempOper & condName End If If Me!項目1.Value <> "" Then condKoumoku1 = "(T_マスタ.項目1 = " & CLng(Me!項目1.Value) & ")" condKoumoku2 = "(T_マスタ.項目2 = " & CLng(Me!項目1.Value) & ")" condKoumoku3 = "(T_マスタ.項目3 = " & CLng(Me!項目1.Value) & ")" tempCond = tempCond & " OR (" & condKoumoku1 & " OR " & condKoumoku2 & " OR " & condKoumoku3 & ")" End If If tempCond <> "" Then tempCond = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果_一覧", acNormal, , WhereCond これを実行すると クエリ式 '((OR OR))' の構文エラー:演算子がありません。 と出ます。 どこを訂正すべきでしょうか? Access2000です。

  • アクセスVBAの検索で。

    アクセスでカレンダーというかスケジュールを管理できるようなものをつくろうとしています。 非連結フォーム1に ・入力年 ・入力月 ・[1]-[45]まで(それぞれ年月が変わると日付がかわる) という感じで入っています。 T_用件というテーブルには ・年(数値型 ・月(数値型 ・日(数値型 ・用件(テキスト型) とあり、これをもとに「F_用件」フォームを作成してあります。 フォーム1のボタンの1つを例にとるとこんな感じです。 If Me![7].Value <> "" Then Year = "(T_用件.年=" & (Me!入力年.Value) & ")" Month = "(T_用件.月=" & (Me!入力月.Value) & ")" Day = "(T_用件.年=" & (Me![7].Value) & ")" WhereCond = WhereCond & " AND (" & Year & " AND " & Month & " AND " & Day & ")" End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_用件", acNormal, , WhereCond こうするとF_用件フォームは開くのですが、きちんと検索されてきません。 どこが悪いのでしょうか? よろしくお願いします。

  • BETWEEN A and B, and BETWEEN A and C

    BETWEEN A and B, and BETWEEN A and C このような英文を書きたいのですが何か簡潔に書く方法はないか教えていただけないでしょうか? よろしくお願いいたします。

  • Access検索フォームで範囲を指定しての検索

    クエリーで計算して出した結果をもとにフォームを使って検索をしたいのですが、うまくできません。 クエリーの計算式は誕生日から年齢を出すものが入っています。 フォームのボタンにVBAで '年齢 If Me!年齢開始.Value <> "" Then Age1 = "(Q_メイン.年齢 >= " & "0" & " and =< " & Me!年齢終了.Value & ")" WhereCond = WhereCond & tempOper & Age1 End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果", acNormal, , WhereCond となっています。 tempOperは、検索方法がORとANDが選べるようになっていて、それの結果が入っています。

  • 以下のアクセスの検索フォームで。。。

    検索フォームの項目は以下の通りです。 ○ AND  ○ OR 名前  [    ] 項目  [    ]▼  [    ]▼  [    ]▼ もとになってるテーブルは ・名前 ・項目1 ・項目2 ・項目3 ・項目4 ・項目5 というようなっています。 検索ボタンのコードは Select Case Me!検索方法.Value Case 1 'or tempOper = " AND " strCount = 5 Case 2 'and tempOper = " OR " strCount = 4 End Select '名前 If Me!SyainName.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!SyainName.Value & "*')" WhereCond = WhereCond & tempOper & condName End If '項目 If Me!Koumoku1.Value <> "" Then condKoumoku1 = "(T_マスタ.項目1 like '*" & Me!Koumoku1.Value & "*')" condKoumoku2 = "(T_マスタ.項目2 like '*" & Me!Koumoku1.Value & "*')" condSKoumoku3 = "(T_マスタ.項目3 like '*" & Me!Koumoku1.Value & "*')" tempCond = tempCond & " OR (" & condKoumoku1 & " OR " & condKoumoku2 & " OR " & condKoumoku3 & ")" End If If tempCond <> "" Then tempComd = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果_一覧", acNormal, , WhereCond これを実行すると クエリ式 '(OR((T_マスタ.項目1 like …')の構文エラー:演算子がありません。 と出ます。 どこを訂正すべきでしょうか? (項目を含まない状態ではうまく検索できてました。) Access2000です。

  • BETWEEN A AND B

    検索条件でBETWEEN A AND Bを使いたいのですが、 例えば、データが10件登録されています。 社員NO が 0番~9番まで登録されています。 BETWEEN文で 3番以降のデータを取り出したのですが どうしたらいいでしょうか

  • between A and Bについて

    between A and Bの使い方についての質問です。 「4時から6時の間に」と言いたいとき between four and sixと言うと思うのですが, between at four and at sixという言い方も可能でしょうか? 前置詞句が前置詞の目的語になる場合があると聞いたことがあるので, 上記の言い方が可能かどうか よろしくお願いいたします。

  • VBAを使用した検索フォーム

    複数項目あるフィールドの年齢から検索をしたくて以下のようにしました。 tempCond = "" '年齢 If Me!年齢開始.Value <> "" Then Nenrei1 = "(Q_メイン.年齢1 between " & Me!年齢開始.Value & " and " & Me!年齢終了.Value & ")" Nenrei2 = "(Q_メイン.年齢2 between " & Me!年齢開始.Value & " and " & Me!年齢終了.Value & ")" tempCond = tempCond & " OR (" & Nenrei1 & " OR " & Nenrei2 & ")" End If If tempCond <> "" Then tempCond = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If これで実行をすると、 実行時エラー'2501'; OpenForm アクションの実行はキャンセルされました。 と出てしまいます。 上記の部分を記入するまでは検索ボタンは正常に動いていたのですが。 どこを直せばいいのでしょうか?