向公式添加循环并仅显示公式计算的值
Adding loops to a formula and displaying only the values of the formula computation
我有两个问题希望得到很多帮助:
- 我已 VBA 链接到一个按钮,该按钮根据输入的参数计算某些单元格的值。然而,我仍然是一个基本用户,无法让它循环。 VBA 的目的是继续计算,直到给定单元格中的值为零。
是否可以让 VBA 只在单元格中计算输入值而不输入相应的公式?请参阅下面的代码片段:
子公式1()
' 公式 1
Range("H17").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=ROUNDDOWN((RC[-1]-RC[-2])/30,0)"
ActiveCell.Select
' Formular2 Macro
Range("I17").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-1]"
ActiveCell.Offset(1, 0).Range("A1").Select
' Formular 3
Range("J17").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=R4C9"
Range("J20").Select
End Sub
您可以将公式写入单元格并立即将公式还原为其返回值,也可以计算该值并直接将其写入单元格。
dim nr as long
'option 1
with activesheet
nr = .cells(rows.count, "H").end(xlup).offset(1, 0).row
.cells(nr, "H").formula = "=TRUNC((G" & nr & "-F" & nr & ")/30)"
.cells(nr, "I").formula = "=G" & nr & "/F" & nr
.cells(nr, "J").formula = "=I4"
with .cells(nr, "H").resize(1, 3)
.value = .value
end with
end with
'option 2
with activesheet
nr = .cells(rows.count, "H").end(xlup).offset(1, 0).row
.cells(nr, "H") = int((.cells(nr, "D").value - .cells(nr, "H").value) / 30)
.cells(nr, "I") = cdbl(.cells(nr, "G").value / .cells(nr, "F").value)
.cells(nr, "J") = .cells(4, "I").value
end with
这里有每种方法的示例。我确实通过使用 TRUNC function in place of the ROUNDDOWN function 稍微简化了您的第一个公式,但在这种情况下它们都执行相同的操作。
我有点担心您似乎将这些 formula/values 写入新行,但您引用了同一行中的其他单元格。我不得不假设这些其他单元格首先填充了公式或值。
不确定您要做什么。但是
显然我没有使用你的范围,因为你没有提供足够的信息来说明你想做什么。
如果你想遍历一系列单元格并将公式转换为值,就像这样。
for each rcell in worksheet("myworksheet").Range("A1:A15").Cells
if rcell.value = "0" then
exit sub
else
rcell.value = rcell.value
end if
next rcell
顺便说一下,一个朋友告诉我他用过这个网站。他说他们提供了一些关于基本 excel 公式的免费培训视频 vba 还没有,但他用它们为他创建了一个宏,这是一个非常合理的成本。
我有两个问题希望得到很多帮助:
- 我已 VBA 链接到一个按钮,该按钮根据输入的参数计算某些单元格的值。然而,我仍然是一个基本用户,无法让它循环。 VBA 的目的是继续计算,直到给定单元格中的值为零。
是否可以让 VBA 只在单元格中计算输入值而不输入相应的公式?请参阅下面的代码片段:
子公式1() ' 公式 1
Range("H17").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=ROUNDDOWN((RC[-1]-RC[-2])/30,0)" ActiveCell.Select ' Formular2 Macro Range("I17").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-1]" ActiveCell.Offset(1, 0).Range("A1").Select ' Formular 3 Range("J17").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=R4C9" Range("J20").Select End Sub
您可以将公式写入单元格并立即将公式还原为其返回值,也可以计算该值并直接将其写入单元格。
dim nr as long
'option 1
with activesheet
nr = .cells(rows.count, "H").end(xlup).offset(1, 0).row
.cells(nr, "H").formula = "=TRUNC((G" & nr & "-F" & nr & ")/30)"
.cells(nr, "I").formula = "=G" & nr & "/F" & nr
.cells(nr, "J").formula = "=I4"
with .cells(nr, "H").resize(1, 3)
.value = .value
end with
end with
'option 2
with activesheet
nr = .cells(rows.count, "H").end(xlup).offset(1, 0).row
.cells(nr, "H") = int((.cells(nr, "D").value - .cells(nr, "H").value) / 30)
.cells(nr, "I") = cdbl(.cells(nr, "G").value / .cells(nr, "F").value)
.cells(nr, "J") = .cells(4, "I").value
end with
这里有每种方法的示例。我确实通过使用 TRUNC function in place of the ROUNDDOWN function 稍微简化了您的第一个公式,但在这种情况下它们都执行相同的操作。
我有点担心您似乎将这些 formula/values 写入新行,但您引用了同一行中的其他单元格。我不得不假设这些其他单元格首先填充了公式或值。
不确定您要做什么。但是
显然我没有使用你的范围,因为你没有提供足够的信息来说明你想做什么。
如果你想遍历一系列单元格并将公式转换为值,就像这样。
for each rcell in worksheet("myworksheet").Range("A1:A15").Cells
if rcell.value = "0" then
exit sub
else
rcell.value = rcell.value
end if
next rcell
顺便说一下,一个朋友告诉我他用过这个网站。他说他们提供了一些关于基本 excel 公式的免费培训视频 vba 还没有,但他用它们为他创建了一个宏,这是一个非常合理的成本。