Filtrar rango para que de un valor determinado.

17/10/2003 - 14:59 por Jaume Fugarolas | Informe spam
Buenas tardes,

Tengo una lista de valores en un rango vertical de celdas y desearia poder
encontrar las que sumadas dan un resultado concreto.

Por ejemplo supongamos que tengo estos valores y quisiera filtrarlas para
conseguir la relación de las celdas que sumadas dan 45.

A B
1 10
2 20
3 25
4 30

He estado haciendo pruebas con solver y buscar objetivo y no lo he
conseguido. No se trata de cambiar el valor de las celdas, sinó de
seleccionar aquellas con las que se consiga el resultado.

Si alguien sabe como hacerlo, bien sea desde excel o desde vba le agradeceré
me lo comunique.

Saludos y gracias anticipadas.
Jaume Fugarolas.
 

Leer las respuestas

#1 Héctor Miguel
20/10/2003 - 02:02 | Informe spam
Hola, Jaume !

... lista de valores ... encontrar las que sumadas dan un resultado concreto.
... ejemplo ... quisiera filtrarlas para conseguir ... las celdas que sumadas dan 45.
A B
1 10
2 20
3 25
4 30
... con solver y buscar objetivo y no lo he conseguido.
No se trata de cambiar el valor de las celdas, sino de seleccionar aquellas con las que se consiga el resultado [...]



con los siguientes 'supuestos' y usando solver [por codigo] se puede [+/-] 'conseguir' lo que necesitas:
nota: [te sugiero] usar nombres [ya sea 'estaticos' o 'dinamicos'] para no 'estar cambiando' sus 'referencias' en el codigo.
1.- al rango de los valores [col 'a'] asignale un nombre [p.e. 'Valores']
2.- a un rango 'igual' [adyacente y vacio -de momento-] asignale otro nombre [p.e. 'Filtro']
en estas celdas, el solver 'pondra' 1's / 0's [unos o ceros] para lograr la 'combinacion' que 'arroje' la suma buscada
3.- en una celda 'pon' la suma que se desea 'conseguir' y asignale otro nombre [p.e. 'Objetivo']
4.- usa otra celda 'para' el resultado y asignale otro nombre [p.e. 'Resultado']
la formula en esta celda [Resultado] seria => =SumaProducto(Valores,Filtro)
5.- IMPORTANTE => 'marcar' una referencia en el proyecto [vba] a la libreria del solver [solver.xla]
6.- puedes 'aplicar' autofiltro a la columna del rango 'Filtro' o ...
usar formato condicional para 'identificar' la/s fila/s cuyo 'valor' [en 'su celda' del rango 'Filtro'] sea 1 [uno]
7.- puedes 'asignar' la macro a algun boton, o en el evento '_Change' de la celda 'Objetivo' [en el modulo de 'su' hoja]
y/o ['lanzarla' al] mostrar un formulario 'de espera' en el evento '_Activate' del formulario [por si 'le toma su tiempo'] etc.

en un modulo de codigo 'normal' ==Sub Localizar_Suma()
Application.ScreenUpdating = False
SolverReset
SolverOk SetCell:="" & [Resultado].Address & "", _
MaxMinVal:=3, _
ValueOf:="" & [Objetivo] & "", _
ByChange:="" & [Filtro].Address & ""
SolverAdd CellRef:="" & [Filtro].Address & "", _
Relation:=5, _
FormulaText:="Binario"
SolverOptions Precision:=0.0000001, _
Convergence:=0.001
SolverOk SetCell:="" & [Resultado].Address & "", _
MaxMinVal:=3, _
ValueOf:="" & [Objetivo] & "", _
ByChange:="" & [Filtro].Address & ""
SolverSolve UserFinish:=True
End Sub

Saludos,
Héctor.

Preguntas similares