Vba Excel-COUNTA()的备选方案?

Vba Excel-COUNTA()的备选方案?,vba,excel,Vba,Excel,我正在创建一个程序,用于计算从.csv文件导入的多组数据的斜率和截距。这些数据集的范围是动态的。它们可以根据数据本身进行更改 考虑到动态范围,为了计算每一组的斜率和截距,我使用 =INDEX(LINEST(INDIRECT("B3:B"&COUNTA(B:B)+1),INDIRECT("A3:A"&COUNTA(A:A))),1) =INDEX(LINEST(INDIRECT("B3:B"&COUNTA(B:B)+1),INDIRECT("A3:A"&COUNTA

我正在创建一个程序,用于计算从.csv文件导入的多组数据的斜率和截距。这些数据集的范围是动态的。它们可以根据数据本身进行更改

考虑到动态范围,为了计算每一组的斜率和截距,我使用

=INDEX(LINEST(INDIRECT("B3:B"&COUNTA(B:B)+1),INDIRECT("A3:A"&COUNTA(A:A))),1)
=INDEX(LINEST(INDIRECT("B3:B"&COUNTA(B:B)+1),INDIRECT("A3:A"&COUNTA(A:A))),2)
但是,由于我有12组大约1000个点的数据,因此该程序需要花费太多的时间(超过2分钟)来执行计算

我注意到,如果我只是使用下面的操作,而不考虑动态范围(由
COUNTA()
定义),那么计算大约在5秒内完成

=INDEX(LINEST(B3:B998,A3:A998),1)
=INDEX(LINEST(B3:B998,A3:A998),1)
在宏中,我尝试执行以下操作:

Range("C3").Select
    ActiveCell.FormulaR1C1 = _
        "=INDEX(LINEST(R[0]C[-1]:R[p-o]C[-1],R[0]C[-2]:R[p-o]C[-2]),1)"
其中p和o等于我的动态范围的结束和开始,由以下公式给出:

Sheets("Ranges").Activate
    o = Cells(4, 3).Value
    p = Cells(4, 4).Value
但它不起作用。我想我真的不明白R1C1是怎么工作的


你能帮我想出一个解决方案吗?

我想我明白了-你正在使用
o
p
来帮助设置R1C1中的
R[]
值?您需要关闭公式,放入这些值,然后重新打开它
ActiveCell.FormulaR1C1=“=INDEX(LINEST(R[0]C[-1]:R[”&p-o&“]C[-1]、R[0]C[-2]:R[”&p-o&“]C[-2]),1)”
应该做一些你真正需要在宏中使用Select和Activate的事情。不要使用易变的间接索引,而尝试使用INDEX:
=INDEX(LINEST(B3:INDEX(B,COUNTA(B:b1),A3:INDEX(A,COUNTA(A:A)),1)