Excel 将嵌套索引匹配函数转换为VBA
我使用这个公式来匹配两个日期,在sheet3和sheet2之间,然后在日期匹配时打印相应的值。数百万行来运行它,这个公式使得文件太大,无法计算。Excel 将嵌套索引匹配函数转换为VBA,excel,excel-formula,excel-2013,vba,Excel,Excel Formula,Excel 2013,Vba,我使用这个公式来匹配两个日期,在sheet3和sheet2之间,然后在日期匹配时打印相应的值。数百万行来运行它,这个公式使得文件太大,无法计算。 =IF(ISNA(INDEX(Sheet3!$A$1:$G$60,MATCH(A2,Sheet3!$A$1:$A$60,0),6)),“”,INDEX(Sheet3!$A$60,MATCH(A2,Sheet3!$A$1:$A$60,0),6))在这个公式中使用完全相同的INDEX/MATCH函数两次,而当找不到匹配项时,可以使用函数IFERROR返回空
=IF(ISNA(INDEX(Sheet3!$A$1:$G$60,MATCH(A2,Sheet3!$A$1:$A$60,0),6)),“”,INDEX(Sheet3!$A$60,MATCH(A2,Sheet3!$A$1:$A$60,0),6))
在这个公式中使用完全相同的INDEX/MATCH函数两次,而当找不到匹配项时,可以使用函数IFERROR返回空字符串。请参见下面的代码示例:
=IFERROR(INDEX(Sheet3!$A$1:$G$60,MATCH(A2,Sheet3!$A$1:$A$60,0),6)),"")
=IFERROR(INDEX(Sheet3!$A$1:$G$60,MATCH(A2,Sheet3!$A$1:$A$60,1),6)),"")
为了进一步优化公式,您可以指定match函数的第三个参数(match_type),使公式在列Sheet3上执行二叉树搜索!A,即使在很大的范围内,这样计算速度也会快得多。但要使这项工作,首先需要对列Sheet3进行排序!A按升序排列。请参见下面的代码示例:
=IFERROR(INDEX(Sheet3!$A$1:$G$60,MATCH(A2,Sheet3!$A$1:$A$60,0),6)),"")
=IFERROR(INDEX(Sheet3!$A$1:$G$60,MATCH(A2,Sheet3!$A$1:$A$60,1),6)),"")
你的问题是?这个公式在vba代码中是什么?这是我在vba中的问题。使用Range对象的
.formula
或.FormulaR1C1
属性也是一样的。但是,如果您想使用VBA来加速该过程,一种方法是使用数组。因此,我们的想法是将您处理的数据传递给它,并使用数组进行匹配,然后将值返回到范围。在那条路线上有许多邮局。您还可以使用字典
对象。