Excel VBA公式中可变数量的术语?

是否可以在Excel中用VBA编写一个公式,使得公式中有“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代码,可以使单元格公式包含dynamic数量的术语。 上面的代码将使单元格a1的值= a-(b + c + d + …)其中括号中的项数是可变的,具体取决于该公式应用于哪个单元格。

示例图像

这里的图像显示了我想要做的一个例子。 我想要一些代码,可以采取“年收入”,并从中减去可变数量的“费用”,其中费用数量每年都有所不同(但是这个数字在当年是固定的)。 代码需要使用公式,以便用户可以修改费用条目。

你有没有尝试过数组公式? :

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

详情: http : //www.excelfunctions.net/Excel-Array-Formulas.html

感谢大家的build议,我发现了一个解决scheme(不是一个特别高效的解决scheme,但仍然是一个解决scheme)到今天的难题。

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

以这个数组为例,我使用for循环来创build一系列具有application.index命令的临时数组。 对于每个临时数组,我使用Join命令将单元格列表转换为单个string,然后将其input到单元格公式中。 感谢@ thepiyush13的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 

我需要代码在dynamic生成的大型列表上运行这么多次,但始终保持与“垃圾单元”相同的模式。 不包含在代码中,但我也使用另一个数组作为放置公式的单元格地址。