我有一个宏,我正在尝试创建将一堆旧值映射到新值。有一次,我需要在2列上进行匹配,并从第3列获取值。在普通的excel中我会运行下面的公式,但因为它是一个公式数组(必须按CTRL + SHIFT + ENTER运行)我不太确定如何在VBA中使用它
=INDEX($D:$D,MATCH(1,(E2=$A:$A)*(F2=$B:$B),0))
任何帮助表示赞赏
答案 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将公式写入工作表单元格并从单元格中检索答案。