是否有可能在VBA中为excel编写一个公式,使公式中有"n“项,并且随着"n”值的变化而改变术语的数目?
例如,假设您希望对单元格a1进行编码,使其成为a2和a3之和。然后,您希望b1是b2、b3、b4、b5等的总和,这样,每个单元格范围内的每列1行1单元格都是"n“单元格以下的"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+.)如果括号中的术语数是可变的,则取决于应用公式的单元格。
这里的图片展示了一个我想做的事情的例子。我想要一些代码,可以使用“年收入”,并从其中减去可变的“费用”,每年的费用数量都会变化(但是该年的费用数量是固定的)。代码需要使用公式,以便用户可以修改费用条目。
发布于 2015-12-02 08:03:19
谢谢大家的建议,今天我找到了一个解决难题的方法(不是一个特别有效的解决方案,但仍然是一个解决方案)。
首先,我创建了一个数组,它使用垃圾单元的“模式”来列出要包含的每个单元地址。
对于这个数组,我使用一个for循环来使用application.index
命令创建一系列临时数组。对于每个临时数组,我使用Join
命令将单元格列表转换为一个字符串,然后输入到一个单元格公式中。感谢@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
我需要代码在大列表上运行这么多次,这些列表是动态生成的,但始终保持着“垃圾单元”所在位置的相同模式。没有包含在代码中,但我还使用了另一个数组作为放置公式的单元格地址。
发布于 2015-12-01 13:22:42
你试过数组公式吗?:
数组公式:对一个或多个值集(“数组参数”)执行多个计算,并返回一个或多个结果。
详细信息:http://www.excelfunctions.net/Excel-Array-Formulas.html
https://stackoverflow.com/questions/34027729
复制相似问题