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!!!!!
 

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

Preguntas similares