Ejecute la función VLookup alojada dentro de un botón de macro VBA

He estado trabajando en una función Vlookup (que funciona dentro de una celda) como se muestra a continuación:

=IFERROR(VLOOKUP(B2&"*", 'Sheet2'!$AC:$AC, 1, FALSE), "N/A")

Esta es la idea detrás del uso de esta fórmula:

  • busque el valor de la cadena de texto en Sheet1 col.B (ejemplo: BajaTurkeyAvocado_6S_HeroRegular_Mobile)

ingrese la descripción de la imagen aquí

  • ver si existe un valor similar a este en Sheet2 col. AC (ejemplo: BajaTurkeyAvocado_6S_HeroRegular_Mobile.png es una coincidencia ya que es un valor similar)

ingrese la descripción de la imagen aquí

  • Si es una coincidencia, coloque Sheet2 col. Valor AC en la columna Sheet1. E (Esta columna contiene mi función VLookup, que se muestra arriba):

ingrese la descripción de la imagen aquí

Tengo dificultades para implementar esta función VLookup dentro de mi botón VBA Macro. No quiero que se escriba en las celdas de la columna E.

Este es mi objetivo:

  1. Haga clic en el botón VBA
  2. ejecuta vlookup como se muestra arriba para todos los valores en la columna E Sheet1, según la cantidad de elementos para buscar en la columna B
  3. Convierte los valores de búsqueda en una cadena en la columna E (en lugar de la fórmula)

En resumen, sería muy útil saber cómo convertir una función vlookup escrita en una celda en una función escrita en un botón macro de VBA.

¡Gracias!

Answer

Afortunadamente, VBA ajusta automáticamente las fórmulas cuando las aplica a un rango de varias celdas. Entonces puede aplicar directamente esa fórmula que creó a toda la columna a la vez y no tener que repetir.

Entonces puedes hacer .Value = .Valuepara convertir las fórmulas en cadenas.

Sub Example()
    Dim lastrow As Long
    lastrow = Sheet1.Cells(Sheet1.Rows.Count, 2).End(xlUp).Row
    
    Dim TargetRange As Range
    Set TargetRange = Sheet1.Range("E2:E" & lastrow)
    With TargetRange
        .Formula = "=IFERROR(VLOOKUP(B2&""*"", 'Sheet2'!$AC:$AC, 1, FALSE), ""N/A"")"
        .Value = .Value
    End With
End Sub

LastRow se usa para recortar el rango al área utilizada, ya que VLookUp es costoso y ejecutarlo en una columna completa (incluso las partes vacías) hará perder mucho tiempo.