Funcion hace lento mi Excel

14/12/2005 - 17:18 por sistemas | Informe spam
Hola a todos, buen dia

Estoy creando una hoja de excel, en la cual necesito poner una referencia a
una celda, segun el contenido de otra celda, (pudiera usar la funcion SI,
pero se anidarian muchisimas), entonces decidi hacer una funcion que
dependiendo el valor de la celda, me devuelva otro valor en otra celda, por
esto no tengo problema aparentemente, pues me devuelve valores devez en
cuando (no entiendo porque), ya puse Application.Volatile. Y algunas veces
me aparece el resultado de mi funcion y en otras veces no, hasta que
recalculo la hoja con F9 o edito las celdas que tienen mi funcion.

Pero, el problema en si es el siguiente, como son muchas filas se tarda en
calcular y como puse la Application.Volatile, se tarda mas, pues si tengo el
archivo abierto, y estoy trabajando en otro, se calcula una y otra vez,
todas las celdas y se hace todo muy lento.

Alguna sugerencia de que pudiera hacer...????
-Elimino mi funcion
-Elimino Application.Volatile
-??????????????
=Juan Manuel Valenzuela Estrada
==

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
14/12/2005 - 18:32 | Informe spam
hola, 'anonimo/a' !

... necesito poner una referencia a una celda, segun el contenido de otra celda
(pudiera usar la funcion SI, pero se anidarian muchisimas)
... decidi hacer una funcion... por esto no tengo problema aparentemente
... me devuelve valores de vez en cuando (no entiendo porque), ya puse Application.Volatile
... algunas veces me aparece el resultado... en otras veces no, hasta que recalculo la hoja... o edito las celdas
... el problema en... como son muchas filas se tarda en calcular y como puse la Application.Volatile, se tarda mas [...]
Alguna sugerencia de que pudiera hacer...????
-Elimino mi funcion
-Elimino Application.Volatile
-??????????????



las funciones personalizadas NO SON [siempre] una mejor alternativa a las funciones 'nativas' de la aplicacion :(
por que no 'empiezas' por exponer las condiciones que necesitas y como pensabas 'anidarlas' con funciones si(...) ?
[es probabe que se pudiera idear 'algo' que 'retarde' la necesidad de definir funciones personalizadas... y con 'volatile'] ;)

saludos,
hector.
Respuesta Responder a este mensaje
#2 sistemas
14/12/2005 - 18:47 | Informe spam
Haber si me doy a entender...

Tengo que "poner" el costo segun el estatus de una "VACA", los estatus son
17, por lo cual no quise anidar 17 SI, e hice la siguiente funcion:

Function tipocosto(tipovaca As String) As Double
Application.Volatile
Select Case tipovaca
Case Is = "Preñordeña"
tipocosto = (Range("K1905").Value)
Case Is = "Insemordeña"
tipocosto = (Range("L1905").Value)
Case Is = "Altaordeña"
tipocosto = (Range("M1905").Value)
Case Is = "Prontordeña"
tipocosto = (Range("M1905").Value)
Case Is = "Vaciaordeña"
tipocosto = (Range("N1905").Value)
Case Is = "Matarordeña"
tipocosto = (Range("N1905").Value)
Case Is = "Abortordeña"
tipocosto = (Range("O1905").Value)
Case Is = "Preñcrianza"
tipocosto = (Range("Q1905").Value)
Case Is = "Insemcrianza"
tipocosto = (Range("R1905").Value)
Case Is = "Altacrianza"
tipocosto = (Range("S1905").Value)
Case Is = "Prontcrianza"
tipocosto = (Range("S1905").Value)
Case Is = "Vaciacrianza"
tipocosto = (Range("T1905").Value)
Case Is = "Matarcrianza"
tipocosto = (Range("T1905").Value)
Case Is = "Abortcrianza"
tipocosto = (Range("U1905").Value)
Case Is = "Terncrianza"
tipocosto = (Range("V1905").Value)
Case Is = "Preñsecado"
tipocosto = (Range("W1905").Value)
Case Is = "Secasecado"
tipocosto = (Range("X1905").Value)
Case Is = "Abortsecado"
tipocosto = (Range("Y1905").Value)
Case Is = "Vaciasecado"
tipocosto = (Range("Z1905").Value)
Case Is = "Ternleche"
tipocosto = (Range("AA905").Value)
End Select
End Function

Para llamarla solo pongo en una celda esto: =tipocosto(A1), y ella me
regresa un COSTO, segun el STATUS, pero como se recalcula por el VOLATILE,
se hace muy lento, por estar calculando cada vez que hago movimientos en la
hoja o en otras hojas...

Saludos
Juan Manuel Valenzuela Estrada
Respuesta Responder a este mensaje
#3 Héctor Miguel
14/12/2005 - 19:58 | Informe spam
hola, Juan Manuel !

-> si ya tienes un 'rango de valores' en K1905:AA1905 [y creo que tienes un error en el ultimo 'Case'] -?-
por que no 'pruebas' poniendo los 'tipovaca' una celda arriba del rango de valores -> K1904:AA1904
y utilizas la funcion =buscarh(...) [p.e.]
-> =buscarh(a1,k1904:aa1905,2,0)
-> o... buscarh(a1,$k$1904:$aa$1905,2,false)

solo toma en cuenta que mi sistema usa como separador de argumentos a la coma ',' NO al punto y coma ';' :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Haber si me doy a entender...
Tengo que "poner" el costo segun el estatus de una "VACA"
los estatus son 17, por lo cual no quise anidar 17 SI, e hice la siguiente funcion:
Function tipocosto(tipovaca As String) As Double
Application.Volatile
Select Case tipovaca
Case Is = "Preñordeña"
tipocosto = (Range("K1905").Value)
Case Is = "Insemordeña"
tipocosto = (Range("L1905").Value)
Case Is = "Altaordeña"
tipocosto = (Range("M1905").Value) [...]
Case Is = "Ternleche"
tipocosto = (Range("AA905").Value)
End Select
End Function
... solo pongo en una celda esto: =tipocosto(A1), y ella me regresa un COSTO, segun el STATUS [...]
Respuesta Responder a este mensaje
#4 sistemas
15/12/2005 - 19:26 | Informe spam
Gracias Hector Miguel, voy a "cambiar" lo echo, para probar asi como dices,
ya me di una idea de que hacer...

Muchisimas gracias.

Saludos desde Torreon, Coahuila, Mexico
Juan Manuel Valenzuela Estrada
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida