返回列表 上一主題 發帖

[發問] 時間範圍比對問題

[發問] 時間範圍比對問題

本帖最後由 child 於 2011-10-12 10:23 編輯

想針對某段時間找出符合時間範圍內的資料,說明如下:

例:
針對2011/10/11 8:00~2011/10/11 14:30的時間範圍,比對建立時間(B欄)到修改時間(C欄)的時間範圍(多筆資料),若建立時間~修改時間的時間範圍內有時間剛好落在需比對的時間範圍內,D欄比對結果顯示Y;若不在需比對時間範圍內則顯示N。

很謝謝大家的幫忙^_^

檔案名稱        建立時間            修改時間                             比對
AA        2011/10/1 08:30        2011/10/11 12:00        Y
AB        2011/10/1 09:05        2011/10/6 20:15        N
AC        2011/10/6 09:32        2011/10/11 13:43        Y
DD        2011/10/11 15:00        2011/10/12 17:43        N
小孩

回復 11# child

用笨方法解決
  1. Sub nn()
  2. Dim i#
  3. Set d = CreateObject("Scripting.Dictionary")
  4. a = CDbl(#10/11/2011 8:00:00 AM#)
  5. b = CDbl(#10/11/2011 2:30:00 PM#)
  6. For Each c In Range([C2], [C2].End(xlDown))
  7. k = Int(a) - Int(c.Offset(, -1))
  8. c.Offset(, 1) = "N"
  9. For i = IIf(k = 0, c.Offset(, -1), Int(c.Offset(, -1)) + k - 1) To c Step TimeValue("00:01:00")
  10.    If i >= a And i <= b Then c.Offset(, 1) = "Y": Exit For
  11. Next
  12. Next
  13. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 10# Hsieh


     再次謝謝Hsieh和GBKEE 版大的幫忙^_^ 感激不盡!
     雖然測試還是有些差異,但是版大的熱心提供了小弟許多思考的方向,很謝謝你們的幫忙^_^
小孩

TOP

回復 9# child
判斷式的條件看看這樣夠不夠
  1. Sub nn()
  2. a = #10/11/2011 8:00:00 AM#
  3. b = #10/11/2011 12:30:00 PM#
  4. For Each C In Range([C2], [C2].End(xlDown))
  5. d = C.Offset(, -1)
  6. If (a >= d And a <= C) Or (a <= d And a <= C) Or (b >= d And C <= b) Then C.Offset(, 1) = "Y" Else C.Offset(, 1) = "N"
  7. Next
  8. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 8# Hsieh


    謝謝Hsieh版大您的幫忙,剛剛測試發現若修改時間在2011/10/11  13:00:00 PM之內,好像就比對不到,但若大於2011/10/11  13:00:00 PM則可以。測試結果如下:

檔案名稱        建立時間                                 修改時間                                                   比對
AA        2011/10/11 08:30:00 AM        2011/10/11 12:59:59 PM        N
AB        2011/10/11 09:05:00 AM        2011/10/13  13:00:00 PM        Y
DE        2011/10/11 09:00:00 AM        2011/10/11 10:43:00 AM        N

還是需要作什麼設定?
小孩

TOP

回復 7# child


    沒錯啊!
play.gif
學海無涯_不恥下問

TOP

回復 6# Hsieh


    很謝謝Hsieh版大的幫忙,剛剛測試發現若比對時間剛好在查詢時間2011/10/11 8:00~2011/10/11 14:30的範圍內,好像就比對不到。

檔案名稱        建立時間            修改時間                            比對
DD        2011/10/11 09:05        2011/10/11 10:05        N

謝謝Hsieh版大的幫忙^_^
小孩

TOP

回復 5# child
  1. Sub nn()
  2. a = #10/11/2011 8:00:00 AM#
  3. b = #10/11/2011 2:30:00 PM#
  4. For Each C In Range([C2], [C2].End(xlDown))
  5. d = C.Offset(, -1)
  6. If (a >= d And a <= C) Or (b >= d And b <= C) Then C.Offset(, 1) = "Y" Else C.Offset(, 1) = "N"
  7. Next
  8. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 4# GBKEE


不好意思一直麻煩版大,之前第一次測試有修改成If Cells(i, "B") >= A And Cells(i, "C") <= B Then,
但是因為要比對是時間範圍,所以無法呈現自己想要的結果,如下:
查詢時間區段:2011/10/11 8:00~2011/10/11 14:30
比對2011/10/11 09:05~2011/10/13 20:15 ,2011/10/11 09:05 >2011/10/11 14:30比對不到。
比對2011/10/1 08:30~2011/10/12 12:00 ,2011/10/1 08:30<2011/10/11 8:00、2011/10/12 12:00 >2011/10/11 14:30比對不到。


程式比對方式說明:
2011/10/11 8:00~2011/10/11 14:30的時間區段比對下列時間區段:
有部分時間落在2011/10/11 09:05~2011/10/13 20:15之間→有比對到
有部分時間落在2011/10/1 08:30~2011/10/12 12:00之間→有比對到
無時間點落在2011/10/1 09:05~2011/10/6 20:15之間→沒有比對到

呈現結果:
檔案名稱        建立時間            修改時間                             比對
AA        2011/10/1 08:30        2011/10/12 12:00        Y
AB        2011/10/11 09:05      2011/10/13 20:15        Y
BA        2011/10/1 09:05        2011/10/6 20:15           N

真是抱歉沒有將問題說明清楚,很謝謝版大的幫忙^_^
小孩

TOP

回復 3# child
If Cells(i, "C") >= A And Cells(i, "C") <= B Then  改成 ->  If Cells(i, "B") >= A And Cells(i, "C") <= B Then

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題