我有一列数据,大约有 800 条记录。每 18 个单元格是一个记录。我需要一个脚本,它需要每 18 个单元格并将它们动态地转置为一行,甚至需要一种编写 excel 公式的方法,将每 18 个记录从列转置为行。
问问题
4736 次
2 回答
1
您可能会被问到“您尝试过什么”,因为您最好在遇到困难时询问您何时遇到困难,而不是要求提供完整的解决方案。话虽如此,我可以为您提供一些提示以帮助您入门。
要在 VBA 中执行此操作,您需要执行一个循环,该循环从第一个单元格开始,获取由该单元格和以下 18 行组成的范围,然后将其粘贴到(可能)工作簿中的另一个工作表中,将其从列转置到一排。然后循环将偏移 19 个单元格并重新开始。
看看我在这个线程中给出的答案: 无法为 Excel VBA 编写宏以将特定单元格值复制到下一个空白行
这将为您提供与您的循环有些相似的语法。
要获得进行粘贴/转置的语法,请手动执行并使用宏记录器记录您的操作。这可以在“开发人员”选项卡上找到。(如果您没有看到“开发人员”选项卡,请转到“文件”->“选项”->“自定义功能区”,然后打开“开发人员”选项卡。)
试一试,如果你发现你不能让它工作,只需再次发布你遇到问题的详细信息。
于 2012-11-30T21:54:59.083 回答
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
结束子
于 2017-05-13T16:35:01.817 回答