Entonces tomé este código VBA...
Sub NewLayout()
For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
For j = 0 To 2
If Cells(i, 3 + j) <> vbNullString Then
intCount = intCount + 1
Cells(i, 1).Copy Destination:=Cells(intCount, 10)
Cells(i, 2).Copy Destination:=Cells(intCount, 11)
Cells(i, 3 + j).Copy Destination:=Cells(intCount, 12)
Cells(i, 6 + j).Copy Destination:=Cells(intCount, 13)
End If
Next j
Next i
End Sub
Tengo el siguiente escenario a continuación y no consigo que la macro funcione correctamente (ya que no estoy acostumbrado a codificar nada). He estado intentando descifrar el código anterior, pero simplemente no tiene sentido cómo funcionan las columnas en ese orden. ¿Alguien puede ayudar?
tengo estos datos
Company Code Store1 Store Hours1 Store2 Store Hours2 Store3 Store Hours3
90 920016 BAY0 40 BCR0 35 BES0 20
90 920052 BAY0 40 BCR0 35 BES0 20
90 920054 BAY0 40 BCR0 35 BES0 20
90 920058 BAY0 40 BCR0 35 BES0 20
Necesito tener las columnas en una fila de la siguiente manera:
90 920016 BAY0 40
90 920016 BCR0 35
90 920016 BES0 20
90 920052 BAY0 40
90 920052 BCR0 35
90 920052 BES0 20
90 920054 BAY0 40
90 920054 BCR0 35
90 920054 BES0 20
¿Quizás alguien pueda ayudar con esto?
Respuesta1
Entonces, en lugar de intentar hacer cálculos, avancemos cada 2 en las columnas comenzando con la tercera columna. Esto simplifica un poco las matemáticas:
Sub NewLayout()
Dim ws As Worksheet
Dim i As Long, j As Long
Dim intCount As Long
For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
For j = 3 To 7 Step 2
If Cells(i, j) <> vbNullString Then
intCount = intCount + 1
Cells(i, 1).Copy Destination:=Cells(intCount, 10)
Cells(i, 2).Copy Destination:=Cells(intCount, 11)
Cells(i, j).Copy Destination:=Cells(intCount, 12)
Cells(i, j + 1).Copy Destination:=Cells(intCount, 13)
End If
Next j
Next i
End Sub