【问题标题】:Converting table data to vertical list in Excel [closed]将表格数据转换为 Excel 中的垂直列表 [关闭]
【发布时间】:2017-08-04 09:17:07
【问题描述】:

任何人都可以提供一种将数据表转换为 Excel 中的垂直列表的方法吗?

我尝试使用宏,但它一直跳闸,我不确定哪里出错了。

我正在下载一个大数据表,但需要将该数据放入一个列表中,以便工作表上的另一个宏起作用。有多少数据,手动完成是不切实际的,所以我想知道是否有一种快速的方法。

提前致谢!

【问题讨论】:

  • 如果你知道宏然后尝试计算数据范围并将其用于转置。
  • 工作表中有多少列数据?你能展示一下这张纸的样子吗?

标签: excel vba google-sheets


【解决方案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 列并且我们在原始工作表上开始新的数据行。

【讨论】:

    【解决方案2】:

    这应该对你有用。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多