Algo como isso deve ser feito:
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
A constante csOverallSt
define a primeira célula que você deseja verificar por um espaço em branco - assim você não precisa definir a célula extra que é a primeira célula em branco. A constante csChangeCol
define qual coluna contém o valor que você deseja que o processo de busca da meta mude. A constante ciGoal
define o valor que a Meta de meta deve procurar. A variável rngCheck
define um intervalo de células ou, como estamos usando aqui, uma única célula.
O procedimento começa atribuindo rngCheck
para corresponder à célula que você definiu em csOverallSt
. Em seguida, ele verifica se a célula abaixo de rngCheck
está em branco; se não for, move rngCheck
por uma linha e verifica novamente. Ele continuará fazendo isso até encontrar uma célula em branco.
Quando encontrar a célula em branco, ela realizará uma busca de meta, tentando definir o valor em rngCheck
para o valor definido em ciGoal
alterando o valor na coluna definida em csChangeCol
e o mesmo linha como rngCheck
.