Duda con colocar horizontal una base de datos en excel

Disculpen que los moleste quisiera ver si me pueden ayudar con una situación que tengo.

Tengo un excel con 77000 mil renglones, la cosa es que vienen en vertical y necesito que vengan en horizontal, les explico, tengo una base de datos en la cual vienen empleados con conceptos de algunas nominas, la cuestión que vienen diferentes lugares los conceptos dependiendo el empleado. Y estoy tratando de colocarlos conforme los va encontrando del empleado coloque el importe en el cual corresponde en base al concepto y si en un empleado no tiene le concepto coloque un 0 o nada, no se si me explique,

Adjunto un ejemplo de como quedaría la base de datos

https://we.tl/t-wopfOWdf2C 

Ya intente ponerlos pero aun no puedo colocarlos de forma bien.

2 Respuestas

Respuesta
1

Es un poco laborioso lo que pides, basado en el archivo que subiste esta es la macro que ocupas, coloca la tabla transpuesta a partir de la columna j

Option Base 1
Sub EJECUTA()
Application.ScreenUpdating = False
INICIO = Time
CONCATENAR
CREA_TABLA
RELLENA_TABLA
FIN = Time
tiempo = FIN - INICIO
Application.ScreenUpdating = True
MsgBox ("TIEMPO DE PROCESO " & Minute(tiempo) & " minutos:" & Second(tiempo) & " segundos")
End Sub
Sub CONCATENAR()
Dim FUNCION As WorksheetFunction
Set FUNCION = WorksheetFunction
Set DATOS = Range("A1").CurrentRegion
With DATOS
    R = .Rows.Count: C = .Columns.Count
    Set DATOS = .Rows(2).Resize(R - 1, 3)
    Set TABLA = .Columns(C + 1).Resize(R, 1)
    matriz = TABLA
    ReDim MATRIZ2(3)
    For i = 1 To R
        fila = .Rows(i)
        For j = 1 To 3
            MATRIZ2(j) = fila(1, j)
        Next j
        matriz(i, 1) = Join(MATRIZ2)
    Next i
    Range(TABLA.Address) = matriz
    .CurrentRegion.Name = "DATOS"
End With
Erase matriz
Set TABLA = Nothing: Set DATOS = Nothing
Set FUNCION = Nothing
End Sub
Sub CREA_TABLA()
Dim FUNCION As WorksheetFunction
Set FUNCION = WorksheetFunction
Set DATOS = Range("DATOS")
With DATOS
    R = .Rows.Count: C = .Columns.Count
    .Sort KEY1:=Range(.Columns(1).Address), ORDER1:=xlAscending, Header:=xlYes
    .Columns(C + 3).ClearContents
    Set TABLA = .Columns(C + 3).Resize(R, 4)
End With
With TABLA
    .Columns(1).Value = DATOS.Columns(C).Value
    .Columns(2).Resize(R, 3).Value = DATOS.Columns(1).Resize(R, 3).Value
    .RemoveDuplicates Columns:=1
    Set TABLA = .CurrentRegion
    R1 = .Rows.Count: C1 = .Columns.Count
    Set tabla2 = .Columns(C1 + 2).Resize(R, 1)
End With
With tabla2
    .Columns(1).Value = DATOS.Columns(4).Value
    .RemoveDuplicates Columns:=1
    Set tabla2 = .CurrentRegion
    R2 = .Rows.Count
    matriz = tabla2
    .ClearContents
    .Cells(1, 0).Resize(1, R2) = FUNCION.Transpose(matriz)
    .Columns(0).EntireColumn.Delete
    .CurrentRegion.EntireColumn.AutoFit
    .CurrentRegion.Name = "TABLA"
End With
Erase matriz
Set TABLA = Nothing: Set DATOS = Nothing: Set tabla2 = Nothing
Set FUNCION = Nothing
End Sub
Sub RELLENA_TABLA()
Dim FUNCION As WorksheetFunction
Set FUNCION = WorksheetFunction
Set TABLA = Range("TABLA")
Set DATOS = Range("DATOS").CurrentRegion
With DATOS
    CD = .Columns.Count
End With
With TABLA
    R = .Rows.Count - 2: C = .Columns.Count - 4
    Set tabla2 = .Cells(2, 5).Resize(R, C)
    matriz = tabla2
    For i = 1 To R
        NOMBRE = .Cells(i, 1)
        CUENTA = FUNCION.CountIf(DATOS.Columns(CD), NOMBRE)
        If CUENTA = 0 Then GoTo SIG
        fila = FUNCION.Match(NOMBRE, DATOS.Columns(CD), 0)
        Set info = DATOS.Rows(fila).Resize(CUENTA)
        For j = 1 To CUENTA
            concepto = info.Cells(j, 4)
            Total = info.Cells(j, 5)
            fila2 = FUNCION.Match(concepto, tabla2.Rows(0), 0)
            matriz(i - 1, fila2) = Total
        Next j
SIG:
    Next i
    With tabla2
        Range(.Address) = matriz
        .NumberFormat = "0.00"
    End With
End With
DATOS.Columns(CD).ClearContents
TABLA.Columns(1).ClearContents
Erase matriz
Set DATOS = Nothing: Set TABLA = Nothing:
Set tabla2 = Nothing: Set FUNCION = Nothing
End Sub
Respuesta
1

Un poco confusa me parece tu explicación, pero vamos a ver:

En primer lugar, la hoja Excel siempre va a salir así, o sea los números de fila 1-2-3-4. Etc... a la izquierda y arriba letras en las columnas A B C D. Así que cualquier cosa que hagas has de configurarla para ese formato. Otra cosa es a la hora de imprimir, que puede ser en vertical o apaisado.

He visto el ejemplo que has puesto y me parece bastante bien. Lo que podrías hacer para una rápida localización del empleado es ordenar los nombres alfabéticamente. Así rápidamente encontrarías al interesado y se rellenaría en la casilla correspondiente los datos que se quieran poner.

Bueno, no se si era eso lo que querías, si no, amplia datos. Si no sabes ordenar alfabéticamente, teclea en el buscador de tu navegador: "Ordenar en Excel listas alfabéticamente y saldrán vídeos, que también hay en Youtube explicándolo muy bien.

hola, el excel asi saldria siempre, se supone que ya esta ordenado alfabéticamente, la cuestión que en la pestaña de prueba asi es el excel que se maneja con el nombre repetido pero con concepto diferente, la cuestion es que en la hoja que necesito se llenen los importes conforme a los conceptos que estan en la hoja de prueba, no se si me explico.

Lo que necesito es saber si hay alguna formula o método para mandar los importes en la hoja que esta horizontal por todos los empleados, que se llenen conforme al concepto que tiene asignado el empleado y si alguno de los empleados no tienen algún concepto se coloque 0.

Lo se es confuso :c y disculpa

A ver si lo he entendido ahora: En el libro Excel, que consta de dos hojas, la primera "PRUEBA" y la segunda" COMO QUEDARÍA" tu quieres que al ir rellenando la hoja "PRUEBA" con los conceptos uno debajo de otro verticalmente, los valores se vayan colocando automáticamente en su sitio en la hoja "COMO QUEDARÍA". En sentido horizontal.

Pues bien: Se puede hacer, para ello habría que colocar una fórmula en las casillas "COMO QUEDARÍA" que llamaran a los valores de la hoja "PRUEBA" de tal modo, que conforme vayas poniéndolos en la hoja 1 aparezcan en la hoja 2.

Pero para que funcione, tendrías que colocar siempre los trabajadores en el mismo orden, y al poner los conceptos también, puesto que si los cambias, la fórmula, como solo reconoce el nombre de la casilla, ejemplo: A1 y no su contenido, te lo cambiaría. ¿Me he explicado?.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas