Vba 基于变量和偏移函数将公式插入数组

Vba 基于变量和偏移函数将公式插入数组,vba,excel,Vba,Excel,我试图让我的代码根据数据集中有多少数据点将公式插入数组。下面的代码几乎可以工作,但在X的第一次迭代完成后,它不会将公式插入到列中的所有行中 Worksheets(" Branded").Range("C3").Formula = "=COUNTIFS(" & r.Address(ReferenceStyle:=xlR1C1) & ",RC2, " & r2.Address(ReferenceStyle:=xlR1C1) & ",R2C)" For Y = 1 T

我试图让我的代码根据数据集中有多少数据点将公式插入数组。下面的代码几乎可以工作,但在X的第一次迭代完成后,它不会将公式插入到列中的所有行中

Worksheets(" Branded").Range("C3").Formula = "=COUNTIFS(" & r.Address(ReferenceStyle:=xlR1C1) & ",RC2, " & r2.Address(ReferenceStyle:=xlR1C1) & ",R2C)"

For Y = 1 To Column_Limit1 - 1
    Range("C3").Offset(0, Y).Formula = "=COUNTIFS(" & r.Address(ReferenceStyle:=xlR1C1) & ",RC2, " & r2.Address(ReferenceStyle:=xlR1C1) & ",R2C)"
    For X = 1 To Row_Limit1 - 1
        Range("C3").Offset(X, 0).Formula = "=COUNTIFS(" & r.Address(ReferenceStyle:=xlR1C1) & ",RC2, " & r2.Address(ReferenceStyle:=xlR1C1) & ",R2C)"
    Next X
Next Y
更改为:

With Worksheets(" Branded")
    .Range(.Cells(3, 3), .Cells(Row_Limit1 + 2, Column_Limit1 + 2)).FormulaR1C1 = "=COUNTIFS(" & r.Address(ReferenceStyle:=xlR1C1) & ",RC2, " & r2.Address(ReferenceStyle:=xlR1C1) & ",R2C)"
    .Range(.Cells(Row_Limit1 + 3, 3), .Cells(Row_Limit1 + 3, Column_Limit1 + 2)).FormulaR1C1 = "=SUM(R3C:R[-1]C)"
End With
使用R1C1时,不需要循环。

更改为:

With Worksheets(" Branded")
    .Range(.Cells(3, 3), .Cells(Row_Limit1 + 2, Column_Limit1 + 2)).FormulaR1C1 = "=COUNTIFS(" & r.Address(ReferenceStyle:=xlR1C1) & ",RC2, " & r2.Address(ReferenceStyle:=xlR1C1) & ",R2C)"
    .Range(.Cells(Row_Limit1 + 3, 3), .Cells(Row_Limit1 + 3, Column_Limit1 + 2)).FormulaR1C1 = "=SUM(R3C:R[-1]C)"
End With

使用R1C1时不需要循环。

使用R1C1样式通常不需要循环。假设您希望在
A2
中使用公式
=A1+1
A3
=A1+1
中使用R1C1公式
=R[-1]C+1
,但该公式不变,因此您可以直接输入
[A2:A10]。公式R1C1=“=R[-1]C+1
。看看你的公式,它不会改变,你可以直接使用整个范围来输入它。(这也很快,每次循环都只覆盖第一行和第一列。大概是
Range(“C3”).Offset(X,0)。公式=
应该更像
Range(“C3”).Offset(X,Y).Formula=
。使用R1C1样式通常不需要循环。假设您希望在
A2
中使用公式
=A1+1
A3
=A1+1
中使用R1C1公式
=R[-1]C+1
,但该公式不会更改,因此您可以直接输入
[A2:A10]。FormulaR1C1=“=R[-1]C+1”
。查看没有更改的公式,您可以直接使用整个范围来输入它。(这也很快,每次循环都只覆盖第一行和第一列。大概是
range(“C3”).Offset(X,0)。公式=
应该更像
range(“C3”).Offset(X,Y).Formula=
。我刚试过,但是代码给了我一个语法错误。你知道是什么原因吗?我错过了一个结束语(
结尾。请参阅edit@Tonypt,它修复了语法错误。但它不会填充整个数组。数组应为5列14行。这将填充2列11行。啊!我假设您正在将列号传递给循环,您正在传递计数。请参阅edit@TonyP@TonyP我通常告诉警察继续问另一个问题,但请参见编辑。我刚试过,但代码给了我一个语法错误。您认为是什么原因造成的吗?我错过了一个接近的
,而
结束,请参见edit@tonypt修复了语法错误。但它并没有填充整个数组。数组应为5列14行。这将填充2列11行。啊!我假设您正在将列号传递给循环,您正在传递计数。参见编辑@TonyP@TonyP我通常会告诉对方再问一个问题,但请参见编辑。