索引在VBA中匹配2条件

时间:2016-03-15 06:51:25

标签: excel vba excel-vba

我有一个宏,我正在尝试创建将一堆旧值映射到新值。有一次,我需要在2列上进行匹配,并从第3列获取值。在普通的excel中我会运行下面的公式,但因为它是一个公式数组(必须按CTRL + SHIFT + ENTER运行)我不太确定如何在VBA中使用它

=INDEX($D:$D,MATCH(1,(E2=$A:$A)*(F2=$B:$B),0))

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

你尝试过吗?

Cell.FormulaArray() 

它应该使用正常的表示法,尽管它适用于R1C1

答案 1 :(得分:0)

基本上有三种方法可以将数组公式计算为VBA中的结果。

第一个是'方括号'评价。这就像处理工作表一样处理公式。

var message = fn.concat('to=',msg_to,'&toname=',msg_toname,'&subject=Your activation&text=',msg_text,'&from=activation@xxxxx.com');

xdmp.httpPost("https://api.sendgrid.com/api/mail.send.json",
     {
       "data" : message,
       "headers" : {
         "Authorization" : "Bearer xxxxxxxxxxxxxxx",
         "content-type" : "application/x-www-form-urlencoded"
       }
     })

必须注意明确显示工作表的父母。在上面,已经为完整列提供了父工作表,但单个单元格没有。单个单元格将默认为ActiveSheet property,它可能甚至可能不在同一工作簿中。明确定义所有单元格引用!

第二种方法是Application.Evaluate method。这允许使用字符串构造的公式更自由。

Dim result As Variant
result = [INDEX('Sheet1'!D:D,MATCH(1,(E2='Sheet1'!A:A)*(F2='Sheet1'!B:B),0))]
Debug.Print result

同样,只有完整的列引用已被赋予父工作表引用。这应该在运行时使用之前修复。此方法更适用于数组公式,因为您可以使用字符串构造将完整列引用剪切到Worksheet.UsedRange property中的行。

如上所述,第三种方法涉及使用Range.FormulaArray property将公式写入工作表单元格并从单元格中检索答案。