将单个列转置为多行

时间:2012-11-30 21:43:47

标签: excel vba transpose

我有一列数据,大约有800条记录。每18个细胞是一个记录。我需要一个脚本,每18个单元格并将它们动态转换成一行,甚至可以编写excel公式来将每18个记录从列转换为行。

2 个答案:

答案 0 :(得分:1)

你可能会被问到“你有什么尝试”,因为你最好有一个bash,并询问你什么时候被卡住而不是要求一个完整的解决方案。话虽如此,我可以为您提供一些帮助您入门的提示。

要在VBA中执行此操作,您需要执行一个循环,该循环从第一个单元格开始,获取由该单元格和后面的18行组成的范围,然后将其粘贴到(可能)工作簿中的另一个工作表中,并将其转换为一列到一行。然后循环将偏移19个单元格并重新开始。

看看我在这个帖子中给出的答案: Unable to write a Macro for Excel VBA to copy a specific cell value to the next blank rows

这将为您提供执行循环的语法,该循环与您的类似。

要获取进行粘贴/转置的语法,请手动执行并使用宏录制器记录您的操作。这可以在Developer选项卡上找到。 (如果您没有显示开发人员选项卡,请转到文件 - >选项 - >自定义功能区并在其中启用“开发人员”选项卡。)

尝试一下,如果你发现你不能完全发挥作用,只需再次贴上你被卡住的详细信息。

答案 1 :(得分:0)

您可以使用此VBA代码来实现此目的。

    Public Sub TransposePaste()
   'Value we want to step by....
    Dim stepVal As Long
    stepVal = 18
'Declare start row variable (-1)
 Dim row As Long
 row = 0

'Declare the column the data is coming from
Dim col As Long
col = 1

'Declare and set worksheet
Dim ws As Worksheet
Set ws = Sheet1

'end row of the data
Dim endRow As Long


endRow = ws.Cells(ws.Rows.Count, col).End(xlUp).row

'cycle to end of data end of data...
For i = 1 To endRow Step stepVal

'increment row each time
row = row + 1

    'cycle through the columns outputting the data
    For j = 1 To stepVal

    Sheet1.Cells(row, j).Value = Sheet1.Cells(i + j - 1, col).Value

    Next j
Next i

End Sub