como obtengo los sumando de un rango conociendo la suma

01/05/2007 - 01:40 por BENN | Informe spam
SABIENDO CUANTO ES LA SUMA, NECESITO SABER CUALES SON LOS SUMANDOS DE UN
RANGO DE DATOS.
NECESITO SABER QUE VALOSRES, DE UN RANGO, SUMAN UNA CANTIDAD ESTABLECIDA.
 

Leer las respuestas

#1 Héctor Miguel
01/05/2007 - 04:18 | Informe spam
hola, !

SABIENDO... LA SUMA... SABER CUALES SON LOS SUMANDOS DE UN RANGO DE DATOS.



tendrias que usar el solver por codigo, para lo cual... te paso al final algunos 'apuntes', enlaces y datos +/- 'relevantes'
si cualquier duda... o informacion adicional... o requieres el envio de un archivo con el ejemplo... comentas ?
saludos,
hector.

1) deberas tomar en cuenta las siguientes 'observaciones':
- para 'poder' usar el solver [por codigo], es necesario...
-> establecer una referencia [en el proyecto de macros] a la libreria 'solver.xla' [NO solver.dll]
-> buscando la ubicacion 'apropiada' con [menu] [herramientas / referencias <-
[la cual, pudiera variar segun la version -ingles/español- del sistema operativo]
- hay 'ligeros' cambios entre excel '97/2000 y excel xp/2003 ...
las 'llamadas' [por codigo] a las funciones del solver [como SolverOK, SolverAdd, etc.]
en xp/2003 'pasan' [reducidas] a: SolvOK, SolvAdd, etc. les 'sobra' el 'sufijo' ->[solv]ER<-
- [probablemente] la primera vez que lo ejecutes mandara un mensaje de error:
->error inesperado o memoria agotada<- :((
para 'resolverlo' [y SOLO por unica vez] 'tendras que' usar la siguiente instruccion...
->Application.Run "Solver.xla!Auto_Open"<-
- tomar en cuenta IDIOMAS p.e. para 'FormulaText:=' en castellano 'binario' debe cambiarse por 'binary'
- tomar precauciones si se va a correr en hojas 'protegidas' <= OJO

2) podrias empezar por descargar ejemplos [luego de suscribirte en]:
http://www.xl-logic.com/xl_files/fo...linear.zip
http://www.xl-logic.com/xl_files/fo...solver.zip
tambien tutoriales y [mas] ejemplos [luego de suscribirte a]
http://www.solver.com/suppxlsguide.htm

3) un ejemplo de una consulta especifica de hace tiempo [pego junto con la consulta] ;)
consulta ==> ... 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 [...]


propuesta ==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

Preguntas similares