在与另一列和date匹配的列中search值?

我有数据存储在三列Excel中

列A:序列号列B:date列C:值(例如成本)

我需要查找与特定序列号(A列)和date(B列)相关联的值(C列)。

因此,例如,在下面的屏幕截图中,如果要查找与序列号(T455)和date(2010年12月13日)相关的值,则值应为8。

在这里输入图像说明

我能想出的唯一方法是计算效率低下的,因为每次我寻找一个值时,我都会遍历所有的单元格。

是否有一种方法,例如,会限制给定序列号的search区域?

例如,如果我正在查找序列号T455的值,那么如何限制代码在行(6-13)中searchdate并在列C中查找对应的值,而不是search整个表?

Sub FindValue() Dim S as String Dim D as Date Dim V as Integer S = T455 D = Dec 13, 2010 for i = 1 to Range("A1").End(xldown).Row If Range("A" & i) = S And Range("B" & i) < Date - 7 And Range("B" & i) < Date + 7 Then ' This way i search a date range rather than a specific date V = Range("C" & i).Value End If End Sub 

我想到了While循环或Lookup函数,但是到了死胡同。

非VBA解决scheme,可能会更容易,更less的头痛。

列A由公式组成,对于A1 =“= B1&C1”

单元格G1公式可以在公式栏中看到。

在这里输入图像说明

更新这里是一个VBA解决scheme,将工作更快,但有一些笔记根据你写的,我不确定。 此外,请参阅一些评论,以帮助您的代码更符合您的需要。

 Sub FindValue() Dim S As String, D As Date, V As Integer, rngFound As Range, cel As Range S = "T455" 'needs quotes around the string D = "Dec 13, 2010" 'needs quotes around the date Dim wks As Worksheet Set wks = ActiveSheet With wks 'always better to AutoFilter than Loop when you can! .UsedRange.AutoFilter 1, S .UsedRange.AutoFilter 2, ">" & D - 7, xlAnd, "<" & D + 7 Set rngFound = Intersect(.UsedRange, .Columns(3)).SpecialCells(xlCellTypeVisible) 'the only thing here is if you have a date range _ 'you may return more than one result _ 'in that case, I don't know what you want to do with all the V's If Not rngFound Is Nothing Then For Each cel In rngFound V = cel.Value Next End If .AutoFilterMode = False End With End Sub 

如果你愿意接受一个非VBA解决scheme,那么你可以使用这个实现 ,它基本上使用这个公式:

 =IFERROR(INDEX(List, MATCH(0, COUNTIF(H1:$H$1, List)+ IF(Category2<>Criteria2, 1, 0)+IF(Category1<>Criteria1, 1, 0), 0)), "") 

有几个VBA的方法,这实际上取决于你是多么舒适的语言和多高效,你希望你的解决scheme。 closures我的头顶上:

1)用这两个标准过滤列表,然后返回相关的值在任何可见的行(如果有的话)

2)按照这两列对数据进行sorting(先串行然后date),然后执行search(你可能想调用像MATCH这样的内置函数)