Trasponer datos con macro

Buenos días,
tengo una hoja de calculo llamada base de datos donde tengo los datos de la siguiente forma
cliente nit manodeobre repuest1 unid1 cant1 valorunit1 repuest2 unid2 cant2 valorunit2
y así los datos hasta el repuesto 9
En la hoja detalle necesito que me ubique los datos de la siguiente forma por medio de una macro
cliente nit manodeobra repuesto unidad cantidad valorunitario
seria el mismo cliente nit manodeobra a medida que va ubicando los repuestos hacia abajo
al finalizar el detalle me debe sumar el valor unitario de todo al final de la columna donde terminan los datos
espero haberme hecho entender aquí pongo el ejemplo
Hoja base de datos
cliente nit  MdeO VMO  repue1 unid1 cant1 valorU1 repue2 unid2 cant2 valorunit2...
Juan 358 4 500 plata hr 5 3000 plomo unid 7 40000
pedro 575 8 300 cobre kg 6 7584 azufre gr 8 45455
Hoja Detalle
Cliente nit repuesto unidad cantidad valorunitario
Juan 358 manodeO hr 4 500
Juan 358 plata hr 5 3000
Juan 358 plomo und 7 40000
pedro 575 manodeO Hr 8 300
Pedro 575 cobre kg 6 7584
Pedro 575 azufre gr 8 45455
                                                                  Total automáticamente
espero haber sido clara
Nota los repuestos en la base de datos pueden ir hasta el repuesto 9
Muchas gracias

1 respuesta

Respuesta
1
Si se puede hacer lo que quieres con una macro solo que tengo una duda en tu planteamiento, en ambos clientes mencionas esta palabra manodeO ¿de dónde sacas ese dato? ¿También está en tu base de datos? Porque por lo que veo no es un repuesto. ¿Me lo podías aclarar
En la hoja bd aparece MdeO que en detalle seria la cantidad, aparece VMO que en detalle seria el valor unitario, en unidad siempre va hr, y en el hombre de repuesto seria Mano de Obra. Lo duro que veo en este caso es que no tiene el nombre de Mano de obra como los repuestos que tienen su nombre, el nombre mano de obra tendría que ser automático.
¿No se si fui clara?
Ufff.. un poquito difícil de resolver tu caso, pero finalmente quedó así que aquí tienes el código, solo cópialo y pégalo en el editor VBA de tu archivo, algo importante que tienes que observar es que las hojas yo las llamé "BD" a la base de datos y "Detalle" a la hoja donde te dará los resultados por lo tanto tus hojas debe llamarse (igualito respetando mayúsculas) así o bien debes modificar dentro del código el nombre de las hojas, ahí te puse unas anotaciones donde debes modificar para que la macro no te marque error, si lo modificas, hazlo solo con lo que aparece entre comillas. Suerte
Sub transponer()
    Sheets("BD").Select 'si tu hoja no se llama asi adaptala al nombre que tienes
    Range("A2").Select
    Do While ActiveCell.Value <> ""
        cliente = ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
        nit = ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
        mdo = ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
        vmo = ActiveCell.Value
        Sheets("Detalle").Select  'si tu hoja no se llama asi adaptala al nombre que tienes
        Range("A2").Select
        Do While ActiveCell.Value <> ""
            ActiveCell.Offset(1, 0).Select
        Loop
        ActiveCell.Value = cliente
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = nit
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = "ManodeO"
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = "hr"
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = mdo
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = vmo
        Sheets("BD").Select 'si tu hoja no se llama asi adaptala al nombre que tienes
        Do While ActiveCell.Value <> ""
            ActiveCell.Offset(0, 1).Select
continuar:
            rep = ActiveCell.Value
            ActiveCell.Offset(0, 1).Select
            unid = ActiveCell.Value
            ActiveCell.Offset(0, 1).Select
            cant = ActiveCell.Value
            ActiveCell.Offset(0, 1).Select
            valor = ActiveCell.Value
            Sheets("Detalle").Select 'si tu hoja no se llama asi adaptala al nombre que tienes
            Range("A2").Select
            Do While ActiveCell.Value <> ""
                ActiveCell.Offset(1, 0).Select
            Loop
            ActiveCell.Value = cliente
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = nit
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = rep
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = unid
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = cant
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = valor
            Sheets("BD").Select 'si tu hoja no se llama asi adaptala al nombre que tienes
            ActiveCell.Offset(0, 1).Select
            If ActiveCell.Value <> "" Then
                GoTo continuar
            End If
        Loop
        Sheets("BD").Select 'si tu hoja no se llama asi adaptala al nombre que tienes
        ActiveCell.Offset(0, -2).Select
        ActiveCell.End(xlToLeft).Select
        ActiveCell.Offset(1, 0).Select
    Loop
        Sheets("Detalle").Select 'si tu hoja no se llama asi adaptala al nombre que tienes
        Range("A1").Select
        ActiveCell.Offset(0, 5).Select
        ActiveCell.End(xlDown).Select
        ActiveCell.Offset(2, 0).Select
        strRango = "=SUMA(F2:"
        strRango = strRango & ActiveCell.Offset(-1, 0).Address(False, False)
        strRango = strRango & ")"
        ActiveCell.FormulaLocal = strRango
        ActiveCell.Offset(0, -1).Select
        ActiveCell.Value = "Total"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas