【问题标题】:Excel Transform Rows to Repeated ColumnsExcel 将行转换为重复列
【发布时间】:2019-02-19 20:24:58
【问题描述】:

这里是新的,所以我提前感谢您的耐心等待。

我觉得这是一个简单的问题,但它让我困惑了一段时间,我找不到好的解决方案。

我有这样的数据:

而我正在努力做到这一点:

提前谢谢,这个问题让我比我想象的更痛苦。

【问题讨论】:

  • 您有哪个 Excel 版本?从 Excel2010 开始,您可以使用 PowerQuery。它是 ETL 的插件。 Here 我使用 unpivot table 回答的类似问题。
  • 谢谢,virtualdivid,我已经开始尝试使用 PowerQuery,但你让我回到它并尝试了几种不同的方法,让我得到了答案。

标签: excel excel-formula transform


【解决方案1】:

我可以建议的两种方法:

方法一:VBA

这是一些非常简单的 VBA 代码,可以满足您的要求。

它只需要您确定数据从哪里开始,然后将其发布到相邻的工作表中。

基本上有 3 个计数器可以跟踪您在任一工作表上的数据集中的位置。

我相信这里有更精明的用户可以提供更简洁的答案,但这应该会让你的心态朝着正确的方向发展。

此代码一次遍历每一行一个值。如果您有一个非常大的数据集,那么这可能需要很长时间。

Sub Repeat_Rows()

    Dim iRows As Integer
    Dim iColumns As Integer
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim start As Range

    Set start = Sheet1.Range("A1")
    iRows = start.End(xlDown).Row    'find out total rows of initial data
    k = 0

    For i = 1 To iRows

        iColumns = Sheet1.Range("A" & i).End(xlToRight).Column '# columns in the row

        For j = 2 To iColumns 'starts at column B

            k = k + 1 'row counter for sheet 2
            Sheet2.Range("A" & k).Value = Sheet1.Range("A" & i).Value
            Sheet2.Range("B" & k).Value = Sheet1.Cells(i, j).Value

        Next

    Next

End Sub

方法二:数据透视表

老实说,我自己不太擅长使用数据透视表,但这绝对是一种可行的方法。只需突出显示数据,创建数据透视表,然后使用标签位置,直到获得所需的结果。

【讨论】:

  • 谢谢,Wes,代码运行良好。不幸的是,它导致我需要使用的数据量出现溢出错误。
  • 我可以理解的是,将整数值最大化时会发生溢出错误。
【解决方案2】:

感谢 cmets 中的 virtualdvid 为我指引了正确的方向。解决方案截图如下:

毕竟这是一个简单的问题,我只是把它复杂化了。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多