Cómo utilizar Goal Seek en Visual Basic

Por suerte, el Goal Seek está completamente integrado en el VBA, por lo tanto escribir un macro para usarlo es fácil.
Por samuel porter

Paso 1

Abre el documento de Excel en el cual quieres ejecutar tu macro Goal Seek.


Paso 2

Busca dos celdas en las que quisieras utilizar Goal Seek. La primera deberá ser la celda en la que tengas un objetivo fijo. La segunda deberá ser en la que permitas que Excel cambie para cumplir el objetivo. El valor de la primera celda debe ser una fórmula basada en la segunda fórmula (de otro modo, no importan los cambios que haga Excel en la segunda celda, ya que no aparecerán en la primera).


Paso 3

Abre la ventana Macro. En Excel 2007 o posterior, lo logras haciendo clic sobre la lengüeta "Ver" de la lista y luego clic en "Macros". En versiones anteriores de Excel, haz clic en el menú "Herramientas", elige "Macros" y luego "Macros".


Paso 4

Escribe el nombre de tu macro Goal Seek en la ventana del Macro y luego haz clic en "Crear". Esto iniciará el programa Visual Basic para las aplicaciones del editor y te mostrará el texto del nuevo Macro, que aparecerá como una subrutina vacía como esta:

Sub MyMacroName() End Sub


Paso 5

Crean un rango de objeto representando la celda para la que tienes un objetivo conocido (la primera celda del Paso 2). Por ejemplo, si quieres un Goal Seek para la celda A1, escribe:

Dim goalCell As Range goalCell = ThisWorkbook.Worksheet(1).Range("A1")


Paso 6

Crea un rango de objeto que represente la celda que quieres que Excel cambie para hacer que la primera celda alcance el nuevo objetivo. Por ejemplo, si quieres que Excel manipule la celda A2, escribe:

Dim variableCell As Range variableCell = ThisWorkbook.Worksheet(1).Range("A2")


Paso 7

Busca el método GoalSeek en el rango de la celda objetivo. Como el primer argumento, ofrece el valor sobre el que quieres aplicar el Goal Seek; como argumento, ofrece el rango de la celda variable. Por ejemplo, si quieres aplicar el Goal Seek a 0, escribe:

goalCell.GoalSeek(0, variableCell)