Excel tardando mucho en calcular una UDF VBA.
ejemplo2 ejemplo1 El nombre del archivo que estoy tratando de encontrar está en la fila A y estoy buscando a través de la fila I para ver si hay una coincidencia Encontré este código que no puedo recordar de dónde, pero estoy tratando de emparejar la fila de números de pieza con una fila de nombres de archivos de imagen. Este código funciona, sin embargo, hay un problema cuando lo ejecuto, tarda mucho tiempo en calcular incluso solo una columna y cuando hago cientos a la vez, mi Excel deja de responder, y tengo miles de productos que necesito emparejar. Soy realmente nuevo en VBA, por lo que ni siquiera puedo encontrar el problema.
Por favor, ayúdame, gracias.
'Nombre de la función y argumentos
Function BuscarCaracteres(valor_buscado As String, rango_tabla As Range) As String
'Declarar variables y tipos
Dim i As Integer, str As String, Valor As String
Dim a As Integer, b As Integer, celda As Variant
'Iterar a través de cada celda
For Each celda In rango_tabla
'Guardar el valor de la celda en una variable
str = celda
'Iterar a través de los caracteres
For i = 1 To Len(valor_buscado)
'¿Es el mismo carácter?
If InStr(celda, Mid(valor_buscado, i, 1)) > 0 Then
'Sumar 1 al número en el arreglo
a = a + 1
'Eliminar el carácter evaluado de la celda y continuar con los caracteres restantes
celda = Mid(celda, 1, InStr(celda, Mid(valor_buscado, i, 1)) - 1) & Mid(celda, InStr(celda, Mid(valor_buscado, i, 1)) + 1, 9999)
End If
'Siguiente carácter
Next i
a = a - Len(celda)
'Guardar el valor si hay más caracteres coincidentes que antes
If a > b Then
b = a
Valor = str
End If
a = 0
Next celda
'Regisar el valor con la mayoría de caracteres coincidentes
BuscarCaracteres = Valor
End Function
davy.ai
La función VBA proporcionada “SearchChars” itera a través de un rango dado “tbl_array”, celda por celda, y cuenta el número de caracteres coincidentes entre cada celda y una cadena dada “lookup_value”. La celda con más caracteres coincidentes se devuelve como resultado de la función.
El problema con esta función es que es ineficiente para conjuntos de datos grandes, ya que tiene que iterar a través de cada celda individualmente. Esto puede causar retrasos significativos y hacer que Excel sea no receptivo al intentar procesar grandes cantidades de productos.
Una forma de optimizar esta función es utilizando las funciones integradas de Excel, como “MATCH” o “VLOOKUP”, para encontrar directamente los nombres de archivo de imágenes coincidentes desde el rango dado, en lugar de iterar a través de cada celda con código personalizado. Al hacer esto, Excel puede encontrar rápidamente los valores coincidentes y devolver los resultados sin necesidad de código personalizado.
Otra posible optimización es reducir la cantidad de datos que se procesan. Si los datos de entrada están disponibles en un formato estructurado, como una base de datos, puede ser más eficiente realizar la coincidencia utilizando una consulta SQL u otra funcionalidad de la base de datos, en lugar de cargar todo el conjunto de datos en Excel y procesarlo con código VBA.
En resumen, para optimizar la función VBA proporcionada para conjuntos de datos grandes, se puede utilizar las funciones integradas de Excel o considerar el uso de una herramienta diferente, como una base de datos, para realizar la coincidencia.