【发布时间】:2018-10-03 10:02:09
【问题描述】:
我对 VBA 中的公式数组有疑问。我试图在一系列单元格上运行一个公式,而我从中选择数据的范围正在循环中变化。我收到“FormulaArray 不适用于 Range 类”的错误。我试图将公式分成几部分,但没有运气。我猜这与我如何引用 Cells 有关?当公式使用R1C1 样式时效果很好,但在我使用Cells 时效果不佳。请注意,代码是从另一个工作表而不是实际工作表ws2
Private Sub CommandButton4_Click()
Dim ws2 As Worksheet
Dim y_out As Range
Dim y_in As Range
Dim x_in As Range
Dim x_out As Range
Dim length As Long
Set ws2 = Sheets("Sheet2")
For i = 1 To datasets
length = ws2.Cells(ws2.Rows.Count, i + 4).End(xlUp).Row
Set y_out = ws2.Range(ws2.Cells(2, i * 4 + 2), ws2.Cells(length, i * 4 + 2))
Set y_in = ws2.Range(ws2.Cells(2, i * 4 + 4), ws2.Cells(length, i * 4 + 4))
Set x_in = ws2.Range(ws2.Cells(2, i * 4 + 3), ws2.Cells(length, i * 4 + 3))
Set x_out = ws2.Range(ws2.Cells(2, i * 4 + 1), ws2.Cells(length, i * 4 + 1))
y_out.FormulaArray = "=loess(x_in,y_in,x_out,50)"
FormulaArray = "=loess(RC[1]:R[490]C[1],RC[2]:R[490]C[2],RC[-1]:R[490]C[-1],50)"
Next i
End Sub
【问题讨论】:
-
你的
y_in和y_out重叠 - 这会导致循环引用。你有一个虚假的FormulaArray = _行,没有做任何应该被注释掉或删除的事情。FormulaArray属性只接受英文格式的函数(没有FormulaArrayLocal与FormulaLocal匹配),因此您应该使用逗号而不是分号来分隔您的参数,并使用英文名称而不是本地名称。 (什么是loess?) -
y_in和y_out没有问题。这些变量是正确的,并且指的是它们各自的列。我将 Excel 设置为瑞典语,但FormulaArray在使用R1C1表示法时仍然有效。但我需要能够更改y_out获取我的数据的列。我以前的代码有点误导,因为我的x和y变量没有随着循环而改变。loess是一个平滑y_in数据的函数。
标签: vba dynamic excel-formula