使用Excel将行移动到重复行的列?

时间:2016-04-20 19:28:41

标签: excel

我有一个如下所示的Excel表格,分为两列:

Tom   Alaska
Tom   Hawaii
Tom   New York
Tom   California
Bob   North Carolina
Bob   New York
Bob   Maine
Bob   Alaska
Bob   Wyoming

我需要以下格式:

Tom   Alaska   Hawaii   New York   California
Bob   North Carolina   New York   Maine   Alaska   Wyoming

我已经搜索了网站和本网站,但老实说,我不知道如何提出这个问题。很抱歉,如果这看起来很简单,我已尝试过数据透视表,但无法按照上述格式获取。我已经在列中搜索了数据库行,但这只是让我获得了有关转置行和列的提示,而这并不是我需要的。

任何帮助都将不胜感激。

谢谢, 汤姆Here's an example of what I'm looking to do in Excel

2 个答案:

答案 0 :(得分:1)

这是一个VBA子程序,可以为您完成此任务。我评论了它的鼻涕,所以你可以理解它并根据需要改变一些东西:

Sub transpoooooooooOOOOooose()
    Dim rngCell As Range 'variable to hold which cell we are on
    Dim intCol As Integer 'variable to hold the column we are writing to
    Dim intRow As Integer 'variable to hold the row we are writing to.
    Dim strGuysName As String 'variable to hold the name of the dude

    'first we will write to column 2 (column 1 will contain the name of the guy)
    intCol = 2

    'and row 0 (it will be popped up to row 1 in the first iteration
    intRow = 0

    'Those will be increased as we iterate below

    'iterate through every filled out cell in column A
    For Each rngCell In Sheet1.Range("A:A")
        If rngCell.Value = "" Then Exit Sub 'we hit the bottom of the list, exit

        'If this is a new dude, then increase intRow
        '  and capture the name
        '  and send intCol back to 2
        If rngCell.Value <> strGuysName Then
            intRow = intRow + 1 'see, we popped it up one.
            strGuysName = rngCell.Value
            intCol = 2
        End If

        'Now... the meat and potatoes
        Sheet2.Cells(intRow, 1).Value = strGuysName 'write out the guys name
        Sheet2.Cells(intRow, intCol).Value = rngCell.Offset(, 1).Value 'write out the city which is one column over

        'increase the intCol by 1
        intCol = intCol + 1

    Next
End Sub

你也可以用前端excel的东西来做这件事。

首先,从col A获取一个独特的花花公子名单,然后将其粘贴在新纸张中(sheet2)

然后,在Sheet2!B1(在汤姆旁边)使用:

=IF(INDEX(Sheet1!$A:$A, MATCH($A1,Sheet1!$A:$A, 0) + COLUMN() - 2)=$A1, INDEX(Sheet1!$B:$B, MATCH($A1,Sheet1!$A:$A, 0) + COLUMN() - 2), "")

那只野兽会找到汤姆&#34;在Sheet1(您的原始列表)中,返回找到的行。然后它会减少等于该公式在-2的列的行数(因为我们从B开始)。所以B列版本会检查第一行&#34; Tom&#34;找到,然后C列版本在此之后找到一行,而D列在此之后找到一行。如果该单元格的任何行数下降是&#34; Tom&#34;仍然,然后做同样的逻辑,但抓住B中的任何东西。

答案 1 :(得分:0)

非常感谢大家,我将尝试各自的建议。我继续浏览这个网站,我确实发现了一个类似的问题,他们使用Excel公式来做到这一点:

Combining duplicate entries with unique data in Excel

基本上第三列会将B列中的值合并为逗号分隔值,第四列将用于唯一标识A列中重复项的最后一行,然后我想我可以过滤掉然后使用逗号分隔符将第三列拆分为单独的列。

我认为这个解决方案可行,但我也会尝试其他建议。我再次感激这一点!

谢谢, 汤姆