【发布时间】:2018-02-08 02:39:42
【问题描述】:
我有一个表格,其中包含开始日期、结束日期和事件名称
我希望能够查找日期并查看它是否介于开始日期和结束日期之间,然后提取所有符合这些条件的事件名称
例如
start end name
1/1 1/7 Event1
1/5 1/8 Event2
1/6 1/6 Event3
如果我想要 1/5 的日期,则返回值为 Event1;事件2
Function DateEventLookup(eventdate As Long, startrng As Range, endrng As Range, pIndex As Long)
' eventdate is the lookup , startrng is the first array, endrng is the second array, pindex is the column to return
Dim rng As Range
Dim rng2 As Range
Dim xResult As String
xResult = ""
For Each rng In startrng
If rng.Value <= eventdate Then
For Each rng2 In endrng
If rng2.Value >= eventdate Then
xResult = xResult & "," & rng2.Offset(0, pIndex - 1)
End If
Next
End If
Next
DateEventLookup = xResult
End Function
我不断收到 N/A#,所以我不确定如何使用第二个标准来纠正这个问题
编辑#1
我综合了两个答案。但是我还是被骗了
Public Function EventList(starts As Range, ends As Range, events As Range, d As Date) As String
Dim N As Long
Dim i As Long
Dim P As Object
Set P = CreateObject("Scripting.Dictionary")
N = Cells(Rows.Count, starts.Column).End(xlUp).Row
For i = 1 To N
If CDate(starts(i)) <= d And CDate(ends(i)) >= d Then P.Item(events(i)) = 1
'EventList = EventList & "; " & events(i)
Next i
EventList = Join(P.keys, ", ")
End Function
不确定如何解决这个问题,我尝试添加
如果不是 p.exists(events(i)) 则添加
但我现在得到一个 N/A#
【问题讨论】:
-
请举例说明您是如何调用该函数的。您正在尝试对字符串进行数值比较。
-
查找值是串行的,日期也应该是串行的。它们只是格式化为 M/DD/YYYY
-
你是说序列号是字符串,所以你不能在它们上使用 > 或
-
日期只是 Excel 中的一个数字。它如何解释
If rng <= eventdate? -
Eventdate 是日期的序号,所以也应该是数字
标签: excel function datetime vba