es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bucle de macro de Excel Solver por fila.

Soy consciente de que esta es una pregunta muy común, pero aún no entiendo qué hacer después de pasar horas en ejemplos.

Tengo alrededor de 3600 filas de datos termodinámicos para dos columnas (T y V). Estoy tratando de hacer un bucle en Solver para igualar a cero T7:T3624 cambiando V7:V3624. Cada T solo depende de su respectivo V.

Sub CHE561Project2()
CHE561Project2 Macro

SolverReset

Dim count As Integer
Set count = 1
Do While count <= 3617
SolverOk SetCell:=Sheets(“Mixing”).Cells(“$T$”, count), MaxMinVal:=3, ValueOf:=0, ByChange:=Sheets(“Mixing”).Cells(“$V$”, count).Value, EngineDesc:=”GRG Nonlinear”
SolverSolve userfinish:=True
Sheets(“Mixing”).Cells(count, ).Value = Sheets(“Mixing”).Cells(count, ).Value
count = count + 1
Loop
End Sub

No estoy muy seguro de lo que estoy haciendo, para ser honesto. ¡Agradecería cualquier ayuda!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Primero, vamos a desglosar el código proporcionado. El código parece ser una macro VBA para Microsoft Excel. La macro se llama “CHE561Project2” y comienza con la línea “SolverReset”, que restablece Solver a su configuración predeterminada.

    Luego, la macro declara una variable llamada “count” como un entero y la establece en 1.

    El siguiente código es un bucle Do While que se repetirá hasta que count sea mayor o igual a 3617 (lo cual parece ser un error tipográfico y debería ser 3624, ya que hay 3600 filas de datos).

    Dentro del bucle, se llama a la función SolverOk con varios parámetros. Esta función configura el complemento Solver para resolver un problema de optimización.

    El parámetro SetCell especifica la celda que se establecerá en cero. Esta celda se define como la celda T en la fila actual para la iteración del bucle.

    El parámetro MaxMinVal especifica si se debe maximizar o minimizar el valor de SetCell. En este caso, se establece en 3, lo que significa establecer el valor de SetCell en un valor específico (en este caso, 0).

    El parámetro ValueOf especifica el valor que se debe establecer en SetCell. En este caso, se establece en 0.

    El parámetro ByChange especifica la celda o celdas que se pueden cambiar para alcanzar el valor deseado de SetCell. En este caso, se establece en la celda V en la fila actual para la iteración del bucle.

    El parámetro EngineDesc especifica el tipo de Solver a utilizar. En este caso, se establece en “GRG Nonlinear”.

    Luego, se llama a la función SolverSolve para resolver el problema de optimización basado en la configuración proporcionada por SolverOk. El parámetro userfinish se establece en True, lo que significa que Solver se detendrá cuando se encuentre una solución o el usuario interrumpa el proceso de resolución.

    Finalmente, el código establece el valor de la fila actual (en las celdas T y V) en su valor actual. Luego, la variable count se incrementa en 1 y el bucle se repite hasta que count sea mayor o igual a 3624 (la última fila del conjunto de datos).

    Según este código, parece que la intención es utilizar Solver para encontrar valores de V que hagan que T sea cero para cada par de celdas (T y V) en el conjunto de datos. Sin embargo, hay algunos problemas con el código.

    Primero, la línea “Set count = 1” debería cambiarse a “count = 7”. Esto se debe a que los datos comienzan en la fila 7 y el bucle debe comenzar allí para recorrer las 3600 filas de datos.

    Segundo, hay un error en la línea “Sheets(“Mixing”).Cells(count, ).Value = Sheets(“Mixing”).Cells(count, ).Value”. El segundo argumento de la función Cells debe ser un número de columna. En este caso, el segundo argumento debería ser 21 (para la columna T) o 22 (para la columna V), dependiendo de qué celda se esté estableciendo.

    Finalmente, no está claro cómo se registrarán o utilizarán los resultados de la optimización. El código actual establece el valor de la fila actual en su valor actual, lo cual no hace nada en realidad. Puede ser útil agregar una línea para registrar el valor óptimo de V para cada fila o para enviar los datos resultantes a una nueva hoja de cálculo.

    En resumen, el código proporcionado configura Solver para encontrar valores de V que hagan que T sea cero para cada par de celdas en el conjunto de datos. Sin embargo, hay algunos problemas con el código que deben corregirse antes de ejecutarlo. Además, puede ser útil agregar código para registrar o enviar los resultados de la optimización.

Comments are closed.