在vba中查找的两个标准

我想查看表格Columns C的值(“MV_Backtest”)st cell_i匹配Columns A ,cell_j匹配Columns B ,这里是代码:

 Sub Matrix() lastRow = ThisWorkbook.Sheets("Sheet2").Cells(Rows.Count, 2).End(xlUp).Row lastColumn = ThisWorkbook.Sheets("Sheet2").Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To lastRow For j = 3 To lastColumn cell_i = ThisWorkbook.Sheets("Sheet2").Cells(i, 2) cell_j = ThisWorkbook.Sheets("Sheet2").Cells(1, j) Cells(i, j) = Application.WorksheetFunction.Lookup(1, 0 / (cell_i = ThisWorkbook.Sheets("MV_Backtest").Columns("A:A")) * (cell_j = ThisWorkbook.Sheets("MV_Backtest").Columns("B:B")), ThisWorkbook.Sheets("MV_Backtest").Columns("C:C")) Next j Next i End Sub 

请注意,一列中的每个值可能不是唯一的,但是将两个值组合在一起是唯一的。

在Excel中没关系,但是这里有什么问题吗?

顺便说一句,当两个条件都不匹配时Cells(i, j) = 0我怎么能设置Cells(i, j) = 0

这是Excel公式:

 =LOOKUP(1,0/(I28=I20:I22)*(J28=J20:J22),K20:K22) 

cell_iI28I20:I22Columns Acell_jJ28J20:J22Columns BK20:K22Columns C

 (cell_i = ThisWorkbook.Sheets("MV_Backtest").Columns("A:A")) * (cell_j = ThisWorkbook.Sheets("MV_Backtest").Columns("B:B")) 

虽然上面的代码看起来正确的Excel公式,它不是有效的VBA 。 在Excel中,它生成并倍增两个数组,但不能像VBA中那样生成一个数组(VBA不允许数组乘法,数组比较等)。

如果你有一个有效的Excel公式,你可以让Excel评估它,然后得到结果。 两种方式来做到这一点:

1-使用Application.Evaluate

 Cells(i, j).value = Application.Evaluate("=Lookup(1,0/((" & cell_i & _ "= MV_Backtest!A:A) * (" & cell_j &_ "=MV_Backtest!B:B)), MV_Backtest!C:C)") 

2-使用.Formula

 Cells(i, j).Formula = "=Lookup(1,0/((" & _ cell_i & "=MV_Backtest!A:A) * (" & _ cell_j & "=MV_Backtest!B:B)), MV_Backtest!C:C)" 

如果您想在此之后修复该值并删除该公式,则可以:

 Cells(i, j).Value = Cells(i, j).Value2 

编辑:

当不存在匹配时将单元格设置为零,通常的方法是用IFERROR(myformula, 0)将公式括IFERROR(myformula, 0) 。 因此,例如:

  Cells(i, j).value = Application.Evaluate("=IFERROR(Lookup(1,0/((" & cell_i & _ "= MV_Backtest!A:A) * (" & cell_j &_ "=MV_Backtest!B:B)), MV_Backtest!C:C)), 0") 

或者,您可以检查(在VBA中) 初始公式的结果值是否为错误代码。 即

 If IsError(Cells(i, j).Value) Then Cells(i, j).Value = 0