LIBRO DE EXCEL DEMASIADO GRANDE

15/05/2008 - 11:28 por japbcn | Informe spam
Hola a tod@s

Intentaré explicarme lo mejor posible. Si no, os ruego me pregunteis
sin problemas lo que creais necesario, pero es que me urge un poco
tomar una decisión respecto a lo que estoy haciendo.

Partimos de la base que cada mes se generan en la empresa unos 15.000
albaranes, que hay que facturar, cosa de la que se encarga el programa
de gestión, pero sobre los cuales posteriormente, nos vienen en una
Factura desde la central, los cargos por los trabajos realizados.
Viene a ser como una franquicia, en la que por ejemplo nos cobran "un
tanto" por gestión realizada. Y hay que comprobar esa Factura, para lo
que se me ha pedido una Hoja de cálculo, a la que volcándole el
archivo con los Albaranes, calcule la Factura que deberíamos recibir
desde la Central.

El volcado de datos y su ordenación ya está solucionado, (el programa
vuelca los datos sobre una hoja de Excel que solo tengo que Copiar y
Pegar, y de la ordenación, ya he hecho una Macro que se encarga de
ello).

El caso es que hay unos 12 casos de Tarifas distintas, y cada una de
ellas con 6 posibilidades, (para entendernos, Provincial, Regional,
Nacional, Internacional, Aereo, etc..., con los casos de Urgente,
Normal, Depósito, etc... para cada una de ellas), lo que me genera una
gran cantidad de Tablas a las que acudo continuamente en busca de
datos para realizar los cálculos.

En ocasiones tengo celdas con fórmulas del tipo:

=SI(AA5>0;AM5;SI(H5="";"";SI(I5=0;SI($J5="S";BUSCARV("A";INDIRECTO(S!
$P5);3);SI(SUMA($L5:$N5)<=5;BUSCARV("B";INDIRECTO($P5);
3);SI(SUMA($L5:$N5)<;BUSCARV("C";INDIRECTO($P5);
3);BUSCARV("D";INDIRECTO($P5);3))));SI($J5="S";BUSCARV("A";INDIRECTO(S!
$P5);4);SI(SUMA($L5:$N5)<=5;BUSCARV("B";INDIRECTO($P5);
4);SI(SUMA($L5:$N5)<;BUSCARV("C";INDIRECTO($P5);
4);BUSCARV("D";INDIRECTO($P5);4))))))

pero digamos que me voy apañando.

El problema: Estoy manejando cerca de 800.000 celdas con fórmulas, y
todavía estoy cerca del 60% del total de "programación" de la Hoja.
El "peso" ya es de 32 Mb, lo que me hace pensar, que si sigo
trabajando en la Hoja como vengo haciéndolo hasta ahora, poniendo
fórmulas en cada delda y utilizando celdas de apoyo, dentro de poco
manejar una hoja con semejante "peso" que puede llegar a alcanzar,
puede resultar engorroso, a la par que lento, y por tanto hacer que
todo el trabajo que vengo realizando sea inutil.

Se os ocurre alguna manera de realizar una hoja tan grande que
"aligere" el peso final?
Es correcto tener celdas con fórmulas tan grandes? O es que estoy
complicándome la vida?
Mis conocimientos de VBA son muy básicos.

Se agradecen opiniones.

Gracias por adelantado.

Joan Antoni

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
17/05/2008 - 21:20 | Informe spam
hola, Joan !

La "cirugia mayor" ya es el remedio que le aplique reconsidere el planteamiento, y lo cambie ...
He construido tablas intermedias que me "aligeran" la longitud de las formulas
concentrando informacion en vez de creas celdas con multiples si(...)
y ahora, que ya estoy al mismo nivel que donde estaba antes, el archivo "pesa" 13,5Mb.
De todos modos, me resultan de mucha utilidad varios de los comentarios que haces:



es (solo) probable que despues de revisar los consejos en las paginas sugeridas...
puedas recortar y agilizar tanto el "peso" como el rendimiento de tu archivo (a reserva de... ???)

- la funcion indirecto() consume muchos recursos? Por que resulta que lo utilizo bastante
ya que no se como hacerlo de otro modo... en una celda, (a2 por ejemplo), concateno varias letras
(que corresponden a condiciones de cada caso), hasta que forman unas siglas.
Estas siglas, coinciden con una tabla, donde tengo los precios, por ejemplo.
Si en el caso que en a2 obtuviera como resultado "MB12" por ejemplo
luego al utilizar la formula para buscar un valor "x" en la tabla MB12 si utilizo:
buscarv("x";a2;2) no me funciona, y tengo que poner buscarv("x";indirecto(a2);2) y entonces si funciona.
Esta bien hecho asi, o puedo hacerlo mejor para no consumir tantos recursos?
O mejor aun... cual seria la manera correcta de hacer esa busqueda?



mas que la funcion indirecto (SIN caer en algun abuso con su uso) es el uso (ahora si) "excesivo" del si-condicional
(hasta donde se) independientemente de "cual condicion se cumpla", la funcion si "evalua" ambas coniciones (luego)...
si en cada "paso intermedio" de funciones si-anidadas, contienes (varias) llamadas a la funcion indirecto... :-((

- los calculos como tu llamas "a futuro" (abajo y/o derecha) consumen mas?
debo entender que excel "analiza" las celdas de columna A en adelante y de la fila 1 para abajo?
(Es para no incurrir en ello...)



sip !... ese es "el orden" que sigue excel para el (re)calculo de las formulas (arriba->abajo / izquierda->derecha)
(incluso, los nombres de las hojas intervienen en la "secuencia" para resolver vinculos por orden alfabetico)

- La solucion a la "kilometrica" formula, contiene funciones, (coincidir, elegir), que no se muy bien como funcionan
lo que me obligara a "hicar codos" a ver si aprendo...



haz una prueba y (si te funciona igual) analizas los "cambios" a la logica aplicada (segun yo)...
el desarrollo que haces tiene una "bifurcacion" donde (a final de cuentas) las condicionantes son las mismas
yo solo las reduje a su minima expresion, al estilo de factorizar ecuaciones matematicas (y ya "de paso")...
(para mi) la logica es matematica... y las matematicas son logicas :))

Recibe un muy cordial saludo desde Barcelona, Espana.



saludos desde la sucursal del cielo:
Zapopan/Guadalajara, Jalisco, México :D
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida