Excel VBA公式中的可变项数?

Excel VBA公式中的可变项数?,vba,excel,Vba,Excel,是否可以在VBA for excel中编写公式,使公式中有“n”个术语,并且术语的数量随着“n”值的变化而变化 例如,假设您想对单元格a1进行编码,使其为a2和a3之和。然后,您希望b1是b2、b3、b4、b5等的总和,这样,一系列单元格的每列1行1单元格都是其下方“n”单元格的总和,其中“n”随列而异。假设您要使用的所有单元格地址都已知并存储在一个数组中 下面是一些代码,可以更好地解释我的问题: For i = 0 to n Range(arr1(i)).formula = "=" &a

是否可以在VBA for excel中编写公式,使公式中有“n”个术语,并且术语的数量随着“n”值的变化而变化

例如,假设您想对单元格a1进行编码,使其为a2和a3之和。然后,您希望b1是b2、b3、b4、b5等的总和,这样,一系列单元格的每列1行1单元格都是其下方“n”单元格的总和,其中“n”随列而异。假设您要使用的所有单元格地址都已知并存储在一个数组中

下面是一些代码,可以更好地解释我的问题:

For i = 0 to n
   Range(arr1(i)).formula = "=" & range(arr2(i)).value & "-(" _
   & Range(arrk(i)).value & "+" & Range(arrk+1(i)).value & "+" _
   & Range(arrk+2(i)).value & "+" & ... & ")"
Next i
所以我要找的是一段VBA代码,它可以使一个单元格公式包含动态数量的项。上面的代码将使单元格a1的值=a-(b+c+d+…),其中括号中的项数是可变的,这取决于公式应用于哪个单元格


这里的图片显示了我想做的一个例子。我想要一些代码,可以从“年收入”中减去可变金额的“费用”,其中费用的数量每年都会变化(但该年的数字保持不变)。代码需要使用公式,以便用户可以修改费用条目。

您尝试过数组公式吗?:

数组公式: Excel数组公式对一组或多组值(“数组参数”)执行多个计算,并返回一个或多个结果


详细信息:

谢谢大家的建议,今天我找到了一个解决难题的方法(虽然不是特别有效,但仍然是一个方法)

首先,我创建了一个数组,它使用垃圾单元格的“模式”来列出要包含的每个单元格地址

使用这个数组,我使用for循环使用
application.index
命令创建了一系列临时数组。对于每个临时数组,我使用
Join
命令将单元格列表转换为单个字符串,然后输入单元格公式。感谢@ThePiyus13,其array.formula方法激发了这一灵感

下面是一些示例代码来说明我所做的工作:

' hypothetical array containing two sets of cells to use
Dim array1(0 To 1, 0 To 1) As Variant
Dim vartemp As Variant
Dim vartemptransposed As Variant

' col 1 will be used to add I10 and I13, col2 I11 and I14
array1(0, 0) = "$I$10"
array1(1, 0) = "$I$13"
array1(0, 1) = "$I$11"
array1(1, 1) = "$I$14"

For i = 1 to 2

'application.index(arr,row#,col#) to create a new array 
vartemp = Application.Index(array1, 0, i)
'error if not transposed
vartemptransposed = Application.Transpose(vartemp)

randomstring = Join(vartemptransposed, ",")
totalvalue = 100

'example formula: a1 = totalvalue - sum(I10,I13). a2 = totalvalue - sum(I11,I14)
    Cells(1,i).formula = "=" & totalvalue & "-SUM(" & randomstring & ")"
Next i

我需要代码在动态生成的大型列表上多次运行此功能,但始终保持“垃圾单元格”所在位置的相同模式。没有包含在代码中,但我还使用了另一个数组作为公式放置位置的单元格地址。

Right。我想我应该让这个例子更复杂一些!如果中间有我想忽略的非空白单元格呢?我将更改图像以显示我的意思是,每列的“垃圾”始终在相同的行中?仍将是B12中的
=B2-SUM(B3:B4,B6,B8:B9,B11)
,并复制到右侧。。。根本不需要vba…
SUMIFS
也可能是一种可行的方法<代码>=SUMIFS(B3:B11,B3:B11,“垃圾”)。。。如果存在不同类型的“垃圾”ParamArray,请添加更多条件: