¿Cómo extraer datos de una cadena de texto dependiendo de los valores de un listado con código vba?

Tengo una base de datos con la descripción completa de accesorios y refacciones para carros y lo que necesito es extraer el dato de marca, modelo y año para los que puede funcionar dicha refacción

En la columna P esta la descripción completa con datos de marca, modelo y años y necesito que además de esa columna en la columna R se extraiga la marca, en la columna T se extraiga el modelo y en la columna V el o los años para los que es compatible la pieza y en caso de que no se encuentre dicha información en el texto de la columna P que se rellene con "UNIVERSAL", "VARIOS" y "TODOS LOS AÑOS" respectivamente en la columna que le corresponde.

Tengo una hoja con un listado de las marcas que manejamos y algunos de los modelos dichas listas se están alimentando conforme se expande el mercado al que tenemos alcance; el año varia pero se indica con sus cuatro cifras.

Encontré un procedimiento que me ha ayudado ya que identifica las filas con color dependiendo de la palabra que se escriba, pero quisiera mejorarlo para que en vez de pintar las celdas extraiga el dato a su respectiva columna y en vez de escribir marca por marca o modelo por modelo los busque en los listados que tengo en la hoja de matrices; se los comparto para que me ayuden con este por favor.

Quedo al pendiente de sus amables comentarios...

Sub BUSCATEXTO()

Dim R As Range
Dim TX As String
Dim UFILA As Long
UFILA = ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
TX = InputBox("INGRESA LA MARCA A BUSCAR")
For Each R In Range(ActiveCell.Address, Cells(UFILA, ActiveCell.Column))
If InStr(1, ActiveCell.Value, TX) > 0 Then
ActiveCell.Interior.Color = 65535
End If
Selection.Offset(1).Select
Next R
End Sub

1 Respuesta

Respuesta
1

Te anexo la macro

Sub Actualizar_Datos()
'Por.Dante Amor
    Set h1 = Sheets("CONCENTRADO")
    Set h2 = Sheets("Marcas y modelos")
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        texto = UCase(h1.Cells(i, "A"))
        existemarca = False
        For j = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
            marca = UCase(h2.Cells(j, "A"))
            existemodelo = False
            If InStr(1, texto, marca) > 0 Then
                h1.Cells(i, "C") = marca
                For k = 3 To h2.Cells(j, Columns.Count).End(xlToLeft).Column
                    modelo = UCase(h2.Cells(j, k))
                    If InStr(1, texto, modelo) > 0 Then
                        h1.Cells(i, "E") = modelo
                        existemodelo = True
                        Exit For
                    End If
                Next
                If existemodelo = False Then
                    h1.Cells(i, "E") = "VARIOS"
                End If
                existemarca = True
                Exit For
            End If
            'no encontró marca
            If existemarca = False Then
                h1.Cells(i, "C") = "UNIVERSAL"
            End If
            If existemodelo = False Then
                h1.Cells(i, "E") = "VARIOS"
            End If
        Next
        'encontrar el año
        existeaño = False
        n = 1
        For m = 1 To 3
            guion = InStr(n, texto, "-")
            If guion > 4 Then
                ini = Mid(texto, guion - 4, 4)
                fin = Mid(texto, guion + 1, 4)
                If IsNumeric(ini) And IsNumeric(fin) Then
                    h1.Cells(i, "G") = ini & "-" & fin
                    existeaño = True
                    Exit For
                End If
            End If
            n = guion + 1
        Next
        If existeaño = False Then
            h1.Cells(i, "G") = "N/A"
        End If
    Next
    MsgBox "fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Muchas Gracias Dante!

La macro realiza el trabajo perfectamente, solo una pequeña modificación si fuera posible:

En algunos casos la información de la celda si tiene modelo y no especifican la marca, ¿Crees que se le pueda poner una instrucción para que realice la búsqueda también por modelo y en caso de que lo encuentre lo ponga en su respectiva celda y que la marca aparezca en su celda a partir de ese dato?

De antemano muchas gracias, quedo al pendiente de tus comentarios...

Un fuerte abrazo!

Franco

Tengo que hacer un código específico, para ese caso, podrías crear una nueva pregunta y con todo gusto te ayudo. En el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas