標題:
[發問]
時間範圍比對問題
[打印本頁]
作者:
child
時間:
2011-10-12 10:17
標題:
時間範圍比對問題
本帖最後由 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
作者:
GBKEE
時間:
2011-10-12 15:12
回復
1#
child
試試看
Sub Ex()
Dim A As Long, B As Long, i As Integer
A = #10/11/2011 8:00:00 AM#
B = #10/11/2011 2:30:00 PM#
For i = 1 To [C1].End(xlDown).Row
If Cells(i, "C") >= A And Cells(i, "C") <= B Then
Cells(i, "D") = "Y"
Else
Cells(i, "D") = "N"
End If
Next
End Sub
複製代碼
作者:
child
時間:
2011-10-12 16:17
回復
2#
GBKEE
版大好^_^
謝謝版大的幫忙
不好意思!剛剛沒有將問題點說明清楚,主要是想針對建立時間和修改時間兩個欄位之間的時間範圍比對。
以2011/10/11 8:00~2011/10/11 14:30的時間範圍,下列資料若只有比對修改時間會比對不到。
說明:
查詢時間2011/10/11 8:00~2011/10/11 14:30的時間區段,若這段時間有時間落在建立時間~修改時間這段時間範圍�堙A則代表有比對到。
檔案名稱 建立時間 修改時間 比對
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
很謝謝版大的幫忙,感激不盡^_^
作者:
GBKEE
時間:
2011-10-12 16:42
回復
3#
child
If Cells(i, "C") >= A And Cells(i, "C") <= B Then 改成 -> If Cells(i, "
B
") >= A And Cells(i, "C") <= B Then
作者:
child
時間:
2011-10-12 17:40
回復
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
真是抱歉沒有將問題說明清楚,很謝謝版大的幫忙^_^
作者:
Hsieh
時間:
2011-10-12 18:10
回復
5#
child
Sub nn()
a = #10/11/2011 8:00:00 AM#
b = #10/11/2011 2:30:00 PM#
For Each C In Range([C2], [C2].End(xlDown))
d = C.Offset(, -1)
If (a >= d And a <= C) Or (b >= d And b <= C) Then C.Offset(, 1) = "Y" Else C.Offset(, 1) = "N"
Next
End Sub
複製代碼
作者:
child
時間:
2011-10-12 20:11
回復
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版大的幫忙^_^
作者:
Hsieh
時間:
2011-10-12 20:33
回復
7#
child
沒錯啊!
[attach]8225[/attach]
作者:
child
時間:
2011-10-12 21:06
回復
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
還是需要作什麼設定?
作者:
Hsieh
時間:
2011-10-12 23:01
回復
9#
child
判斷式的條件看看這樣夠不夠
Sub nn()
a = #10/11/2011 8:00:00 AM#
b = #10/11/2011 12:30:00 PM#
For Each C In Range([C2], [C2].End(xlDown))
d = C.Offset(, -1)
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"
Next
End Sub
複製代碼
作者:
child
時間:
2011-10-12 23:53
回復
10#
Hsieh
再次謝謝Hsieh和GBKEE 版大的幫忙^_^ 感激不盡!
雖然測試還是有些差異,但是版大的熱心提供了小弟許多思考的方向,很謝謝你們的幫忙^_^
作者:
Hsieh
時間:
2011-10-13 21:01
回復
11#
child
用笨方法解決
Sub nn()
Dim i#
Set d = CreateObject("Scripting.Dictionary")
a = CDbl(#10/11/2011 8:00:00 AM#)
b = CDbl(#10/11/2011 2:30:00 PM#)
For Each c In Range([C2], [C2].End(xlDown))
k = Int(a) - Int(c.Offset(, -1))
c.Offset(, 1) = "N"
For i = IIf(k = 0, c.Offset(, -1), Int(c.Offset(, -1)) + k - 1) To c Step TimeValue("00:01:00")
If i >= a And i <= b Then c.Offset(, 1) = "Y": Exit For
Next
Next
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)