【问题标题】:Convert columns with multiple rows of data to rows with multiple columns in Excel.在 Excel 中将具有多行数据的列转换为具有多列的行。
【发布时间】:2012-09-27 03:08:53
【问题描述】:

我有以多行的 cloumns 组织的数据,我需要将其转换为多列的行以进行数据分析。例如,

    ID  Date of entry   Location    Data1   Data2
    1   20101030        1           a       b
    1   20101030        2           c       d
    1   20101125        1           w       v
    1   20101125        2           e       d
    1   20110314        1           we      r
    1   20110314        2           f       f
    2   20091024        1           ewr     rte
    2   20091024        2           gr      ert
    3   20061128        1           jy      bf
    3   20061128        2           u       df
    3   20110517        1           rd      fd
    3   20110517        2           sg      sd

变成这种格式,每个ID行都有多列数据(下面只显示头行)

ID  entry_1 Dateofentry location_1  data1   data2   location_2  data1   data2   entry_2 Dateofentry location_1  data1   data2   location_2  data1   data2   entry_3 Dateofentry location_1  data1   data2   location_2  data1   data2

有人可以帮忙吗?

谢谢! GT

【问题讨论】:

  • 您愿意为此使用宏吗?你有多少行数据?你用的是什么版本的excel?

标签: excel


【解决方案1】:

您必须自己添加标题,但此代码应该可以满足您的需要:

Sub ConsolidateRows_SpreadAcross()

Dim lastRow As Long, i As Long, j As Long
Dim colMatch As Variant, colConcat As Variant

application.ScreenUpdating = False 'disable ScreenUpdating to avoid screen flashes

lastRow = range("A" & Rows.Count).End(xlUp).Row 'get last row

For i = lastRow To 2 Step -1

    If Cells(i, 2) = Cells(i - 1, 2) Then
        range(Cells(i, 3), Cells(i, Columns.Count).End(xlToLeft)).Copy Cells(i - 1, Columns.Count).End(xlToLeft).Offset(, 1)
        Rows(i).Delete
    Else
        If Cells(i, 1) = Cells(i - 1, 1) Then
            range(Cells(i, 2), Cells(i, Columns.Count).End(xlToLeft)).Copy _
                Cells(i - 1, Columns.Count).End(xlToLeft).Offset(, 1)
            Rows(i).Delete
        End If
    End If

Next

application.ScreenUpdating = True 'reenable ScreenUpdating
End Sub

【讨论】:

    【解决方案2】:

    如果您复制整个表格,然后右键单击要粘贴新数据的任何位置,您应该会看到“选择性粘贴”菜单。从该菜单中,选择转置。这应该将列转换为行。

    【讨论】:

    • 我打算发布相同的答案,但这不会将数据转换为 OP 要求的格式。
    • 是的,这是我唯一不确定的事情,但我不太确定他在寻找什么,因为示例输出没有使用示例输入中的数据。
    【解决方案3】:

    我从我在互联网上找到的一个公式开始,该公式采用一列列表并将其布局更改为多列:如果不是 1000 多行,您将获得 60 行,其中包含该列表的许多列。 你可以在这里找到它http://help.lockergnome.com/office/list-multiple-columns-page--ftopict935389.html

    我想获取一个包含 4 列(第 5 列为空)和 1000 多行的列表,并使其成为一个 4 个字段重复的 50 行表。

    例如我有:

    family  |  name   |  amount  |   table |
    fam1    |  shlomi |  2       |   38    |
    fam2    |  hila   |  4       |   23    |    
    ....    
    fam1000 |  avi    |  1       |   15    |
    

    我想成功

    family  |  name   |  amount  |   table |     |fam50    |  ben   |  2       |   68    |  ...    
    fam1    |  shlomi |  2       |   38    |      ...    
    fam2    |  hila   |  4       |   23    |      ...    
    ...                                           ...    
    fam49   |  dror   |  1       |   15    |     |fam99    |  dror   |  1      |   15    | ...
    

    在现有工作簿的新工作表上,将以下公式插入 A1:

    =IF(OFFSET(Sheet1!$A$1,QUOTIENT(COLUMN(),5)*50+ROW()-1,MOD(COLUMN()-1,5))="","",OFFSET (Sheet1!$A$1,QUOTIENT(COLUMN(),5)*50+ROW()-1,MOD(COLUMN()-1,5)))

    .. 将此公式复制到您需要的任意多列和任意多行(我在示例中使用了 50)

    您可以将 furmula 中的“5”更改为每列布局中所需的字段数, 您可以将“50”更改为每页中所需的行数。

    【讨论】:

      【解决方案4】:

      家庭 |姓名 |金额 |表| 家庭1 |什洛米 | 2 | 38 | 家族2 |希拉 | 4 | 23 | …… 家庭1000 | AVI | 1 | 15 | 家庭50 |本 | 2 | 68 |



      陀螺 | 1 | 15 |

      我想成功

      家庭 |姓名 |金额 |表| |fam50 |本 | 2 | 68 | ...
      家庭1 |什洛米 | 2 | 38 | ...
      家族2 |希拉 | 4 | 23 | ...
      ... ...
      fam49 | AVI | 1 | 15 | |fam99 |德罗尔 | 1 | 15 | ...

      【讨论】:

        猜你喜欢
        • 2011-04-11
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 2021-05-12
        相关资源
        最近更新 更多