有人可以帮助您在Excel中将数据表转换为垂直列表吗?
我试过使用一个宏,但它一直在绊倒,我不知道我哪里出错了。
我正在下载一个大型数据表,但是需要将该数据放入工作表中另一个宏的列表中。由于有多少数据,手动执行它是不切实际的,所以我想知道是否有一个快速的方法。
提前致谢!
答案 0 :(得分:1)
您可以在单个公式中执行此操作。假设你有一个看起来像这样的电子表格(我已经放入了显示单元格位置的虚拟数据,所以你可以看到它最终的位置):
在另一个单元格(或其他表格)中放入以下公式:
=OFFSET($A$1,INT((ROW(1:1)-1)/8),(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8))
公式中的两个8是因为工作表有8列,如果它有或多或少,你会将这8个更改为电子表格的列数。
然后你复制公式,你得到这个:
它的工作原理是因为它使用偏移公式,它使用行和列引用获取单元格的内容。
INT((ROW(1:1)-1)/8)
此部分确保行数不会从1移动到2等,直到创建新公式的8行为止,为8列复制空间。
(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8)
这一部分采用了列,并且每行向下加1,直到我们在MOD函数返回0时到达第8列并在原始工作表上开始新的数据行。
答案 1 :(得分:0)
这应该是你应该做的事情。
Sub TransposeThis()
Set Rng = Sheets("sheet1").Range("B2:B6") 'Input range of all fruits
Set Rng_output = Sheets("sheet2").Range("B2") 'Output range
For i = 1 To Rng.Cells.Count
Set rng_values = Range(Rng.Cells(i).Offset(0, 1), Rng.Cells(i).End(xlToRight)) 'For each fruit taking the values to the right which need to be transposed
If rng_values.Cells.Count < 16000 Then 'To ensure that it doesnt select till the right end of the sheet
For j = 1 To rng_values.Cells.Count
Rng_output.Value = Rng.Cells(i).Value
Rng_output.Offset(0, 1).Value = rng_values.Cells(j).Value
Set Rng_output = Rng_output.Offset(1, 0) 'Shifting the output row so that next value can be printed
Next j
End If
Next i
End Sub
在:
后:
或者,如果您只是想将所有内容转换为单个向量,这听起来有点奇怪,但可能需要这样的东西,您可以尝试下面的脚本。
Sub TryThis()
Dim rRow As Range
Dim nCol As Long
Dim iOfs As Long
Application.ScreenUpdating = False
With Sheet1.Range("A1:E20")
nCol = .Columns.Count
For Each rRow In .Rows
rRow.Copy
Sheet2.Range("A2").Offset(iOfs).PasteSpecial Transpose:=True
iOfs = iOfs + nCol
Next rRow
End With
Application.ScreenUpdating = True
End Sub