OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.246361
  • 閲覧数1209
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (3/3)

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

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

以上、よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル14

ベストアンサー率 51% (1179/2272)

再び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では異なるかも知れません。
では。
お礼コメント
yossiy

お礼率 100% (3/3)

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

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。maruru01です。 状況がよくわからないのですが。 まず、[日付]が数値型ということは、おそらく1~31の数値が入るのでしょうが、それに対して何のためにワイルドカードを使用しているのでしょうか。 あと、BETWEENとワイルドカードは併用出来ません。 期間指定はワイルドカードなど使わずに、普通に WHERE 日付 BETWEEN " & hizuke1 &a ...続きを読む
こんにちは。maruru01です。

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

お礼率 100% (3/3)

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

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

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

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

以上、補足いたします。どうぞ、よろしくお願いします。
投稿日時 - 2002-04-04 08:04:31
お礼コメント
yossiy

お礼率 100% (3/3)

有り難うございました。
投稿日時 - 2002-04-18 08:04:09
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ