将Excel公式转换为VBA

将Excel公式转换为VBA,vba,excel,Vba,Excel,我有一个公式,它可以查看多列中的各种条件,并检查是否所有条件都匹配,它会将数据从一列粘贴到另一列。我尝试了几种方法将其导入VBA,但似乎什么都不起作用。谢谢 =INDEX($D$2:$D$1112,MATCH(1,($A$2:$A$1112=$U$7)*($C$2:$C$1112=$W$7)*($B$2:$B$1112=F3),0)) 您需要进行两项更改: 1若要在VBA中使用在本机Excel中可用的函数,您需要在每个函数前面加上Application.WorksheetFunction。即:

我有一个公式,它可以查看多列中的各种条件,并检查是否所有条件都匹配,它会将数据从一列粘贴到另一列。我尝试了几种方法将其导入VBA,但似乎什么都不起作用。谢谢

=INDEX($D$2:$D$1112,MATCH(1,($A$2:$A$1112=$U$7)*($C$2:$C$1112=$W$7)*($B$2:$B$1112=F3),0))
您需要进行两项更改:

1若要在VBA中使用在本机Excel中可用的函数,您需要在每个函数前面加上Application.WorksheetFunction。即:

x = Application.WorksheetFunction.Sum(y,z)
2在VBA中,要引用图纸中的单元格,您需要通过以下几种方式之一专门访问它。对于我们来说,最简单的是RANGE属性,如下所示:

x = Application.WorksheetFunction.Sum(Range("A1:A2"))
把这两个变化放在一起,你的公式如下:

=Application.WorksheetFunction.INDEX(Range("$D$2:$D$1112",Application.WorksheetFunction.MATCH(1,(RANGE("$A$2:$A$1112"=RANGE("$U$7")*(Range("$C$2:$C$1112"=Range("$W$7")*(Range("$B$2:$B$1112"=Range("F3"),0))

尽管我现在已经了解了这一点,您似乎正在使用数组公式-不确定是否需要任何特殊的跳汰才能使其工作。

您将无法使用该数组公式直接向单元格返回值。VBA不会像工作表那样处理数组公式。最好的方法是使用工作表的处理或其中一种方法

你没有工作表可供参考,这使我很烦恼。当公式位于工作表单元格中时,它知道它在哪个工作表上。在VBA中使用公式时,父工作表是“最佳猜测”,没有明确的工作表引用

下面有三种方法可以将该数组公式的结果放入活动工作表的Z2:Z4中。请记住,应修改这些单元格引用以包括工作表名称

With ActiveSheet
    'this simply puts the formula into the worksheet then reverts the cell from the formula to the returned formula value
    .Range("Z2").FormulaArray = "=INDEX($D$2:$D$1112, MATCH(1, ($A$2:$A$1112=$U$7)*($C$2:$C$1112=$W$7)*($B$2:$B$1112=F3), 0))"
    .Range("Z2") = .Range("Z2").Value

    'this uses the 'square bracket' method of evaluating a formula on-the-fly
    'the formula being evaluated can be array or non-array
    'this method is does not like building a formula string from pieces of text
    .Range("Z3") = [INDEX($D$2:$D$1112, MATCH(1, ($A$2:$A$1112=$U$7)*($C$2:$C$1112=$W$7)*($B$2:$B$1112=F3), 0))]

    'similar to the method directly above, Application.Evaluate does just that.
    'the formula being evaluated can be array or non-array
    'this method is easier to build a formula string from pieces of text
    .Range("Z4") = Application.Evaluate("INDEX($D$2:$D$1112, MATCH(1, ($A$2:$A$1112=$U$7)*($C$2:$C$1112=$W$7)*($B$2:$B$1112=F3), 0))")
End With

你尝试了什么,发生了什么?非常感谢,这确实让事情进展得很顺利,但是有没有办法循环一个空列并将公式插入到该空列的每个单元格中?无需循环。可以将其放入每个空白单元格中,但您不想将其过度扩展。没有足够的信息工作表名称、数据范围等来提供示例。这里有一个指向新问题的链接:这包含了所有代码,因此您可以更好地了解我在做什么。非常感谢你的帮助!现在你似乎已经放弃了这个问题,继续前进,也许你应该花点时间回顾一下