Excel extraer según matriz de datos

Estoy necesitando ayuda :D

Tengo una tabla con muchas filas de datos ej,

Led smart TV Noblex 32'' HD DM32X7000 Android TV
Led smart Philips 32'' HD 32PHD6825/77
Necesito extraer en otras columnas cada dato, "marca", "modelo" "producto".
Se me ocurrió hacerlo con matriz de datos ej.
Tabla Marca: "Phillips", "Noblex", etc (y todo el resto de marcas)
Tabla Modelo: "MD32X7000", "PHD6825/77", etc. (y todo el resto de modelos)

Y necesito una o varias funciones que busquen en la matriz de datos dentro de la celda y extraigan, si contiene "Phiplips" o "Noblex" por ejemplo.
Logre hacer algo con VBA con esta sentencia con filtros "contiene":
ActiveSheet.Range("$A$5:$M$700").AutoFilter 3, Array("=*Noblex*"), xlFilterValues
_
Range("C600").Select
Selection.Offset(0, 9).Select
Range(Selection, Selection.End(xlUp)).Select
Range(Selection, Selection.End(xlUp)).Select
ActiveCell.FormulaR1C1 = "Noblex"
Selection. FillDown
Pero necesito que sea con matriz de datos ya que algunas marcas y productos pueden variar y entrar cada vez a VBA a cambiar los parámetros es muy molesto-.
¿Esto es posible? ¿O existe alguna otra manera?

1 Respuesta

Respuesta
2

Pon tus marcas en la columna L y los modelos en la columna M:

Prueba con la siguiente macro, si tus datos empiezan en la celda A5, los resultados en B y C.

Sub Marca_Model()
'Por Dante Amor
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long
  a = Range("A5:C" & Range("A" & Rows.Count).End(3).Row).Value
  b = Range("L2:M" & ActiveSheet.Range("L:M").Find("*", , xlValues, , xlByRows, xlPrevious).Row).Value
  For i = 1 To UBound(b)
    For j = 1 To UBound(a, 1)
      If b(i, 1) <> "" And InStr(1, a(j, 1), b(i, 1), vbTextCompare) Then a(j, 2) = b(i, 1)
      If b(i, 2) <> "" And InStr(1, a(j, 1), b(i, 2), vbTextCompare) Then a(j, 3) = b(i, 2)
    Next
  Next
  Range("A5").Resize(UBound(a, 1), 3).Value = a
End Sub

¡Gracias!
Ufff... me has salvado! No se de donde eres pero en lo que pueda colaborarte aquí estoy.
Un abrazo y gracias nuevasmente

Disculpa las molestias Dante...
Hay posibilidad que me escribas nuevamente el código, ¿pero solo con Marcas?

Ya que me di cuenta que luego tengo que hacer un reemplazar valores. Y si lo tengo separado, ya se como hacer el resto.
Mil gracias nuevamente!

Con todo gusto te sigo ayudando.

Al final de mi respuesta hay un botón para valorar. Opciones Excelente y Votar.

¡Gracias Dante! Si ya voté como excelente!

Si no es molestia de pasarme solo el código por una columna seria fantástico.

Gracias nuevamente

Va la macro para marcas:

Sub Solo_Marca()
'Por Dante Amor
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long
  a = Range("A5:B" & Range("A" & Rows.Count).End(3).Row).Value
  b = Range("L2:L" & ActiveSheet.Range("L:L").Find("*", , xlValues, , xlByRows, xlPrevious).Row).Value
  For i = 1 To UBound(b)
    For j = 1 To UBound(a, 1)
      If InStr(1, a(j, 1), b(i, 1), vbTextCompare) Then a(j, 2) = b(i, 1)
    Next
  Next
  Range("A5").Resize(UBound(a, 1), 2).Value = a
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas