HARDWARE Y SISTEMAS OPERATIVOS, GNU/Linux, Windows, Mac > Windows - XP, ME, 2000, 98, NT, Vista, 7, 8, 10
Ubicar valor entre rango (Macro Excel) (SOLUCIONADO)
(1/1)
luis15155:
Buenos días con todos los foristas.
Tengo un problema, el cual trataré de explicarlo de la siguiente manera:
Tengo una serie de registros, de los cuales quiero saber si la suma de cierta columna cumple cierta condición; es decir. Si esta ente 10.50 y 11.40.
Quiero probar las diferentes combinaciones hasta arrojar la combinación que cumpla con tal condición.
Soy consciente de todas las posibilidades que existen, lo estoy trabajando con el SOLVER que viene con el Excel, pero en algunos casos es posible variar en cierto rango.
Aquí les dejo la macro que estoy trabajando, pero algo no hace bien que se corta antes de tiempo.
Estoy adjuntando el archivo Excel también, espero su ayuda.
Muchas gracias con todos.
https://www.dropbox.com/s/9afhlakyznjfkf3/Resolver.xlsm?dl=0
--- Código: ---Private Sub cbResolver_Click()
Dim n, i, menor, mayor, numero, sumat As Double
Dim totales As String
datos = RefEdit1.Value 'Capturo el rango total
n = range(datos).Rows.Count 'Cuento las filas
menor = FormatNumber(tbDesde.Value, 2)
mayor = FormatNumber(tbHasta.Value, 2)
range("D2").Value = menor 'Luego borrar
range("E2").Value = mayor 'Luego borrar
For i = 1 To n
range(datos).Select
Selection.Cells(i, 1).Select
ActiveCell.FormulaR1C1 = "=RANDBETWEEN(0,1)"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
sumat = range(tbDireccionCelda).Value
range("F2").Value = sumat 'Luego borrar
If sumat >= menor And sumat <= mayor Then
MsgBox "Encontramos una solución"
Exit Sub
End If
Next i
End Sub
--- Fin del código ---
luis15155:
Buenas tardes.
Busqué con tanta desesperación que encontré la solución.
Ahí les dejo una imagen con la configuración:
Disculpen las molestias.
Saludos a todos.
MClaud:
¿No es mas sencillo hacerlo con fórmulas?
Coloca los valores máximo y mínimo en las celdas C4 y D4
Tus datos en la columna B
Tus fórmulas en la columna C
=SI(Y(B5>$C$4,B5<$D$4),B5,"")
Incluye Mayor Igual y Menor Igual para que aparezcan los valores máximo y mínimo en tus resultados
luis15155:
Buenas tardes MClaud, intenté hacerlo con fórmulas pero no me salió.
Me explico mejor.
En esos seis registros es obvio que las únicas posibilidades son las celdas de color amarillo. Pero en mi caso, trabajo con 300 registros y con valores no tan uniformes (con dos decimales en muchos casos), eso lo hace imposible con fórmulas (A mi parecer), con el Solver me funcionó de maravilla. En algunos casos en menos de 1 minuto ya tengo un escenario que cumpla con las condiciones asignadas, en otros casos he tenido demoras de hasta 15 minutos.
Saludos.
MClaud:
las formulas son sencillas y dependiendo de los limites que pongas no importa los decimales, pues igual los identificaran las formulas, al final solo debes totalizarlas
A3 Max B3 15
A4 Min B4 10
A6 Registro 1 B6 10 C6 =SI(Y(B6>=$B$4,B6<=$B$3),B6,"")
....
A100 Registro 95 B100 15.5 C100 =SI(Y(B100>=$B$4,B100<=$B$3),B100,"")
Resulta mas sencillo aun usando nombres de rango
Nombres de rango
A3 = Maximo
A4 = Minimo
Formulas
A6 Registro 1 B6 10 C6 =SI(Y(B6>=Minimo,B6<=$B$3),Maximo,"")
Otra forma sencilla de lograr resultados rápidos seria utilizando filtros usando la opción valor numérico, entre (valores máximo y minimo) y cambiando la formula de los totales
Formula usada normalmente
= Suma(B6:B100)
Cambiarla por
=SUBTOTALES(9,$B$6:B100)
Esto hará que lo totalizado sea solo lo filtrado y no el total de registros
Navegación
Ir a la versión completa