Macro para que una celda asuma el valor de otra tabla en excel

Hola jamesbond Gracias a ti y a @Sebastian  he podido ir construyendo una aplicación en Excel para mi empresa, que va capturando a través de un scanner las maletas que se van chequeando en cada vuelo. Nuevamente recurro a tu ayuda porque aunque he creado una condición (Right(B2, 9) que me permite obtener el numero original del Bagtag (Esta columna estará escondida). A partir de ella obtengo en otra columna el prefijo de la aerolínea (LEFT(G:G, 3) que también estará escondida. Necesito que esta ultima columna que me da el prefijo busque la tabla que esta al lado, las coincidencias y de haberla, me asigne a la columna aerolínea el código que la identifica... Un poquito complicado pero te pongo capturas para que entiendas mejor... Igual, existe algún código en VBA para que estas fórmulas de Right y left se automaticen en el libro. Cada vez que hago alguna limpieza de duplicados, me elimina las fórmulas (para mi es mejor que este dentro de visual basic). Inifinitamente agradecido por tu ayuda siempre, Yosvanys

1 Respuesta

Respuesta
1

Este es el resultado de la macro

y esta es la macro

Sub BUSCAR_PREFIJOS()
Set datos = Range("B2").CurrentRegion
Set tabla = Range("F2").CurrentRegion
With datos
    F = .Rows.Count: C = .Columns.Count
    Set datos = .Rows(2).Resize(F - 1, C)
    .Columns(2).NumberFormat = "000000000"
    .Columns(3).NumberFormat = "000"
    For i = 1 To F - 1
       BAGTAG = .Cells(i, 2)
       If Len(BAGTAG) < 9 Then izq = Left(BAGTAG, 1)
       If Len(BAGTAG) >= 9 Then izq = Left(BAGTAG, 3)
       .Cells(i, 3) = izq
        busca = WorksheetFunction.Match(Val(izq), tabla.Columns(2), 0)
        .Cells(i, 1) = tabla.Cells(busca, 1)
    Next i
End With
Set datos = Nothing
End Sub

Gracias James. He hecho los cambios acorde a la estructura de mi Base de Datos y me da varios errores. Te adjunto una captura de pantalla de mi base de datos y quizás puedas detectar el error que me da... He adicionado en las columnas "I" y "J" la tabla donde están los códigos de las aerolíneas, aunque tengo creada una hoja para ello que se llama Prefix. Te agradezco infinitamente tu ayuda, no imaginas cuanto aprendo contigo. Yosvanys

No especificas que tipo de errores te marca, le hice algunos cambios a la macro y el resultado es el que ves en la imagen, supose que la parte que te daría problemas es el largo del bagtag que en el ejemplo que pusiste varia de 7 a 10 caracteres lo cual a la hora de extraer los caracteres a la derecha si no estuvieran los IFs en lugar de sacar el 2 sacaría 272 o si tuvieras un 00666838 en vez de extraer el 6 extraería 666, y la lista esta incompleta en todos los casos ninguno de los códigos extraídos coincide con los de la lista que por cierto programe para que los extrajera de la hoja prefix

y esta es la macro modificada

Sub PONER_AIRLINES()
Set H2 = Worksheets("PREFIX")
Set datos = Range("A1").CurrentRegion
Set lista = H2.Range("A1").CurrentRegion
With datos
    F = .Rows.Count: C = .Columns.Count
    For I = 2 To F
        BAGTAG = .Cells(I, 2)
        LARGO = Len(BAGTAG)
        If LARGO < 9 Then IZQUIERDA = Val(Left(BAGTAG, 1))
        If LARGO >= 9 Then IZQUIERDA = Val(Left(BAGTAG, 3))
        .Cells(I, C) = IZQUIERDA
        On Error Resume Next
        FILA = WorksheetFunction.Match(IZQUIERDA, lista.Columns(2), 0)
        If Err.Number > 0 Then
            .Cells(I, C - 1) = "NO EXISTE AIRLINE"
        Else
            .Cells(I, C - 1) = lista.Cells(FILA, 1)
        End If
        On Error GoTo 0
    Next I
End With
Set datos = Nothing: Set lista = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas