Ayuda con una para agilizar Macro

Hola Dante,

Tengo una macro a la que agregue nombre de rango y condiciones.

Es muy lenta.

Te pido de la manera mas atenta me ayudes a ver si se puede mejorar:

Hola,

Esto ha funcionado perfectamente. Solo agregue condiciones y la macro es lenta.

Se puede mejorar?

Sub marcasunsh()
    Worksheets("Unsh").Select
    Columns("N").ClearContents
    u = marcas
    For I = 1 To Range("K" & Rows.Count).End(xlUp).Row
        res = Evaluate("=INDEX(marcas" & u & ",MATCH(1,COUNTIF(K" & I & ",""*"" & marcas" & u & "& ""*""),0))")
        If Not IsError(res) Then
            If res = "Chaoyang" Then
             Cells(I, "N") = "Trazano"
           Else
           Cells(I, "N") = res
           If res = "Trailer" Then
             Cells(I, "N") = "Westlake"
          Else
           Cells(I, "N") = res
          If res = "HR802" Then
             Cells(I, "N") = "HEADWAY"
          Else
           Cells(I, "N") = res
          If res = "KNIGHT AT" Then
           Cells(I, "N") = "GOFORM"
          Else
           Cells(I, "N") = res
            If res = "HR701" Then
             Cells(I, "N") = "HEADWAY"
            Else
           Cells(I, "N") = res
            If res = "VANTI TOURING" Then
             Cells(I, "N") = "CENTARA"
          Else
           Cells(I, "N") = res
           If res = "Vanti Winter" Then
           Cells(I, "N") = "CENTARA"
            Else
           Cells(I, "N") = res
           If res = "TERRENA A/T" Then
           Cells(I, "N") = "CENTARA"
            Else
           Cells(I, "N") = res
           If res = "COMMERCIAL" Then
            Cells(I, "N") = "CENTARA"
            Else
            Cells(I, "N") = res
           End If
          End If
         End If
        End If
       End If
      End If
     End If
    End If
   End If
  End If
    Next
End Sub

Muchas gracias!!!

1 respuesta

Respuesta
1

Te anexo el código, prueba si es más rápido.

No me funciona con "u = marcas", supongo que tienes las marcas en un nombre, pero para probar la macro le puse "u = Range("C" & Rows.Count).End(xlUp).Row"

Lo importante es que si te funciona, pues pongas "u = marcas" y después de esta instrucción:

"If Not IsError(res) Then" pongas el "select case".

Lo que hacen los if, es preguntar en todos y además ponías el resultado, con el select case cuando encuentra un valor se sale del case.

Prueba y me comentas

Sub marcasunsh()
    Worksheets("Unsh").Select
    Application.ScreenUpdating = False
    Columns("N").ClearContents
    'u = marcas
    u = Range("C" & Rows.Count).End(xlUp).Row
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        res = Evaluate("=INDEX(C1:C" & u & ",MATCH(1,COUNTIF(A" & i & ",""*"" & C1:C" & u & "& ""*""),0))")
        'res = Evaluate("=INDEX(marcas" & u & ",MATCH(1,COUNTIF(K" & i & ",""*"" & marcas" & u & "& ""*""),0))")
        If Not IsError(res) Then
            Select Case res
                Case "Chaoyang": Cells(i, "N") = "Trazano"
                Case "Trailer": Cells(i, "N") = "Westlake"
                Case "HR802": Cells(i, "N") = "HEADWAY"
                Case "KNIGHT AT": Cells(i, "N") = "GOFORM"
                Case "HR701": Cells(i, "N") = "HEADWAY"
                Case "VANTI TOURING": Cells(i, "N") = "CENTARA"
                Case "Vanti Winter": Cells(i, "N") = "CENTARA"
                Case "TERRENA A/T": Cells(i, "N") = "CENTARA"
                Case "COMMERCIAL": Cells(i, "N") = "CENTARA"
                Case Else: Cells(i, "N") = res
            End Select
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Terminado", vbInformation, "REFERENCIAS"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas