es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.