Macro para unir multiples columnas

Espero que me puedan ayudar con un trabajo para el hospital que me pidieron hacer un listado de insumos, pero los necesito de un formato especial.

Esa es la tabla original, es un listado de insumos en las filas, y en las columnas aparecen unos valores para cada día. Por ejemplo en la columna H se puede ver que el dia 10, se uso la pp 6, con una cantidad de 219,8, y se utilizó 125 jeringas, 16,84 guantes, etc. El listado puede variar en el largo de filas o el largo de columnas.

Yo necesito llevar ese listado a un formato como la tabla de abajo:

En la planilla RESULTADO, la fila Columna A es el mismo valor de la columna C de la tabla original;
la B de resultado es la D original;
la C de resultado es la E original;
la D resultado es la F de la planilla original;
La E de resultado es la H de la original
La F2 de resultado es H2 de la original (el dia), como para todo el primer listado es el mismo dia, todos llevan dia 1 por ejemplo.
La G de resultado es la H1 de la original, en ese caso todos los articulos llevan la misma PP.
Luego en la planilla resultado en la fila 14( puede cambiar la posicion segun el largo o cantidad de articulos), comienza lo mismo pero para el dia 2 y en ese caso tambien vario la PP.
Pueden ser muchos dias (como columnas a lo ancho), o variar la cantidad de articulos (como filas a lo largo). Pero la idea es que al final del listado comience un nuevo dia. Lo ideal es que sea pegado como valor, para evitar el problema de formulas que hay en las celdas.
Creo que en las imagenes se puede ver mas claro, espero que se pueda comprender, le agradeceria mucho su ayuda, porque es muy lento, y tedioso tener que copiar y pegar tantas veces.

1 respuesta

Respuesta
1

Ejecuta la siguiente macro. Actualiza en la macro, el nombre de las hojas "original" y "resultado" por el nombre de tus hojas.

Si tienes algún detalle de formato con alguna columna, simplemente pon el formato que desees en la hoja "resultado".

Sub Unir_Multiples_Columas()
'Por Dante Amor
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long, k As Long, lr As Long, lc As Long
  '
  With Sheets("original")
    lr = .Range("C" & Rows.Count).End(3).Row
    lc = .Cells(1, Columns.Count).End(1).Column
    a = .Range("C6", .Cells(lr, lc)).Value2
    b = .Range("H1", .Cells(2, lc)).Value2
  End With
  ReDim c(1 To lr * lc, 1 To 7)
  '
  For j = 1 To UBound(b, 2)
    For i = 1 To UBound(a, 1)
      k = k + 1
      c(k, 1) = a(i, 1)
      c(k, 2) = a(i, 2)
      c(k, 3) = a(i, 3)
      c(k, 4) = a(i, 4)
      c(k, 5) = a(i, j + 5)
      c(k, 6) = b(2, j)
      c(k, 7) = b(1, j)
    Next i
  Next j
  '
  With Sheets("Resultado")
    .Rows("2:" & Rows.Count).ClearContents
    .Range("A2").Resize(k, 7).Value = c
  End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas