将包含多行数据的列转换为Excel中具有多列的行。

时间:2012-09-27 03:08:54

标签: excel

我将数据组织在具有多行的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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

找到它

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

例如我有:

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(Sheet 1中$ A $ 1,QUOTIENT(COLUMN(),5)* 50 + ROW() - 1,MOD(COLUMN() - 1,5))= “”, “”,OFFSET (!Sheet 1中$ A $ 1,QUOTIENT(COLUMN(),5)* 50 + ROW() - 1,MOD(COLUMN() - 1,5)))

..根据需要将此公式复制到尽可能多的列,并根据需要复制多行(我的示例中使用了50个)

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

答案 3 :(得分:-2)

家庭|名称|金额|桌子| fam1 | shlomi | 2 | 38 | fam2 | hila | 4 | 23 | .... fam1000 | avi | 1 | 15 | fam50 |本| 2 | 68 |



dror | 1 | 15 |

我想做到

家庭|名称|金额|桌子| | fam50 |本| 2 | 68 | ...
fam1 | shlomi | 2 | 38 | ...
fam2 | hila | 4 | 23 | ...
... ...
fam49 | avi | 1 | 15 | | fam99 |德罗| 1 | 15 | ...