我在工作表中有一堆行和25列,需要使用VBA基于列B和C找到第4列中的值。我正在使用索引和多个条件匹配函数的组合。
我试图通过https://www.mrexcel.com/forum/showthread.php?650832-VBA-Multiple-Criteria-Index-Match和pass an integer variable into vba array formula跟进无效。
我制作了这个有效的宏:
Sub VariablesInArrayFormula()
SA = "Apples"
C1 = "Oranges"
Range("D27").Select
Selection.FormulaArray = "=index(A2:G27,match(1,(B2:B27=b4)*(C2:C27= c6),0),4)"
Range("E27").Select
Selection.FormulaArray = "=index(A2:G27,match(1,(B2:B27=""Apples"")*(C2:C27= ""Oranges""),0),4)"
f = Evaluate("index(A2:G27,match(1,(B2:B27=""Apples"")*(C2:C27= ""Oranges""),0),4)")
Range("G27").Select
Selection.FormulaArray = "=index(A2:G27,match(1,(B2:B27="" & SA & "")*(C2:C27= "" C1 ""),0),4)"
End Sub
我想将值分配给变量以供将来使用。
当我将它分配给D27时,它起作用,因为我引用了单元格引用b4和c6。
将它分配给单元格E27也可以,但是我需要直接引用苹果和橘子,我希望传递变量
将其分配给变量f时,我传入单词Apples和Oranges
当我尝试传递对Apples和Oranges(分别为SA和C1)的引用时,我收到#N/A
错误。
任何人都可以提出一种方法,我可以将变量传递给此函数。
注意我尝试使用worksheetfunction.index和worksheetfunction.match并继续收到错误。具体来说,我试过了:
gr4 = WorksheetFunction.Index(Range("A2:G27"), WorksheetFunction.Match(1, ((Range("B2:B27") = SA) * (Range("C2:C27") = C1)), 0), 4)
返回了运行时错误#13:类型不匹配。
奇怪的是,使用2个匹配失败,就像我使用单个列检查匹配函数一样
Sub vfhj()
SA = "Apples"
C1 = "Oranges"
gr3 = WorksheetFunction.Index(Range("C2:C27"), WorksheetFunction.Match(C1, Range("C2:C27"), 0))
End Sub
答案 0 :(得分:1)
如果我理解正确,我认为你的语法略有偏差 - 你省略了一些&符号,忽略了关于加倍引号的规则。也无需选择。
Range("G27").FormulaArray = "=index(A2:G27,match(1,(B2:B27=""" & SA & """)*(C2:C27=""" & C1 & """),0),4)"
答案 1 :(得分:0)
使用内存数组可能会更快一点:
Sub VariablesInArrayFormula()
Dim SA As String
SA = "Apples"
Dim C1 As String
C1 = "Oranges"
With Worksheets("Sheet1") 'Change to your worksheet
Dim DtaArray As Variant
DtaArray = .Range("B2:D27").Value
Dim i As Long
For i = LBound(DtaArray, 1) To UBound(DtaArray, 1)
Dim ans
If DtaArray(i, 1) = SA And dtaaray(i, 2) = C1 Then
ans = DtaArray(i, 3)
Exit For
End If
Next i
.Range("G1").Value = ans
End With
End Sub