AYUDA PARA DEPURAR FUNCION....

23/08/2007 - 15:43 por wally23.32 | Informe spam
Buenos días grupo, tengo el siguiente problema, necesito buscar en una
columna "rango" una cadena que coincida con cierto valor, de acuerdo
al valor encontrado necesito ver el valor de otra columna "valores",
la coincidencia es buscada de acuerdo al parámetro "valueFind".

La función que implemente funciona pero es demasiado lenta a la hora
de calcular ya que busca dentro de mil filas, ademas de que la funcion
en utilizada en demasiadas celda, unas 100 aprox.

Tenía implementada la función "contar.si" definida en EXCEL, pero el
problema que me presenta esta formula es que sólo cuenta las celdas
que tengan la coincidencia expecificada y lo que necesito es que
además de eso me multiplique el valor que aparece en la siguiente
columna.

¿Se podrá mejorar esta función para que sea más rápida?, anexo el
código de la misma

Function MultiVal(rango As Range, valores As Range, valueFind As
String) As Integer
Dim vCounter
Dim vTotal

For vCounter = 1 To rango.Rows.Count
If rango.Cells(vCounter) Like valueFind Then
'MsgBox "Buscar: " & valueFind & ", Pasada: " & counter
vTotal = vTotal + valores.Cells(vCounter).Value
End If
Next vCounter

MultiVal = vTotal

End Function




GRACIAS POR SUS COMENTARIOS!!!!!

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/08/2007 - 20:14 | Informe spam
hola, !

... necesito buscar en una columna "rango" una cadena que coincida con cierto valor
de acuerdo al valor encontrado necesito ver el valor de otra columna "valores"
la coincidencia es buscada de acuerdo al parametro "valueFind".
La funcion que implemente funciona pero es demasiado lenta a la hora de calcular ya que busca dentro de mil filas
ademas de que la funcion en utilizada en demasiadas celda, unas 100 aprox.
Tenia implementada la funcion "contar.si" definida en EXCEL, pero el problema que me presenta esta formula es que
solo cuenta las celdas que tengan la coincidencia expecificada y lo que necesito es
que ademas de eso me multiplique el valor que aparece en la siguiente columna.
Se podra mejorar esta funcion para que sea mas rapida?, anexo el codigo de la misma



ya que estas usando en el codigo el operador *Like*... asumo que el valor buscado pudiera ser solamente *parcial* -?-
si te sirve, en lugar de definir una funcion personalizada, aprovechar funciones de hoja de calculo...

si suponemos que en la celda E2 escribes el texto [parcial o total] que...
- debiera ser encontrado en las celdas del rango B2:B11 [obviamente puedes ajustar a otras necesidades/realidades/...]
- y deseas obtener la suma de valores en el rango C2:C11

prueba con la siguiente formula: =sumaproducto(--esnumero(hallar(e2,b2:b11)),c2:c11)

OJO que mi sistema usa como separador de argumentos a la coma '.' NO al punto y coma ';' :D
y... si no pones nada en 'E2' [obviamente] obtienes la suma total de los valores en el rango C2:C11

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

__ el codigo expuesto __
Function MultiVal(rango As Range, valores As Range, valueFind As String) As Integer
Dim vCounter
Dim vTotal
For vCounter = 1 To rango.Rows.Count
If rango.Cells(vCounter) Like valueFind Then
'MsgBox "Buscar: " & valueFind & ", Pasada: " & counter
vTotal = vTotal + valores.Cells(vCounter).Value
End If
Next vCounter
MultiVal = vTotal
End Function
Respuesta Responder a este mensaje
#2 wally23.32
24/08/2007 - 03:07 | Informe spam
On 23 ago, 13:14, "Héctor Miguel"
wrote:
hola, !
ya que estas usando en el codigo el operador *Like*... asumo que el valor buscado pudiera ser solamente *parcial* -?-
si te sirve, en lugar de definir una funcion personalizada, aprovechar funciones de hoja de calculo...

si suponemos que en la celda E2 escribes el texto [parcial o total] que...
- debiera ser encontrado en las celdas del rango B2:B11 [obviamente puedes ajustar a otras necesidades/realidades/...]
- y deseas obtener la suma de valores en el rango C2:C11

prueba con la siguiente formula: =sumaproducto(--esnumero(hallar(e2,b2:b11)),c2:c11)

OJO que mi sistema usa como separador de argumentos a la coma '.' NO al punto y coma ';' :D
y... si no pones nada en 'E2' [obviamente] obtienes la suma total de los valores en el rango C2:C11

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



HECTOR, gracias por la formula que me pasaste, funciona excelente,
hace exactamente lo que mi función solo que mucho más rápido...

Solo me queda una duda, si hacen lo mismo por que se tarda tanto,
acaso EXCEL le da privilegio a sus códigos o es que hay algo mal en mi
implementación?

La pregunta es por que yo no se manejar mucho el EXCEL y VB menos,
pero como se algo de programación se me hizo más fácil diseñar la
función...


GRACIAS por tus comentarios!!!!
Respuesta Responder a este mensaje
#3 Héctor Miguel
24/08/2007 - 04:09 | Informe spam
hola, !

... la formula... hace exactamente lo que mi funcion solo que mucho mas rapido...
... si hacen lo mismo por que se tarda tanto, acaso EXCEL le da privilegio a sus codigos
... es que hay algo mal en mi implementacion?
... no se manejar mucho el EXCEL y VB menos, pero... se me hizo mas facil dise#ar la funcion...



dejando un poco [o de momento] *de lado* el hecho de que las funciones *nativas* [integradas de excel]
[generalmente] siempre seran mas rapidas y eficientes que una definida por el usuario [codigos vba]

1) la que definiste...
a) *avanza* [o recorre] UNA POR UNA las celdas de sus argumentos [y si hablamos de ~1000] :-(
b) cada vez que se modifica en/los rangos de sus argumentos, se re/calcula igual para tus ~100 formulas :-(

2) la formula propuesta *trabaja con las matrices* de sus argumentos [algo asi como mas... *de golpe y porrazo*] :D

3) [hasta donde se] pocas son las situaciones que [realmente] *ameritan* desarrollar funciones propias ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida