【发布时间】:2019-08-15 11:30:14
【问题描述】:
我正在尝试索引和匹配 2 个单独列中的值。如果它是一个 Excel 公式,它看起来像......
=INDEX('Critical Times'!D:D,MATCH(CONCATENATE(B7,C7),'Critical Times'!G:G,0))
不过,我正在努力在 VBA 中执行此操作。我已经尝试了下面的代码,但它不起作用。这里发生的情况是,它沿着一列中的每一行写入一个开始日期和结束日期的值,直到它到达一个空白行。
我尝试了一个稍微不同的版本,它只将单元格 C7 与另一列匹配,并且工作正常。只有当我想加入 B7 和 C7 中的值时,它才会停止工作。代码有点乱,请见谅,还在学习中!
Dim r As Range
Worksheets("Overview").Activate
Set r = Range("B7") & Range("c7")
Do While r.Value <> ""
Dim datestr As Long
Dim dateend As Long
datestr = WorksheetFunction.Index(Worksheets("Critical Times").Range("D:D"), WorksheetFunction.Match(r.Value, Worksheets("Critical Times").Range("G:G"), 0), 0)
dateend = WorksheetFunction.Index(Worksheets("Critical Times").Range("E:E"), WorksheetFunction.Match(r.Value, Worksheets("Critical Times").Range("G:G"), 0), 0)
Dim MatchFormula As Long
Dim ColumnMatch As Long
Dim MatchFormula2 As Long
Dim ColumnMatch2 As Long
If datestr <> 0 Then
MatchFormula = WorksheetFunction.Match(r.Value, Range("C:C"), 0)
ColumnMatch = WorksheetFunction.Match(datestr, Range("4:4"), 0)
Range(Col_Letter(ColumnMatch) & MatchFormula).Value = "A"
MatchFormula2 = WorksheetFunction.Match(r.Value, Range("C:C"), 0)
ColumnMatch2 = WorksheetFunction.Match(dateend, Range("4:4"), 0)
Range(Col_Letter(ColumnMatch2) & MatchFormula2).Value = "A"
End If
Set r = r.Offset(1)
Loop
【问题讨论】:
-
一种选择是使用
.Find在G列中设置一个单元格,然后使用.Offset来获取D列值。此外,为了将来参考,在MATCH中连接多个值并不是最好的方法。想象一下像11和11连接的值.... -
我同意连接点,我通常不会在 Excel 的论坛中这样做,但会索引并匹配多个标准。老实说,我觉得 vba 超出了我的能力范围,所以认为将这些价值观结合在一起更容易。
-
因此,如果连接在工作表公式中是不好的做法,那么在 VBA 中也是不好的做法。那么您是否宁愿遍历一个范围并检查多个值?你会喜欢一个简化的例子吗?
-
拜托,我将不胜感激
-
=INDEX('Critical Times'!D:D,MATCH(1,INDEX(('Critical Times'!A:A=B7)*('Critical Times'!B:B=C7 ),0,1),0)) 如果它是一个正常的 Excel 公式,我会这样做。