我是相当新的VBA编码,我正试图自动化我在我的电子表格中做的事情。我试图找到一个解决方案,但我想我必须知道更好的具体搜索条件,对不起,如果这已经问过之前...最接近我可以找到(这可能是有点帮助)是:Excel VBA Loop on columns
我想我的问题在技术上只是关于VBA语法/概念本身:我希望能够创建一个列表,通过一个for循环和一个公式,根据循环函数改变列输入。
我尝试的特定方法提取列中的“第一个not-NA()"索引位置(t,u,v...,即相对于第N列的C6,C7,C8,我希望在这里得到结果)。
想要的结果是,这段代码应该由for循环中的单个表达式运行:
Range("N109").Select
ActiveCell.Formula2R1C1 = "=MATCH(TRUE,INDEX(R[-103]C[6]:R[3769]C[6]<>0,),0)"
Range("N110").Select
ActiveCell.Formula2R1C1 = "=MATCH(TRUE,INDEX(R[-104]C[7]:R[3768]C[7]<>0,),0)"
Range("N111").Select
ActiveCell.Formula2R1C1 = "=MATCH(TRUE,INDEX(R[-105]C[8]:R[3767]C[8]<>0,),0)"
...
我的尝试是这样的:
For i = 1 To 40
Dim x, y, z As Variant '(or Integer, neither works)
x = -102 - i
y = 5 + i
z = 3770 - i
Range("N" & (108 + i)).Select
'A1 and A2 are two different attempts to make this work
A1: ActiveCell.Formula2R1C1 = "=MATCH(TRUE,INDEX(R[x]C[y]:R[z]C[y]<>0,),0)"
A2: ActiveCell.value = WorksheetFunction.Match(TRUE,INDEX(R[x]C[y]:R[z]C[y]<>0,),0)"
我尝试(在for循环之外),测试直接将其中一个范围写入函数,但是这会给出错误代码...,所以我猜这也不是一种方法...
A3: ActiveCell.Formula2R1C1 = "=MATCH(TRUE,INDEX(Range("T6:T3878"))<>0,),0)"
我很感激能得到的任何帮助。
问候哈尔瓦德
enter image description here
2条答案
按热度按时间omhiaaxx1#
为了在FormulaR1C1中应用变量,您必须以特定的方式编写它,例如:
希望这能帮到你,
问候
piok6c0g2#
我不太熟悉“relative refering”的语法,所以我没有让你的建议Lucas起作用,我想我犯了更多的错误...然而,我现在使用“absolute,cellwise”引用系统代替(我现在已经学习了它的语法):