No.2
- 回答日時:
<日付範囲を指定(AND)>
日付範囲はBETWEENではなく、ANDを使います。
その『リスト1Value』『リスト2Value』が文字列型であるなら、
strSQL = strSQL & " 生年月日 >= '" & リスト1Value & "' AND 生年月日 < '" & リスト2Value & "'"
未検証ですけど。
No.4
- 回答日時:
ついでですが。
>その『リスト1Value』『リスト2Value』が
って変数名じゃなかったんですね。
最初に補足のコードを出した方が早かったかもですよ。
Between 使うなら
NS = NS & " WHERE"
NS = NS & " 日付2"
NS = NS & " BETWEEN #" & ListBox2.List(ListBox2.ListIndex) & "#"
NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"
でしょうね。
いくらListBoxの値をCDate関数で日付型にしてもSELECT文は文字列ですし、その中で日付として区別出来るのは "#~#" と # に挟まれた部分ですから。
No.6
- 回答日時:
・どんなSQLにしたいかを考える
・実際にそのSQLになっているかを確認する
mboxで表示するとか、SQL実行直前にブレークポイントに置いて変数の中身を確認するとか。
・「だめでした」なんて報告はまったく役に立たないから、どうなったかを正確に書く
・ソースを書くときは、実際に使っているコードをコピペする
例えば
NS = NS & " BETWEEN #" & ListBox2.List(ListBox1.ListIndex) & "#"
・ListBox1.List(ListBox1.ListIndex) & だと思うけど、書き写すときに間違えたのか、元々そうなのかがはっきりしない。
・実際の変数NSの内容を確認すれば BETWEEN #2019/10/31# and #2019/11/30# とかになっていて気付くのでは。
ListBox2.List(ListBox2.ListIndex) が日付とは全然違う書式になっているかもしれない。
・「SQLが文法的に間違えている」のか「抽出条件が思ったものと違う」のかで、対処方法が違います。
「だめでした」では、そういう判断もできません。
今回、考えたSQLは次のようなものでしょう。
SELECT
取引先コード,
format(日付1,'yy年mm月dd日'),
format(日付2,'yy年mm月dd日') ,
日付2-日付1 as 23
FROM [顧客マスタ$]"
WHERE BETWEEN #2019/10/1# and #2019/10/31#
だったら、まずは、Listboxの値を使わずに、上記のSQLが正しく動作するのか確認しましょう。
この時点で「だめ」なら、SQL自体の考え直しです。
うまくいくようになったら、条件をListboxを使ったものにします。
このときいできあがるSQLが、思っていたのと違うなら、VBAの書き方が違っています。
No.7
- 回答日時:
No.3の補足について。
質問文に書かれていたので、そのような変数を使われていると判断したのです。(コード全体は目隠し状態でしたので)
PupSQLite
https://forest.watch.impress.co.jp/library/softw …
私がSQL文を考える際に使用しているツールです。
Accessでも良いでしょうがこちらはインストールも必要なく軽量で楽なものです。
まず『SQL文の書き方』そのものを勉強されるべきかと思いますよ。
私は技術評論社の『データベース基礎の基礎』などでSQLの書き方を上記ツールで反復練習繰り返しましたし。
そこを飛ばしてしまっては躓くだけになるかもです。
と言うよりも最近のExcelならパワークエリってのもあるはずなので、変数やコントロールの値を与える前にってNo.6さんの考えには賛同します。
有難うございます。
今後
PupSQLite
https://forest.watch.impress.co.jp/library/softw …を利用させて頂きます。
No.8ベストアンサー
- 回答日時:
No.5の補足について。
どのようにデータを入力して『シリアル値』『日付』と区分けになったのかは定かではないですが、
そもそもシリアル値は『日付を整数部・時間を小数点以下とした数値』です。
なので見た目(セルの書式設定?)で『日付』のように見せてもデータ的には『実数(数値)』ですので、一致しなかったのではないかと。
『2019/10/1』のように入力したならデータとしても『日付』として格納されたため、正常に判断できたのかも。
PupSQLite はAccessを簡単にした感じのものですが、テーブルを作成する際のフィールド毎に扱うデータ型は明確に指定することになります。
文字列・日付・数値などなど。
なので見た目設定や自動判断するExcelのように混乱することは少ないとも言えます。
ありがとうございました。
かなり焦ってしまいました。
反省します。
だけど、本当にありがとうございました。
助かりました。
本当に(^O^)/
感謝しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) SQLで抽出 4 2022/12/04 13:55
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- Visual Basic(VBA) ExcelVBA ドロップボックスで月を選択するとそれ以降のデータが残るようにしたい。 3 2022/12/16 14:53
- Visual Basic(VBA) ListView1の条件のやり方 3 2022/06/18 22:43
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
JSPからYYYYMMDDで日付入力する
-
テキストボックスに今日の日付...
-
VBA 日付・時刻の判別 時刻を認...
-
【VBA】土日をスキップして日付...
-
VBA のMSG の入力部分で日付を...
-
ふと、気になる事が… 中年以降...
-
VisualBasic6.0のFormat関数で...
-
VBA:日付をシリアル値にできる...
-
ユーザーフォームのラベルに日...
-
3人のじゃんけんのプログラム
-
【Excel VBA】条件に合った行の...
-
VBA 日付、未来の日付はエラー...
-
DateTimePickerを西暦表示にす...
-
VBAの質問になります 行の非表示
-
システム日付とは?
-
パソコンの日付変更したら、ヤ...
-
エクセルのVBAで日付を検索し転...
-
日付を操作したい
-
VBAで当月の1日を表示するには...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
ユーザーフォームのラベルに日...
-
VBAの質問になります 行の非表示
-
エクセルのVBAで日付を検索し転...
-
VisualBasic6.0のFormat関数で...
-
DataGridViewでyyyy/MM/dd
-
3人のじゃんけんのプログラム
-
システム日付とは?
-
コンボボックスに日付を表示する
-
今日より前の書き方 マクロ
-
【VBA】土日をスキップして日付...
-
エクセルVBAで機械の稼働時間を...
-
VBA 日付、未来の日付はエラー...
-
DataGridViewの和暦表示について
-
VBAで当月の1日を表示するには...
-
「eclipseで作るカレンダー(ス...
-
テキストボックスにカレンダー...
-
ExcelVBAでSQLサーバの日付時刻...
-
【Excel VBA】条件に合った行の...
-
VBAのapplication.ontime メソ...
おすすめ情報
試しましたが、うまくいきませんです
10/01から10/31 でも全部抽出されてしまいます。
NS = " "
NS = NS & " SELECT"
NS = NS & " 取引先コード,format(日付1,'yy年mm月dd日'),format(日付2,'yy年mm月dd日') , " _
& "日付2-日付1 as 23"
NS = NS & " FROM"
NS = NS & " [顧客マスタ$]"
NS = NS & " WHERE"
NS = NS & " 日付2"
NS = NS & " AND '" & CDate(ListBox2.List(ListBox2.ListIndex)) & "'"
NS = NS & " AND '" & CDate(ListBox2.List(ListBox2.ListIndex)) & "'"
なにをどうればいいのかおしえてくれませんでしょうか
NS = NS & " SELECT"
NS = NS & " 取引先コード,format(日付1,'yy年mm月dd日'),format(日付2,'yy年mm月dd日') , " _
& "日付2-日付1 as 23"
NS = NS & " FROM"
NS = NS & " [顧客マスタ$]"
NS = NS & " WHERE"
NS = NS & " cdate(日付2) >= '" & ListBox2.Value & "' AND cdate(日付2) < '" & ListBox2.Value & "'"
いつも大変お世話になっております。
生年月日 >= '" & リスト1Value & "' AND 生年月日 < '" & リスト2Value & "'"
も試しましたが だめみたいです。
今回ばかりはあきらめるしか
いつも大変お世話になっております。
NS = NS & " WHERE"
NS = NS & " 日付2"
NS = NS & " BETWEEN #" & ListBox2.List(ListBox1.ListIndex) & "#"
NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"
だめでした。
添付ファイルのやり方がわるいのでしょぅか
SELECT
取引先コード,
format(日付1,'yy年mm月dd日'),
format(日付2,'yy年mm月dd日') ,
日付2-日付1 as 23
FROM [顧客マスタ$]"
WHERE BETWEEN #2019/10/1# and #2019/10/31#
大丈夫でした。
落ち着いて
NS = NS & " BETWEEN #" & ListBox1.List(ListBox1.ListIndex) & "#"
NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"
貼り付けました。うまく抽出できました。
何時間もやっていて、気持ちがダウンしかけていました。
ただ、きになるのが抽出もとの日付が最初はシリアル値のときは
抽出できなかったこと。そのつぎに日付になおしたところ、再度実行で抽出できたこと。
SELECT
取引先コード,
format(日付1,'yy年mm月dd日'),
format(日付2,'yy年mm月dd日') ,
日付2-日付1 as 23
FROM [顧客マスタ$]"
WHERE BETWEEN #2019/10/1# and #2019/10/31#
大丈夫でした。
落ち着いて
NS = NS & " BETWEEN #" & ListBox1.List(ListBox1.ListIndex) & "#"
NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"
貼り付けました。うまく抽出できました。
何時間もやっていて、気持ちがダウンしかけていました。
ただ、きになるのが抽出もとの日付が最初はシリアル値のときは
抽出できなかったこと。そのつぎに日付になおしたところ、再度実行で抽出できたこと。