我正在制作一份用于投资的 Excel 表。
我有以下列:
- 显示年份(1、2、3、4、5 等)
- B 显示年度成本
- C 表示年收入
- D 表示全年总成本/收入(B 减去 C)
- E 表示总体收入/损失
现在...
我希望单击按钮时自动进行目标搜索。我希望它目标搜索最后一个包含数字的单元格。这意味着,如果我有 10 年的投资,它应该是 E10。如果是 5 年,应该是 E5 等等。
我似乎找不到任何关于这个主题的内容。我希望它目标查找最后一个单元格,其中的数字为 0。
我如何在 VBA 例程中执行此操作?
顺便说一句,我有一个单元格,它显示最后一个单元格的名称,并带有数字。如果是 E3,它会显示“E3”。
答案1
类似这样的事情应该做:
Sub GoalSeek()
Const csOverallSt As String = "E1"
Const csChangeCol As String = "C"
Const ciGoal As Integer = 0
Dim rngCheck As Range
Set rngCheck = Range(csOverallSt)
Do While rngCheck.Offset(1, 0).Value <> ""
Set rngCheck = rngCheck.Offset(1)
Loop
rngCheck.GoalSeek goal:=ciGoal, changingcell:=Range(csChangeCol & rngCheck.Row)
End Sub
常数csOverallSt
定义了要检查的第一个空白单元格 - 这样您就不需要额外的单元格来定义第一个空白单元格。常数csChangeCol
定义了哪一列包含您希望目标搜索过程更改的值。常数ciGoal
定义了目标搜索应该寻找什么值。变量rngCheck
定义了单元格范围,或者,正如我们在这里使用的,单个单元格。
该过程首先分配以rngCheck
匹配您在 中定义的任何单元格csOverallSt
。然后检查下面的单元格是否rngCheck
为空白;如果不是,则rngCheck
向下移动一行,然后再次检查。它将继续执行此操作,直到找到空白单元格。
当它找到空白单元格时,它将执行目标搜索,尝试通过更改 中定义的列和 中的同一行中的值将 中的值设置rngCheck
为您在 中定义的值。ciGoal
csChangeCol
rngCheck