Como puedo automatizar esta macro

Quisiera saber si alguien pudiera orientarme en como hacer que la macro siguiente, se repita automáticamente.

Sub BuacarObjetivo()

Dim objetivon As Double

objetivo = InputBox("Importe:")
Range("H4").GoalSeek Goal:=objetivo, ChangingCell:=Range("B4")
objetivo = InputBox("Importe:")
Range("H5").GoalSeek Goal:=objetivo, ChangingCell:=Range("B5")
objetivo = InputBox("Importe:")
Range("H6").GoalSeek Goal:=objetivo, ChangingCell:=Range("B6")
objetivo = InputBox("Importe:")
Range("H7").GoalSeek Goal:=objetivo, ChangingCell:=Range("B7")
objetivo = InputBox("Importe:")
Range("H8").GoalSeek Goal:=objetivo, ChangingCell:=Range("B8")
objetivo = InputBox("Importe:")
Range("H9").GoalSeek Goal:=objetivo, ChangingCell:=Range("B9")
objetivo = InputBox("Importe:")
Range("H10").GoalSeek Goal:=objetivo, ChangingCell:=Range("B10")
objetivo = InputBox("Importe:")
Range("H11").GoalSeek Goal:=objetivo, ChangingCell:=Range("B11")
objetivo = InputBox("Importe:")
Range("H12").GoalSeek Goal:=objetivo, ChangingCell:=Range("B12")
objetivo = InputBox("Importe:")
Range("H13").GoalSeek Goal:=objetivo, ChangingCell:=Range("B13")
objetivo = InputBox("Importe:")
Range("H14").GoalSeek Goal:=objetivo, ChangingCell:=Range("B14")
objetivo = InputBox("Importe:")
Range("H15").GoalSeek Goal:=objetivo, ChangingCell:=Range("B15")
objetivo = InputBox("Importe:")

End Sub

Se trata de buscar el objetivo de la columna J, en base a modificar el importe de la columna B. La macro despliega un inbox que pide el importe objetivo.

Entonces necesito que haga dos cosas:
1.- Que por un lado se repita las veces necesarias de acuerdo al numero de filas, que puede variar mucho sin tener que escribir el código tantas veces como renglones habrá en el rango, y
2.- Que no necesite desplegar el inbox para teclear el importe objetivo, sino que busque en automático el importe de la columna J, y que realice la búsqueda de los valores de dicha columna hasta igualar los valores de la columna H con los valores objetivo de la columna J, con solo puchar el botón una vez.
Como no supe como decirle a la macro como ir pasando de renglón en renglón, copie el mismo código las veces necesarias para cubrir todo el rango, pero si se necesitaran muchas más filas, entonces seria un problema.

1 respuesta

Respuesta
1

Solo para estar seguros: Cuando aplicas "Budcar Objetivo" para B4 y H4, lo que llamas "importe" es equivalente a ¿J4? ¿Y así sucesivamente?

Abraham Valencia

Exactamente, ¡Gracias! 

Aja, entonces algo así te servirá:

Sub BuscarObjetivo()
Dim Objetivo As Double
Dim UltimaFila  As Long
Let UltimaFila = Cells(Rows.Count, 2).End(xlUp).Row
For x = 4 To c
    Let Objetivo = Range("J" & x).Value
    Range("H" & x).GoalSeek Goal:=Objetivo, ChangingCell:=Range("B" & x)
Next x
End Sub

No lo he probado, pero debería serte útil. Por si acaso estoy asumiendo, tal como tu ejemplo, que tus datos comienzan en la fila 4.

Abraham Valencia

Así es, en la fila 4.

Muchas gracias, ¿pero qué crees? No hace nada

Lastima que no se pueda adjuntar el archivo

Coloca tu archivo en algún "Drive", así puedo ayudarte usando tus propios datos.

Abraham Valencia

En algun Drive? Aqui en esta pagina? Como se hace eso?

No, me refiero a "Google Drive" o "OneDrive" o "Dropbox" o etc.

Abraham Valencia

Lo subí a Google drive.

El enlace, no lo olvides

Abraham Valencia

Espera, cambia esta línea:

For x = 4 To UltimaFila

Parece que al copiar/pegar la cambié de forma casual

Abraham Valencia

¡Gracias por la molestia de responder y ayudarme Ya funciono. Mil gracias

Pues de nada. Un abrazo.

Abraham Valencia

Perdón que te vuelva a molestar. La macro anterior era un ejemplo de la macro verdadera. Pensé que podía extrapolarla a la verdadera, pero no pude. Esta es la macro real, ya copie la macro que me hiciste favor de arreglar, quise cambiarle referecias, pero no funciona:

Los datos objetivo empiezan en la celda S84 y hacia abajo, para modificar los resultados de celda R84 y hacia abajo, pero moviendo las cifras de la celda C8 y hacia abajo

Sub CalculodeBrutos()

Dim objetivon As Double

objetivo = InputBox("Importe:")
Range("R84").GoalSeek Goal:=objetivo, ChangingCell:=Range("C8")
objetivo = InputBox("Importe:")
Range("R85").GoalSeek Goal:=objetivo, ChangingCell:=Range("C9")
objetivo = InputBox("Importe:")
Range("R86").GoalSeek Goal:=objetivo, ChangingCell:=Range("C10")
objetivo = InputBox("Importe:")
Range("R87").GoalSeek Goal:=objetivo, ChangingCell:=Range("C11")
objetivo = InputBox("Importe:")
Range("R88").GoalSeek Goal:=objetivo, ChangingCell:=Range("C12")
objetivo = InputBox("Importe:")
Range("R89").GoalSeek Goal:=objetivo, ChangingCell:=Range("C13")
objetivo = InputBox("Importe:")
Range("R90").GoalSeek Goal:=objetivo, ChangingCell:=Range("C14")
objetivo = InputBox("Importe:")
Range("R91").GoalSeek Goal:=objetivo, ChangingCell:=Range("C15")
objetivo = InputBox("Importe:")
Range("R92").GoalSeek Goal:=objetivo, ChangingCell:=Range("C16")
objetivo = InputBox("Importe:")
Range("R93").GoalSeek Goal:=objetivo, ChangingCell:=Range("C17")
objetivo = InputBox("Importe:")
Range("R94").GoalSeek Goal:=objetivo, ChangingCell:=Range("C18")
objetivo = InputBox("Importe:")
Range("R95").GoalSeek Goal:=objetivo, ChangingCell:=Range("C19")
objetivo = InputBox("Importe:")
Range("R96").GoalSeek Goal:=objetivo, ChangingCell:=Range("C20")
objetivo = InputBox("Importe:")
Range("R97").GoalSeek Goal:=objetivo, ChangingCell:=Range("C21")
objetivo = InputBox("Importe:")
Range("R98").GoalSeek Goal:=objetivo, ChangingCell:=Range("C22")
objetivo = InputBox("Importe:")
Range("R99").GoalSeek Goal:=objetivo, ChangingCell:=Range("C23")
objetivo = InputBox("Importe:")
Range("R100").GoalSeek Goal:=objetivo, ChangingCell:=Range("C24")
objetivo = InputBox("Importe:")
Range("R101").GoalSeek Goal:=objetivo, ChangingCell:=Range("C25")
objetivo = InputBox("Importe:")
Range("R102").GoalSeek Goal:=objetivo, ChangingCell:=Range("C26")
objetivo = InputBox("Importe:")
Range("R103").GoalSeek Goal:=objetivo, ChangingCell:=Range("C27")
objetivo = InputBox("Importe:")
Range("R104").GoalSeek Goal:=objetivo, ChangingCell:=Range("C28")
objetivo = InputBox("Importe:")
Range("R105").GoalSeek Goal:=objetivo, ChangingCell:=Range("C29")
objetivo = InputBox("Importe:")
Range("R106").GoalSeek Goal:=objetivo, ChangingCell:=Range("C30")
objetivo = InputBox("Importe:")
Range("R107").GoalSeek Goal:=objetivo, ChangingCell:=Range("C31")
objetivo = InputBox("Importe:")
Range("R108").GoalSeek Goal:=objetivo, ChangingCell:=Range("C32")
objetivo = InputBox("Importe:")
Range("R109").GoalSeek Goal:=objetivo, ChangingCell:=Range("C33")
objetivo = InputBox("Importe:")
Range("R110").GoalSeek Goal:=objetivo, ChangingCell:=Range("C34")
objetivo = InputBox("Importe:")
Range("R111").GoalSeek Goal:=objetivo, ChangingCell:=Range("C35")
objetivo = InputBox("Importe:")
Range("R112").GoalSeek Goal:=objetivo, ChangingCell:=Range("C36")
objetivo = InputBox("Importe:")
Range("R113").GoalSeek Goal:=objetivo, ChangingCell:=Range("C37")
objetivo = InputBox("Importe:")
Range("R114").GoalSeek Goal:=objetivo, ChangingCell:=Range("C38")
objetivo = InputBox("Importe:")
Range("R115").GoalSeek Goal:=objetivo, ChangingCell:=Range("C39")
objetivo = InputBox("Importe:")
Range("R116").GoalSeek Goal:=objetivo, ChangingCell:=Range("C40")
objetivo = InputBox("Importe:")
Range("R117").GoalSeek Goal:=objetivo, ChangingCell:=Range("C41")
objetivo = InputBox("Importe:")
Range("R118").GoalSeek Goal:=objetivo, ChangingCell:=Range("C42")
objetivo = InputBox("Importe:")

End Sub

Sub BuscarObjetivo()
Dim Objetivo As Double
Dim UltimaFila  As Long
Dim x As Long
Let UltimaFila = Cells(Rows.Count, 3).End(xlUp).Row
For x = 8 To UltimaFila
    Let Objetivo = Range("S" & x + 76).Value
    Range("R" & x + 76).GoalSeek Goal:=Objetivo, ChangingCell:=Range("C" & x)
Next x
End Sub

Salu2

Abraham Valencia

OJO, estoy asumiendo que en la columna "C" hay la misma cantidad de datos que en "R" y "S" a pesar de que, al menos aparentemente, en "C" comienzan en la fila 8 (y en las otras en la 84)

Abraham Valencia

Así es, los datos objetivo empiezan en la celda S84, pero los datos fuente digamos que empiezan en la celda S84, dependen de los datos fuente que empiezan en la celda C8, y son el mismo numero de renglones.

Gracias, voy a probarla

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas