Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 与数组公式等价的代码_Arrays_Vba_Excel_Rows_Matching - Fatal编程技术网

Arrays 与数组公式等价的代码

Arrays 与数组公式等价的代码,arrays,vba,excel,rows,matching,Arrays,Vba,Excel,Rows,Matching,目前,我正在数据中使用数组公式查找一行,其中列O、Y和AA与当前行匹配,列a值不匹配,并为匹配行返回列C 这是我的公式: =INDEX(C:C,MATCH(1,(O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2),0)) =INDEX(C:C, MATCH(1, (O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2), 0)) =索引(C:C,匹配(1,(O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:

目前,我正在数据中使用数组公式查找一行,其中列O、Y和AA与当前行匹配,列a值不匹配,并为匹配行返回列C

这是我的公式:

=INDEX(C:C,MATCH(1,(O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2),0))
=INDEX(C:C, MATCH(1, (O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2), 0))
=索引(C:C,匹配(1,(O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:AA2),0))
使用命名范围,我可以使用VBA输入此公式,但我真正想做的是使用VBA执行类似的函数,并将结果值写入D列


我认为可能有一个循环,对于从2到最后一行的每一个I,在匹配的范围内找到另一行并将单元格(找到的行,3)的值写入单元格(I,4),但我不知道VBA数组查找匹配行的语法

虽然没有明确说明,但可以很容易地推断您正在寻求使用VBA来提高数组公式的计算/重新计算效率。您尚未提供数据的范围(即行数),但不太可能需要使用的完整列引用。以下计算周期时间基于约1000行静态数据


您的数组公式:

=INDEX(C:C,MATCH(1,(O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2),0))
=INDEX(C:C, MATCH(1, (O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2), 0))

命名范围将随可用数据量的增加而增加或缩小。

要将Excel工作表中的数组转换为VBA变量,只需使用以下内容分配它:aryArrayVariable()=Sheet1.Range(“A1:Z100”)。之后,您可以在数组中循环并执行任何您想要的操作,最后写回工作表。你可能想看看这个网站(以及以下五个部分),你可以在数组中使用查找函数,就像在工作表中使用它们一样。例如,WorksheetFunction.Match(ValueToLookFor,SomeArray,False),前提是SomeArray是二维的。
Worksheet.Evaluate()
使用数组公式,因此您应该能够按原样使用公式。在声明“并将结果值写入D列”时,您的意思是要将大量值返回到单个行中吗?如果是这样,将公式与
.formula.Array
一起放入,然后将结果还原为其基础值可能是最好的方法。除非您处理内存块中的单个行并将结果转储回工作表,否则在
应用程序中循环。评估将非常耗时。您正确推断我正在运行计算。更重要的是,我已经在使用vba输入这个公式,但是如果不使用数组公式,Excel在处理大型数据集时会非常慢。我已经在我的公式中使用了命名范围,它在中也被动态确定为包括所有非空白单元格,出于隐私原因,我不想将我的命名范围放在这里。最后,我像以前一样插入了公式,然后像这样对整个列进行估值:使用列(“D”).value=.value感谢您的帮助。
=INDEX(myColC, MATCH(1, (myColO=O2)*(myColY=Y2)*(myColAA=AA2)*(myColA<>A2), 0))