Tengo una columna en excel y me gustaría pasar los datos que contiene a otra hoja dividida en tres columnas.

He volcado una serie de facturas a excel de las que he sacado solo el nombre de "proveedor", "numero de factura" e "importe total", quedando toda esa información en una sola columna como veis en la imagen:

Mi pregunta es como volcar esos datos a otra hoja, pero quedando cada uno en su respectivo lugar y orden en tres columnas como en esta imagen:

4 Respuestas

Respuesta

Lo que puedes hacer es lo siguiente:

1: Seleccionas los datos de la hoja "Garcia Teleso CSV" a partir de la celda A2 hasta la celda A4 que es donde se encuentra el monto.

2. Apretas Ctrl +c para copiar los datos.

3. Vas a la hoja 1 y te posicionas en la celda B2 que es donde iría los datos.

4. Haces clic con el botón secundario del mouse y seleccionas la opción de pegado especial.

5. Activas las siguientes casillas: Valores y trasponer datos.

6. Haces clic en aceptar.

Luego intenta si de esa manera puedes hacerlo pero esta vez seleccionándolos a todos juntos para no tener que ir de grupo en grupo y repites el proceso.

No olvides de comentar y de valorar la respuesta.

Muchas gracias, pero al hacerlo masivo no tiene el mismo efecto y se pegan a lo largo de la misma fila. Tendría que quedarme con 2569 registros, y si lo hago con cortapega tardare siglos...¿habría alguna solución? Gracias!

Ok. No sabía que eran tantos. Mándame el archivo a ver si puedo ayudarte en algo. Mi correo es [email protected]. Saludos

Te lo acabo de mandar, mil gracias!

Perdón por la tardanza pero intenté hacerlo y tampoco lo he conseguido. Investigare mañana y veré si le encuentro la solución.

Respuesta

Al parecer el reporte esta normalizado y se detalla proveedor - FC y Monto, por lo tanto, bastaria con armar un loop con un contador que cuando llegue a 3 se reinicie y pase a la siguiente linea.

Te envio la macro que se adapta a tus necesidades

Sub Macro2()
' Written by Juan Manuel Cosceri (25-01-2018)
Set DataSH = Sheets("Sheet1")
Set ConsolidatedSH = Sheets("Sheet2")
HR = 1
LR = DataSH.Cells(Rows.Count, 1).End(xlUp).Row
ConsolidatedLR = ConsolidatedSH.Cells(Rows.Count, 2).End(xlUp).Row
Looper = HR + 1
Do Until Looper > LR
        contador = 1
        Do Until contador > 3
        Variable = DataSH.Cells(Looper, 1).Value
        If contador = 1 Then
        ConsolidatedLR = ConsolidatedSH.Cells(Rows.Count, 2).End(xlUp).Row
        ConsolidatedSH.Cells(ConsolidatedLR + 1, 2).Value = Variable
        ElseIf contador = 2 Then
        factura = Left(Variable, 6)
        ConsolidatedSH.Cells(ConsolidatedLR + 1, 3).Value = factura
        ElseIf contador = 3 Then
        ConsolidatedSH.Cells(ConsolidatedLR + 1, 4).Value = Variable
        End If
        Looper = Looper + 1
        contador = contador + 1
        Loop
Loop
'
End Sub

Por favor recuerda valorar la respuesta!

Slds

Juan

Una salvedad que debes hacer es reemplazar

Set DataSH = Sheets("Sheet1")
Set ConsolidatedSH = Sheets("Sheet2")

Por

Set DataSH = Sheets("Garcia Tereso CSV")
Set ConsolidatedSH = Sheets("Hoja1")

Esas variables definen la hoja en la que estas trabajando, por lo tanto deben coincidir DataSh con tu base y Consolidated con la hoja del Output.

Por favor recuerda valorar la respuesta!

Slds

Juan

Respuesta

Maik Graina,

Considerando que la estructura de la 3 primeras celdas es igual al resto de celdas, es decir proveedor, número de factura e importe, y se encuentren de forma continua sin ninguna celda vacía; una alternativa para poder armar una tabla con 3 columnas es la siguiente:

1. En la columna B, en B2 asignarle la letra "A", en B3 asignarle la letra "B" y en B4 asignarle la letra "C". Una vez asignada, rellenar el resto de celdas de la columna B arrastrando hacia abajo (o sino haciendo doble clic en el punto que se ubica en la parte inferior izquierda del rango seleccionado) el rango B2:B4 seleccionado, así como se muestra la imagen.

2. Una vez que se rellena con las letras A, B y C la columna B, se pasa insertar un filtro a la nueva tabla.

3. Se filtra por la letra A para obtener todo los nombres de proveedores, se pasa a copiar y se pega en otra hoja; y así se realiza con el resto de letras para obtener los números de facturas y los importes.

Y Listo tienes la tabla con las 3 columnas.

Espero te sirva de ayuda. Cualquier consulta estaré atento.

Por favor, no olvidar de valorar las respuestas.

Respuesta

Ejecuta la siguiente macro

Si los datos están como pusiste las imágenes, en la hoja1 tendrás el resultado

Sub Facturas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("GARCIA TERESO CSV")        'hoja origen
    Set h2 = Sheets("Hoja1")                    'hoja destino
    h2.Range("B2:D" & Rows.Count).ClearContents
    j = 2
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row Step 3
        h2.Range("B" & j & ":D" & j) = WorksheetFunction.Transpose(h1.Range("A" & i & ":A" & i + 2))
        j = j + 1
    Next
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Facturas
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Sal u dos. Dante Amor

R ecuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas