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)を併用したい訳です。
この考え方以外で期間指定のデータ抽出ができるのであればその方法を教えて下さい。
以上、よろしくお願いします。
No.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では異なるかも知れません。
では。
いろいろお世話になりました。
自分でもいろいろと試行錯誤してやっていた所、単なる命令の記述ミスでした。
<ミスの内容>
WHERE 日付 BETWEEN " & HIZUKE1 & " AND " & HIZUKE2 & "OREDR BY 番号"
このように記述していた為、HIZUKE2の変数の後ろにORDER BY ~がくっついて
正しい命令となっていた事が分かりました。
<正しい命令>
WHERE 日付 BETWEEN " & HIZUKE1 & " AND " & HIZUKE2 & " ORDER BY 番号"
このように、ORDER BYの前に空白(スペース)を入れていなかったからでした。
お騒がせ致しましたが、今回、回答を頂いた命令は私は知らなかった為、また勉強になりました。
本当に有り難うございました。
No.1
- 回答日時:
こんにちは。
maruru01です。状況がよくわからないのですが。
まず、[日付]が数値型ということは、おそらく1~31の数値が入るのでしょうが、それに対して何のためにワイルドカードを使用しているのでしょうか。
あと、BETWEENとワイルドカードは併用出来ません。
期間指定はワイルドカードなど使わずに、普通に
WHERE 日付 BETWEEN " & hizuke1 & " AND " & hizuke2
とやってはだめなんですか?
とにかく、数値型の[日付]にワイルドカードを用いている状況がよくわかりません。
補足お願いします。
では。
この回答への補足
早速の回答有り難うございます。
説明が不足していたようなので補足します。
まず、なぜ日付にワイルドカードを使用するかについてです。
日付が140305のデータを抽出する
ワイルドカードを使用せず命令を書いた場合
WHERE 日付 = 140305 となる訳ですが、これではデータを抽出できません。
しかし、ワイルドカードを使用すると、
WHERE 日付 LIKE %140305% とするとデータを抽出できます。
従って、日付にワイルドカードを使用している訳です。
BETWEENとワイルドカードの併用はおそらく無理だと思っていました。
なにか他の方法で期間指定のデータを抽出できる方法はありませんか?
それと、日付にワイルドカードを使用しないとデータを抽出できないという件については、ひょっとするとデータに問題があるのかもしれません。
以上、補足いたします。どうぞ、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excelで日付のグラフへの表示 2 2022/04/15 11:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VisualBasic6.0のFormat関数で...
-
DataGridViewの和暦表示について
-
3人のじゃんけんのプログラム
-
DataGridViewでyyyy/MM/dd
-
コンボボックスに日付を表示する
-
ExcelVBAでSQLサーバの日付時刻...
-
Eclipseの対応する括弧の強調表...
-
VBAで日付入力しているのですが
-
エクセルのVBAで日付を検索し転...
-
VBAの質問になります 行の非表示
-
C++で日付判定を行いたい!!
-
ユーザーフォームのラベルに日...
-
VBA 日付、未来の日付はエラー...
-
Googleフォームで選択肢に応じ...
-
【VBA】土日をスキップして日付...
-
コンボボックスの値を日付とし...
-
VBAのapplication.ontime メソ...
-
■VBAマクロでワークブックAにワ...
-
今週は第何週ですか?
-
今日より前の書き方 マクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAの質問になります 行の非表示
-
ユーザーフォームのラベルに日...
-
Googleフォームで選択肢に応じ...
-
エクセルのVBAで日付を検索し転...
-
VisualBasic6.0のFormat関数で...
-
システム日付とは?
-
Eclipseの対応する括弧の強調表...
-
【VBA】土日をスキップして日付...
-
DataGridViewでyyyy/MM/dd
-
【Excel VBA】条件に合った行の...
-
VBAで当月の1日を表示するには...
-
VBA 日付、未来の日付はエラー...
-
JSPからYYYYMMDDで日付入力する
-
VB6.0 のformat関数について
-
指定した日付が、その月の第何...
-
VBで時間計算
-
VBAのオーバーフローについて質...
-
今日より前の書き方 マクロ
-
テキストボックスに今日の日付...
-
3人のじゃんけんのプログラム
おすすめ情報