【发布时间】:2019-04-05 07:20:06
【问题描述】:
我正在尝试让 VBA 将公式写入不同的单元格,以找到由某些变量决定的 Range 的最大值。我的变量I 和J 是(数字/整数)。
这是我的代码。
Sub AddMAX()
Dim I As Integer
Dim J As Integer
Dim L As Integer
I = InputBox("Number of columns to check max value")
J = InputBox("Number of Rows to add formula inn and find max value of that row")
For L = 5 To 4 + J
Worksheets(1).Cells(L, 4 + I).Formula = "=" & Max(Range(Cells(L, 4), Cells(L, 3 + I)))
Next L
End Sub
曾多次尝试重写第二部分(等号后面的部分)。通常我会收到消息编译错误:未定义子或函数,它标记了“最大值”。我认为Max(也尝试使用大写字母)是一个内置函数,如 SUM 等。
我正在尝试让它在单元格中写入这样的 Excel 公式:
对于I=2 和J=3:
单元格 F5:=MAX(D5:E5)
单元格 F6:=MAX(D6:E6)
F7 单元格:=MAX(D7:E7)
即我想要一个单元格中的公式,就像我在单元格中手动编写的那样来计算最大值,这样如果单元格 D5、D7 和 E5 到 E7 中的值发生变化,则无需任何脚本即可找到新的最大值运行。
如果有什么不清楚的地方请告诉我。
【问题讨论】:
-
您不需要循环。您可以一次性输入整个范围内的公式。例如
.Range("F5:F" & 4 + J).Formula = "=Max(D5:E5)" -
感谢您的回答。但我认为我需要循环,因为单元格会根据您在“InputBox”中所做的输入而改变。即单元格公式的范围取决于您拥有的列数。所以公式可以是
"=Max(H5:M5)",也可以是"=Max(B5:X5)"等等。对于不同的设置必须是可以接受的,即要检查不同数量的列的 MAX 值。 -
所以你的公式会根据输入的不同而有所不同,但你仍然不需要循环并且仍然可以在一次操作中分配它。
-
我同意@GSerg。你仍然不需要循环:)
-
@Siddharth Rout 我当时不明白的是如何使公式动态化。 Range
Range("F5:F" & 4 + J).Formula应该是左右动态的,以及行数(您已经将其设为动态)。此外,每个单元格中的结果公式应对应于与"=Max(D5:E5)"相同的行。即"=Max(WX:WY)"必须引用同一行中的值范围。我可能没有看到你们看到的东西,但希望你们可以尝试向我解释更多:-) 到目前为止 VBA 初学者,但要学习更多。
标签: excel vba for-loop max formula