イベントの日付に基づいて MySQL データベースから特定のイベントをピックアップする Excel 2010 の VBA スクリプトに取り組んでいます。データベースの日付は "yyyy-mm-dd hh:mm:ss" に保存されます。私のユーザーは、関心のあるイベントをフィルター処理するために、開始日から終了日までの範囲を使用します。簡単にするために、範囲に 2 つのカレンダー コントロール (mscal.ocx) を使用します。カレンダーをクリックするたびに、次のようなクエリ文字列のデータを取得するセルを自動的に更新するように、2 つの単純なサブルーチンを作成しました。
Private Sub Calendar1_Click()
Dim date1, datetime1, time1 As Date
Cells(29, 10) = CDbl(Calendar1.Value)
Cells(29, 10).NumberFormat = "yyyy-mm-dd"
Cells(30, 10).NumberFormat = "hh:mm:ss"
Cells(31, 11).NumberFormat = "yyyy-mm-dd hh:mm:ss"
date1 = Cells(29, 10)
time1 = Cells(30, 10)
datetime1 = date1 & " " & time1
Cells(31, 10) = datetime1
Cells(29, 10).Select
End Sub
Private Sub Calendar2_Click()
Dim date2, datetime2, time2 As Date
Cells(29, 11) = CDbl(Calendar2.Value)
Cells(29, 11).NumberFormat = "yyyy-mm-dd"
Cells(30, 11).NumberFormat = "hh:mm:ss"
Cells(31, 11).NumberFormat = "yyyy-mm-dd hh:mm:ss"
date2 = Cells(29, 11)
time2 = Cells(30, 11)
datetime2 = date2 & " " & time2
Cells(31, 11) = datetime2
Cells(29, 11).Select
End Sub
それは、カレンダー コントロールによって指定された形式 (dd/mm/yyyy) を yyyy-mm-dd に変更するという、私がやりたいことをほぼ実行します。はい、ほぼ、日の値が 1 から 12 の間でのみ機能するため、日時セルは「yyyy-mm-dd hh:mm:ss」として適切に表示されます。13 ~ 31 日の値の場合、datetime セルはフォーマットされず、代わりに「dd/mm/yyyy hh:mm:ss」として表示されます。
ここで、セル 29,10 および 29,11 は日付に関係なく常に適切な形式 (yyyy-mm-dd) を持っていることに注意してください。問題はセル 31,11 および 31,10 にあります。
ここで、セルをダブルクリックし、カーソルを点滅させてEnterキーを押すと、フォーマットが実行され、フォーマットが適切なフォーマットに変更されます(13から31の間の日の値でも)。ただし、これの目的はすべてを可能な限り自動化することであるため、実際には解決策ではありません。必要に応じてファイルを添付できます。なぜなら、特定の値では機能し、他の値では機能しないというのは少しばかげているように聞こえるからです。
助けてください !
編集 ::
わかりました、迅速な回答をありがとうございます。私はあなたの解決策を確認しました。それで、最初に戻りました。使用する
Private Sub CommandButton1_Click()
Dim date1, date2, datetime1, datetime2, time1, time2, time3 As Date
date1 = Cells(29, 10)
time1 = Cells(30, 10)
datetime1 = Format(date1, "dd/mm/yyyy") & " " & Format(time1, "hh:mm:ss")
Cells(31, 10) = datetime1
End Sub
うまく機能しますが、セルの値など、日の値が1から12の場合にのみ機能します
日にち
2012-09-12
時間
15:00:00
答えは私が望む通りです。
日付時刻
2012-09-12 15:00:00
しかし、日の値を 13 から 31 の 12 より上に設定するとすぐに、正常に動作しなくなり (そう、それがいかにばかげているかはわかります)、代わりに得られる結果は次のとおりです。
日付時刻
2012/09/13 15:00:00
どんな提案も大歓迎です...