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)を併用したい訳です。

この考え方以外で期間指定のデータ抽出ができるのであればその方法を教えて下さい。

以上、よろしくお願いします。

A 回答 (2件)

再びmaruru01です。



日付が"140305"のよう表現になっていては、日付として扱うのは難しいと思います。
おそらく「平成14年3月5日」ということなのでしょうが、数値型として扱っているので、「14万3百5」という数値でしか認識出来ません。
出来れば、これを日付型に変換した方がいいです。
この場合、
= DateSerial(年, 月, 日)
とすれば日付を表すVariant型の値を返してくれるのですが、どうも年が和暦のようなので、ちょっと工夫が要りそうです。
日付の値が、「年2桁+月2桁+日2桁」になっている場合に限りますが、前から2桁ずつ変数(例えば、strYear, strMonth, strDay(全てString型))に格納し、Date型の変数(例えばHiduke)に、
Hiduke = CDate("H" & strYear & "/" & strMonth & "/" & strDay)
(なお、先頭の"H"は平成の意味、昭和なら"S"などと変更する)
というように元データを作り直します。(もちろん日付フィールドは日付型)
そうしたら、テキストボックス1,2には、"2002/3/5"などのように日付を表す文字列を入力して、
"WHERE 日付 BETWEEN #" & hizuke1 & "# AND #" & hizuke2 & "#"
とすれば抽出できると思います。
なお、上記はExcel2000の場合で97や95では異なるかも知れません。
では。
    • good
    • 0
この回答へのお礼

いろいろお世話になりました。
自分でもいろいろと試行錯誤してやっていた所、単なる命令の記述ミスでした。
<ミスの内容>
WHERE 日付 BETWEEN " & HIZUKE1 & " AND " & HIZUKE2 & "OREDR BY 番号"
このように記述していた為、HIZUKE2の変数の後ろにORDER BY ~がくっついて
正しい命令となっていた事が分かりました。
<正しい命令>
WHERE 日付 BETWEEN " & HIZUKE1 & " AND " & HIZUKE2 & " ORDER BY 番号"
このように、ORDER BYの前に空白(スペース)を入れていなかったからでした。
お騒がせ致しましたが、今回、回答を頂いた命令は私は知らなかった為、また勉強になりました。
本当に有り難うございました。

お礼日時:2002/04/04 17:25

こんにちは。

maruru01です。

状況がよくわからないのですが。
まず、[日付]が数値型ということは、おそらく1~31の数値が入るのでしょうが、それに対して何のためにワイルドカードを使用しているのでしょうか。
あと、BETWEENとワイルドカードは併用出来ません。
期間指定はワイルドカードなど使わずに、普通に
WHERE 日付 BETWEEN " & hizuke1 & " AND " & hizuke2
とやってはだめなんですか?
とにかく、数値型の[日付]にワイルドカードを用いている状況がよくわかりません。
補足お願いします。
では。

この回答への補足

早速の回答有り難うございます。
説明が不足していたようなので補足します。
まず、なぜ日付にワイルドカードを使用するかについてです。

日付が140305のデータを抽出する
ワイルドカードを使用せず命令を書いた場合
WHERE 日付 = 140305 となる訳ですが、これではデータを抽出できません。
しかし、ワイルドカードを使用すると、
WHERE 日付 LIKE %140305% とするとデータを抽出できます。
従って、日付にワイルドカードを使用している訳です。

BETWEENとワイルドカードの併用はおそらく無理だと思っていました。
なにか他の方法で期間指定のデータを抽出できる方法はありませんか?

それと、日付にワイルドカードを使用しないとデータを抽出できないという件については、ひょっとするとデータに問題があるのかもしれません。

以上、補足いたします。どうぞ、よろしくお願いします。

補足日時:2002/04/04 08:04
    • good
    • 0
この回答へのお礼

有り難うございました。

お礼日時:2002/04/18 08:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ