Autor Tema: Ubicar valor entre rango (Macro Excel) (SOLUCIONADO)  (Leído 22284 veces)

Desconectado luis15155

  • Member
  • ***
  • Mensajes: 278
  • »- DaRk_DeViL -«
    • Reflexiones....!!!!!
Ubicar valor entre rango (Macro Excel) (SOLUCIONADO)
« en: 26 de Julio de 2017, 06:53:56 pm »
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: [Seleccionar]
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
»- DaRk_DeViL -«

Desconectado luis15155

  • Member
  • ***
  • Mensajes: 278
  • »- DaRk_DeViL -«
    • Reflexiones....!!!!!
Re:Ubicar valor entre rango (Macro Excel)
« Respuesta #1 en: 26 de Julio de 2017, 08:54:09 pm »
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.

»- DaRk_DeViL -«

Desconectado MClaud

  • Moderador
  • ******
  • Mensajes: 2148
Re:Ubicar valor entre rango (Macro Excel)
« Respuesta #2 en: 26 de Julio de 2017, 09:48:38 pm »
¿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
¡Más vale perder el tiempo con amigos...
Que perder amigos con el tiempo!

Desconectado luis15155

  • Member
  • ***
  • Mensajes: 278
  • »- DaRk_DeViL -«
    • Reflexiones....!!!!!
Re:Ubicar valor entre rango (Macro Excel)
« Respuesta #3 en: 20 de Diciembre de 2017, 11:27:08 pm »
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.
»- DaRk_DeViL -«

Desconectado MClaud

  • Moderador
  • ******
  • Mensajes: 2148
Re:Ubicar valor entre rango (Macro Excel)
« Respuesta #4 en: 21 de Diciembre de 2017, 03:51:57 am »
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
 



¡Más vale perder el tiempo con amigos...
Que perder amigos con el tiempo!

 

Aviso Legal | Política de Privacidad | Política de Cookies

el contenido de la web se rige bajo licencia
Creative Commons License