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