在Excel中将表数据转换为垂直列表

时间:2017-08-04 09:17:08

标签: excel excel-vba vba

有人可以帮助您在Excel中将数据表转换为垂直列表吗?

我试过使用一个宏,但它一直在绊倒,我不知道我哪里出错了。

我正在下载一个大型数据表,但是需要将该数据放入工作表中另一个宏的列表中。由于有多少数据,手动执行它是不切实际的,所以我想知道是否有一个快速的方法。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以在单个公式中执行此操作。假设你有一个看起来像这样的电子表格(我已经放入了显示单元格位置的虚拟数据,所以你可以看到它最终的位置):

Spreadsheet with 8 columns and 15 rows

在另一个单元格(或其他表格)中放入以下公式:

=OFFSET($A$1,INT((ROW(1:1)-1)/8),(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8))

公式中的两个8是因为工作表有8列,如果它有或多或少,你会将这8个更改为电子表格的列数。

然后你复制公式,你得到这个:

Sheet with formula in

它的工作原理是因为它使用偏移公式,它使用行和列引用获取单元格的内容。

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

在:

enter image description here

后:

enter image description here

或者,如果您只是想将所有内容转换为单个向量,这听起来有点奇怪,但可能需要这样的东西,您可以尝试下面的脚本。

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