excel 使用WorksheetFunction更改列号和行号

siotufzp  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(154)

我是相当新的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

omhiaaxx

omhiaaxx1#

为了在FormulaR1C1中应用变量,您必须以特定的方式编写它,例如:

R[" & x & "]C[" & y & "]

希望这能帮到你,
问候

piok6c0g

piok6c0g2#

我不太熟悉“relative refering”的语法,所以我没有让你的建议Lucas起作用,我想我犯了更多的错误...然而,我现在使用“absolute,cellwise”引用系统代替(我现在已经学习了它的语法):

Sub Get_position_of_first_non_NA_value()

Dim i As Variant

Dim strCellRange As String

numOfSeries=Range("J106")

For i = 1 To numOfSeries

strCellRange = Range(Cells(7, 26 + i), Cells(2407, 26 + i)).Address
Range("k" & (124 + i)).Formula2 = "=MATCH(TRUE,INDEX(" & strCellRange & ">0,),0)"

Next

End Sub

相关问题