• 締切済み

#の使い方

こんにちは。Acess2000(Windowsは2000です)での質問です。 いわゆる出納帳のようなデータベースを作成しています。 「日付1」テキストボックスと「日付2」テキストボックスに任意の日付を入力し、「期間指定」ボタンをクリックすると「支払日」がその期間に該当するデータを表示するようにしたくて、イベントプロシージャに次のように記述しました。 ---------------------- Private Sub 期間指定_Click() On Error GoTo ErrHand Me.Filter = "支払日 Between " & 日付1 & " And " & 日付2 Me.FilterOn = True Exit Sub ErrHand: MsgBox Err.Description End Sub ---------------------- これではうまくいかなかったので色々考えた結果「データ型の問題かな」と気付き(日付1と2に#****/**/**#と入力するとちゃんとフィルタがかかる)、一部分を試しに下のように書き換えました。 ---------------------- Me.Filter = "支払日 Between #" & 日付1 & "# And #" & 日付2# ---------------------- ところがこれで「期間指定」ボタンをクリックすると「型宣言文字と宣言されたデータ型が一致しません」とうエラーが出ます。 なにぶん見様見真似で作っているので、これ以上どうすればよいかが???です。何かヒントでも良いので、ご教授いただければうれしいです。

みんなの回答

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.2

「&」の使い方に悩んでいられるようなので……。 「&演算子」は文字列と文字列を結合する関数です。 つまり、 "A" & "B"は、"AB" "#" & "2002/09/12" & "#"は、"#2002/09/12#" となります。 ご質問のように Me.Filter = "支払日 Between #" & 日付1 & "# And #" & 日付2# となっていると、最後の「#」が文字列と判別されないでいます。(実は変数の型指定とか別の問題も出ています?) Me.Filter = "支払日 Between #" & 日付1 & "# And #" & 日付2 & "#" は、「"支払日 Between #"」、日付1、「"# And #"」、日付2と、「"#"」の5つの要素が連結されて、一つの文字列として、Me.Filterにセットされます. あと、余談ですが、……余談じゃない気もしますが。 日付を条件として指定する場合は、Format関数等で確実に書式を指定しないといけない場合があるので、注意が必要です。 VBAの2001~2012年問題と言うのがあって(ここでは割愛します)、日付を使って検索をする場合は注意してください。 たぶん、フォームのフィルターの場合は大丈夫ですが。DLookupとか、DCount関数等は確実に引っかかります。SQLもだめだったと思います。 のちのち悩む原因になると思いますので、参考URLでいろいろかかれていると思いますので、一度見てください。

参考URL:
http://www.google.com/search?num=50&lr=lang_ja&q=2001年問題%20VB
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Me.Filter = "支払日 Between #" & 日付1 & "# And #" & 日付2# を、 Me.Filter = "支払日 Between #" & 日付1 & "# And #" & 日付2 & "#" に修正して下さい。 それでもダメなら補足して下さい。

nash7342
質問者

お礼

maruru01さん、早速の回答ありがとうございます。 できました!ホントにありがとうございます! 実は似た方法も試した気がするんですけど、エラーがでたんです…きっと何かが間違ってたんでしょう(涙)。 参考書やアクセス関連のHPを参考にしてはいるんですが、どうしても「#」や「"」や「&」なんかが何にかかっているのか分からなくて混乱しています。 これからも精進、精進。 ありがとうございました。

関連するQ&A

  • アクセスで期間抽出

    お尋ねします アクセスで納品書のデータベースがあります   納品書データFormには 伝票番号、日付、客先名、数量のフィールドのフォームで テキストボックス1:始めの日 テキストボックス2:終了日 コマンドボタン1:期間で抽出 が配置しています テキストボックス1,2に日付、記入後、コマンドボタン1をクリックして 所要期間でフィルターで抽出するのですがうまく行きません コマンドボタン1クリック時のコード Private Sub コマンド1_Click() Me.Filter = "日付= 'Between" & Me![テキスト1] & "And" & Me![テキスト2] & "'" Me.FilterOn = True End Sub のコードで抽出してくれません、不都合をご指摘下さい なお 指定日での抽出は以下で出来ました。 Private Sub コマンド1_Click()  Me.Filter = "日付= '" & Me![テキスト1] & "'" Me.FilterOn = True End Sub エクセルのモジュールは少しかじったのですがアクセスは 始めたばかりでなかなか要領を得ません 宜しくお教え下さい。

  • 日付の抽出

    アクセスで日付が入力されているサブフォームから期間を指定して抽出したいと考えています。 Me!sub担当者別.Form.Filter = "日付 Between #" & Me!txt開始 & "# And #" & Me!txt終了 & "#" というふうにしたのですが、txt開始に02/02/02、txt終了に02/03/27を入力すると表示されるのに、txt開始に02/03/20とすると表示されるはずのデータが存在しているのに表示されません。 どうしてこういう風に表示されたり、されなかったりするのかがよく分かりません。 よろしくお願いします。

  • 日付型と文字列型、両方にフィルタをするには

    アクセス フォームで日付型(Between and)と文字列型、両方にフィルタをするには? Private Sub cmd_ボタン1_Click() Me.Form.Filter = _ "日付 Between #" & Me.cmb_日付1.Value & "# And #" & Me.cmb_日付2.Value & "#" & _ " and 会社名 like " & "*" & Me.cmb_会社名.Value & "*" Me.Form.FilterOn = True End Sub これのどこが変なのか教えていただけますか? 実行時エラー3075「クエリ式の構文エラー:演算子がありません。」というエラーになります。

  • Accessのフィルタについて

    Access2000を使っています。 フォームに配置した「TextBox1」と「TextBox2」(両者とも日付/時刻型)を引数として指定範囲の抽出をすべく Me.Filter="検索結果 Between #"& TextBox1 &"# And #"& TextBox2 &"#" Me.FilterOn=True (「検索結果」はテーブルに配置したフィールドに連結) のコードをボタンのクリックイベントに設定しました。 ところが、例えば「TextBox1」に「01/02/03」、また、「TextBox2」に「01/05/04」を入力して、ボタンをクリックしても抽出されません。 フォームに戻って、フォームのプロパティで確認するとフィルタの欄に 「検索結果 Between #01/02/03# And #01/05/04#」と表示されておりコードに間違いはないと思われますが、フォームフィルタをかけてみると、検索結果のテキストボックスに「Between #03/01/02# And #04/01/05#」という具合に日付が「日/年/月」に置き変わって表示されています。これがコードを実行しても抽出されない原因だと思われるのですか、何故、このように日付が変わってしまうのでしょうか。また、どうすれば変わらないようにできるのでしょうか。 よろしくお願いします。

  • EXCEL VBAでクエリーを使用した抽出方法

    EXCEL VBAでクエリーを使用しデータを抽出する命令で困っています。 原始データ:CSVファイル (カンマ区切り) 項目の中に日付の入った項目があり指定した1日だけの抽出はうまくいきますが、 期間を指定(複数日)した場合にエラーとなってしまいます。 1日だけを指定した場合の命令(うまくいく) 日付という項目には数値タイプのデータが入っている hizukeという変数にテキストボックスの値を代入する hizuke = TEXTBOX日付1.Value SELECT * FROM ファイル名 WHERE 日付 LIKE '%" & hizuke1 & "%' " ※ ここでワイルドカード(%)を使わないとエラーとなってしまいますが・・・ 期間指定をした場合の命令(エラーとなる) 日付という項目には数値タイプのデータが入っている hizuke1という変数にテキストボックスの値を代入する hizuke2という変数にテキストボックスの値を代入する hizuke1 = TEXTBOX日付1.Value hizuke2 = TEXTBOX日付2.Value SELECT * FROM ファイル名 WHERE 日付 BETWEEN LIKE '%" & hizuke1 & "%' AND LIKE '%" & hizuke2 & "%' " この命令が正しいとは思いませんが、要はワイルドカードと演算子(BETWEEN)を併用したい訳です。 この考え方以外で期間指定のデータ抽出ができるのであればその方法を教えて下さい。 以上、よろしくお願いします。

  • 日付によるデータ抽出について

    日付によるデータ抽出について 環境: ACCESS2000 状況: メインフォーム(テキスト期間A、テキスト期間B、テキスト品番、検索ボタン)    サブフォーム(データシート)    管理テーブル( 品番  /  レンタル日  /  返却日)    ※管理テーブルは他テーブルのコピー用 やりたい事: 簡潔にいうと期間と品番による抽出。       但し、テキスト期間Bが空白の場合、テキスト期間A以降のデータ抽出。          テキスト期間Aが空白の場合、テキスト期間B以前のデータ抽出。       さらに、テキスト品番が空白の場合、期間のみでの抽出。    コード: Private Sub 検索ボタン_Click()  Dim db As DAO.Database   Set db = CurrentDb   db.Execute "DELETE * FROM 管理テーブル"   db.Execute "INSERT INTO 管理テーブル SELECT * FROM 他テーブル"  Dim 抽出条件 As String   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=True And IsNull(Me!テキスト品番)= True Then    抽出条件 = "[レンタル日] <= '" & Me!テキスト期間A & "'"   End If   If IsNull(Me!テキスト期間A)=True And IsNull(Me!テキスト期間B)=False And IsNull(Me!テキスト品番)= True Then    抽出条件 = "[レンタル日] >= '" & Me!テキスト期間B & "'"   End If   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=False And IsNull(Me!テキスト品番)= True Then    抽出条件 = "[品番] <= '" & Me!テキスト品番 & "'"   End If   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=True And IsNull(Me!テキスト品番)= False Then    抽出条件 = "[レンタル日] >= '" & Me!テキスト期間A & "'" And "[品番]='" & Me!テキスト品番 & "'"   End If   If IsNull(Me!テキスト期間A)=False And IsNull(Me!テキスト期間B)=False And IsNull(Me!テキスト品番)= False Then    抽出条件 = "[レンタル日] Between " $ Me!テキスト期間A & " & Me!テキスト期間B And "[品番] = '" & Me!テキスト品番 & "'"   End If Me!サブフォーム.Form.Filter = 抽出条件 ← 実行時エラー2465 指定した式で参照されている'サブフォーム'フィールドが見つかりません。 Me!サブフォーム.Form.FilterOn = True End Sub 上記エラーが出てしまうのですが、まだまだ未熟で どこが悪いかわからなくて困っております。 間違っていたりと上手くないコードだとは思いますが ご教授の程宜しくお願い致します。   

  • ACCESSのFILTERについて教えてください。

    いつも、お世話になっております。 以下について教えてください。 会社内のシステムのデータからACCESSでリンクを張って、日付(テキスト型)の絞り込み機能を作りたいと思い、以下のようにPGをくんだのですが、「直前の操作は取り消されました」と出て原因がわかりません。 (ちなみにYYYYMMDDの形で入力します。) Me.Filter = "[日付] >= " & Me.txt_開始 & "And" & "[日付] <= " & Me.txt_終了 Me.FilterOn = True BETWEENでやってみても同じでうまくいきませんでした。 すみませんが、原因とうまく行く対処法を教えてください。 お願いします。

  • アクセスの複数検索で日付の絞込みの仕方

    アクセスでいま3種類の検索をかけて絞込みをしています。 テキスト型と数値型と日付で検索をかけてるのですが 日付の部分を一致だけではなくいつからいつまでという風にも絞り込みたいといわれたのですが いまいちやり方がわかりません。。。 クエリでしたら簡単なのですがすでにフォームを作成して運用していっていますので 下記にプラスして出来るようにご教授お願い致します。 今現在のコードです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" End If If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 採取日を範囲指定で検索したいです。 範囲指定だけではなくその日だけ検索というのも可能ならばお願いします。 Between andでするというのだけは分かるのですが。。。

  • Accessクエリの抽出条件にフォームから挿入する方法(2)

    フォームにいくつかの抽出条件を指定するためのテキストボックスをセットし、そこに入力されたデータをクエリの抽出条件に挿入しデータ抽出を行っておりますが、たとえば販売期間でデータを抽出するために、クエリの抽出条件に Between [Forms]![フォーム名]![売上日FROM] And [Forms]![フォーム名]![売上日TO]と入力しているのですが、テキストボックスに指定日付が入っていれば問題なく抽出できるのですが、販売期間の指定なしの場合、売上日from及び売上日TOがNULLとなるためか抽出結果がゼロ件になってしまいます。 期間指定なしの場合でも抽出ができるようにするためにはどのように記述すればよいか教えてください。よろしくお願いいたします。

  • 合計を求めるクエリーについて

    1日から30日の間に誰が何のパンを何個売ったのかを調査できるようなデータベースを作ってみました。 クエリーの抽出条件はBetween「○○○」And「○○○」で日付で指定するようにしました。 (日付ですがデータ型はテキスト型です) 該当するレコードが30件あったとすると30件のレコードが抽出されますが、この期間内に誰が何のパンを何個売ったかの合計がわかるようにするにはどうすればいいのでしょうか? なんかうまく説明できなくてすみませんが教えてください。 よろしくお願いいたします。