1. AyudaExcel utiliza cookies. Si continuas utilizando AyudaExcel, estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

[SOLUCIONADO]buscarv en codigo vb

Tema publicado en 'Macros y programación VBA' iniciado por erickarciga, 25 Sep 2010.

  1. erickarciga

    erickarciga Usuario

    Registrado:
    29 Ene 2010
    Mensajes:
    63
    Me Gusta recibidos:
    0
    Hola expertos!

    gracias por su ayuda

    Espero me puean ayudar con lo siguiente:

    Tengo un archivo con 3 hojas

    En la hoja6 tengo en la columna A el numero de empleado y en la hoja5 y hoja4 tengo datos de su nomina.

    Lo que busco que haga la macro es que todos los datos de las hojas 5 y 4 se pasen por medio de la formula buscarv a la hoja 6 de acuerdo a los datos de los nombres de los encabezados de cada columna.

    ya lo hago por medio de esta formula

    ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-7],Hoja5!C[-7]:C[-6],2,0)"

    sin embargo tengo que escribir muchas veces el codigo de vb por cada celda, lo malo es que tengo bases de hasta 6000 registros.

    alguien me puede ayudar para ver si hay alguna solucion mejor

    Anexo archivo.

    Adjuntos:

  2. erickarciga

    erickarciga Usuario

    Registrado:
    29 Ene 2010
    Mensajes:
    63
    Me Gusta recibidos:
    0
    Perdon se me olvido mencionar que el buscarv si no encuentra el dato coloque "ACTUALIZAR" en la celda.

    Gracias!!
  3. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.531
    Me Gusta recibidos:
    297
    Buenas bajo que criterio se deben de ordenar en la hoja 6 es decir en que fila se deben de colocar los datos es por el número de la columna A?

    un saludo
  4. erickarciga

    erickarciga Usuario

    Registrado:
    29 Ene 2010
    Mensajes:
    63
    Me Gusta recibidos:
    0
    Hola Logroastur!

    La columna A es la que servira para identificar los datos en las demas columnas, es decir es el valor que estoy buscando en las demas hojas

    Ejemplo

    Si en la celda A2 esta el valor 1, buscara en la hoja5 ese valor bajo el titulo "TRANSACTION_NO" y lo colocará en hoja6 celda h2 bajo el titulo "TRANSACTION_NO"

    Gracias!
  5. logroastur

    logroastur Incondicional de Ayuda Excel

    Registrado:
    10 Oct 2009
    Mensajes:
    2.531
    Me Gusta recibidos:
    297
    Buenas prueba con el siguiente codigo

    CÓDIGO:
    Sub paso_datos()
    Application.ScreenUpdating = False
    Dim myrange As Range, myrange1 As Range, myrange2 As Range, myrange3 As Range
    Dim dat, dat1, x, y
    x = Sheets("Hoja6").Range("A" & Rows.Count).End(xlUp)(2).Row
    Set myrange = Sheets("Hoja4").Range("A:A")
    Set myrange1 = Sheets("Hoja4").Rows("1:1")
    Set myrange2 = Sheets("Hoja5").Range("A:A")
    Set myrange3 = Sheets("Hoja5").Rows("1:1")
    For y = 8 To 11
        Sheets("Hoja6").Cells(2, y).Select
        While ActiveCell.Row < x
            dat = Sheets("Hoja6").Range("A" & ActiveCell.Row)
            dat1 = Sheets("Hoja6").Cells(1, y)
            If WorksheetFunction.CountIf(myrange2, dat) <> 0 And WorksheetFunction.CountIf(myrange3, dat1) <> 0 Then
                fil = WorksheetFunction.Match(dat, myrange2, 0)
                col = WorksheetFunction.Match(dat1, myrange3, 0)
                If Sheets("Hoja5").Cells(fil, col) <> 0 Then
                    ActiveCell = Sheets("Hoja5").Cells(fil, col)
                    ActiveCell.Offset(1, 0).Select
                Else
                    ActiveCell = "ACTUALIZAR"
                    ActiveCell.Offset(1, 0).Select
               End If
            Else
                    ActiveCell = "ACTUALIZAR"
                    ActiveCell.Offset(1, 0).Select
            End If
        Wend
    Next y
    For y = 12 To 18
        Sheets("Hoja6").Cells(2, y).Select
        While ActiveCell.Row < x
            dat = Sheets("Hoja6").Range("A" & ActiveCell.Row)
            dat1 = Sheets("Hoja6").Cells(1, y)
            If WorksheetFunction.CountIf(myrange, dat) <> 0 And WorksheetFunction.CountIf(myrange1, dat1) <> 0 Then
                fil = WorksheetFunction.Match(dat, myrange, 0)
                col = WorksheetFunction.Match(dat1, myrange1, 0)
                If Sheets("Hoja4").Cells(fil, col) <> 0 Then
                    ActiveCell = Sheets("Hoja4").Cells(fil, col)
                    ActiveCell.Offset(1, 0).Select
                Else
                    ActiveCell = "ACTUALIZAR"
                    ActiveCell.Offset(1, 0).Select
               End If
            Else
                    ActiveCell = "ACTUALIZAR"
                    ActiveCell.Offset(1, 0).Select
            End If
        Wend
    Next y
    
    Set myrange = Nothing
    Set myrange1 = Nothing
    Set myrange2 = Nothing
    Set myrange3 = Nothing
    Application.ScreenUpdating = True
    End Sub
    
    
    un saludo
    Última edición: 25 Sep 2010
  6. digitalboy

    digitalboy Usuario Activo

    Registrado:
    28 Jul 2008
    Mensajes:
    446
    Me Gusta recibidos:
    44
    Género:
    Masculino
    Ingenioso el codigo de logroastur... mas se me hace dificel de entender, ademas de que es lento y eso que lo ejecute usando Excel 2007 el cal hace uso del procesador de doble nucleo para ganar velocidad, no quiero pensar que pasara en el 2003 y suponiendo que se tratara de 1000 registros...

    Propongo la siguiente modificacion: (no es la mejor, pero es mas claro, sencillo y rapido, por lo menos en el 2007)

    CÓDIGO:
    Sub Macro1()
    Sheets("hoja6").Select
    
        Range("H2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja5!R1C1:R90C6,2,0)"
        Range("I2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja5!R1C1:R90C6,4,0)"
        Range("J2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja5!R1C1:R90C6,5,0)"
        Range("K2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja5!R1C1:R90C6,6,0)"
        Range("L2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,2,0)"
        Range("M2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,3,0)"
        Range("N2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,4,0)"
        Range("O2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,5,0)"
        Range("P2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,6,0)"
        Range("Q2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,7,0)"
        Range("R2").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Hoja4!R1C1:R90c8,8,0)"
        
    fila = Range("a6500").End(xlUp).Row
    Range("h2:r2").AutoFill Range("h2:r2", "h" & fila & ":" & "r" & fila)
    Cells.Copy
    Cells.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    End Sub
    
    
    aun que claro no me encargue de programar la parte de actualizar eso, ya lo dejo en tus manos...

    Suerte!
  7. erickarciga

    erickarciga Usuario

    Registrado:
    29 Ene 2010
    Mensajes:
    63
    Me Gusta recibidos:
    0
    logroastur, digitalboy muchisimas gracias.!.!.! ambos funcionan a la perfeccion gracias por el tiempo invertido en ayudarme

Compartir esta página