アプリ版:「スタンプのみでお礼する」機能のリリースについて

コンボボックスの値を日付として扱うのなら

>strSQL = strSQL & " 生年月日 between " & リスト1Value & " and " & リスト2Value & ""

# を付けても行きません教えてください

質問者からの補足コメント

  • どう思う?

    試しましたが、うまくいきませんです
    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)) & "'"

    「コンボボックスの値を日付として扱うのなら」の補足画像1
    No.2の回答に寄せられた補足コメントです。 補足日時:2019/11/09 21:52
  • うーん・・・

    なにをどうればいいのかおしえてくれませんでしょうか
    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 & "'"

      補足日時:2019/11/09 22:09
  • うーん・・・

    いつも大変お世話になっております。
    生年月日 >= '" & リスト1Value & "' AND 生年月日 < '" & リスト2Value & "'"
    も試しましたが だめみたいです。
    今回ばかりはあきらめるしか

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/11/09 23:02
  • いつも大変お世話になっております。
    NS = NS & " WHERE"
    NS = NS & " 日付2"
    NS = NS & " BETWEEN #" & ListBox2.List(ListBox1.ListIndex) & "#"
    NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"
    だめでした。
    添付ファイルのやり方がわるいのでしょぅか

    「コンボボックスの値を日付として扱うのなら」の補足画像4
    No.4の回答に寄せられた補足コメントです。 補足日時:2019/11/09 23:10
  • どう思う?

    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) & "#"
    貼り付けました。うまく抽出できました。
    何時間もやっていて、気持ちがダウンしかけていました。
    ただ、きになるのが抽出もとの日付が最初はシリアル値のときは
    抽出できなかったこと。そのつぎに日付になおしたところ、再度実行で抽出できたこと。

    No.6の回答に寄せられた補足コメントです。 補足日時:2019/11/10 07:51
  • どう思う?

    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) & "#"
    貼り付けました。うまく抽出できました。
    何時間もやっていて、気持ちがダウンしかけていました。
    ただ、きになるのが抽出もとの日付が最初はシリアル値のときは
    抽出できなかったこと。そのつぎに日付になおしたところ、再度実行で抽出できたこと。

    No.5の回答に寄せられた補足コメントです。 補足日時:2019/11/10 07:53

A 回答 (8件)

結果を「CDate」関数で変換すればよいのでは?


実際には「CDate(ComboBox1.List(ComboBox1.ListIndex))」な感じになると思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2019/11/10 20:58

http://pgcafe.moo.jp/SQL/main_1.htm

<日付範囲を指定(AND)>
日付範囲はBETWEENではなく、ANDを使います。

その『リスト1Value』『リスト2Value』が文字列型であるなら、

strSQL = strSQL & " 生年月日 >= '" & リスト1Value & "' AND 生年月日 < '" & リスト2Value & "'"

未検証ですけど。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2019/11/10 20:58

No.2です。



私の方の回答はCDate関数は使いませんよ。
そもそもListBoxから得られる値が文字列なのですから、日付型と比較する意味がありません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2019/11/10 20:58

ついでですが。



>その『リスト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文は文字列ですし、その中で日付として区別出来るのは "#~#" と # に挟まれた部分ですから。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。(^O^)/

お礼日時:2019/11/10 20:58

No.4です。



NS = NS & " BETWEEN #" & ListBox2.List(ListBox2.ListIndex) & "#"
NS = NS & " AND #" & ListBox2.List(ListBox2.ListIndex) & "#"

は最初の方はListBox1ではないのかな?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2019/11/10 20:58

・どんな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の書き方が違っています。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2019/11/10 20:59

No.3の補足について。



質問文に書かれていたので、そのような変数を使われていると判断したのです。(コード全体は目隠し状態でしたので)

PupSQLite
https://forest.watch.impress.co.jp/library/softw …

私がSQL文を考える際に使用しているツールです。
Accessでも良いでしょうがこちらはインストールも必要なく軽量で楽なものです。
まず『SQL文の書き方』そのものを勉強されるべきかと思いますよ。

私は技術評論社の『データベース基礎の基礎』などでSQLの書き方を上記ツールで反復練習繰り返しましたし。
そこを飛ばしてしまっては躓くだけになるかもです。
と言うよりも最近のExcelならパワークエリってのもあるはずなので、変数やコントロールの値を与える前にってNo.6さんの考えには賛同します。
    • good
    • 0
この回答へのお礼

有難うございます。
今後
PupSQLite
https://forest.watch.impress.co.jp/library/softw …を利用させて頂きます。

お礼日時:2019/11/10 07:52

No.5の補足について。



どのようにデータを入力して『シリアル値』『日付』と区分けになったのかは定かではないですが、
そもそもシリアル値は『日付を整数部・時間を小数点以下とした数値』です。
なので見た目(セルの書式設定?)で『日付』のように見せてもデータ的には『実数(数値)』ですので、一致しなかったのではないかと。

『2019/10/1』のように入力したならデータとしても『日付』として格納されたため、正常に判断できたのかも。

PupSQLite はAccessを簡単にした感じのものですが、テーブルを作成する際のフィールド毎に扱うデータ型は明確に指定することになります。
文字列・日付・数値などなど。
なので見た目設定や自動判断するExcelのように混乱することは少ないとも言えます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
かなり焦ってしまいました。
反省します。
だけど、本当にありがとうございました。
助かりました。
本当に(^O^)/
感謝しています。

お礼日時:2019/11/10 21:01

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