根据其他列值合并列值

时间:2011-02-28 23:02:05

标签: excel

我希望在Excel中执行以下操作:

我有一个表,想要编写一个函数或公式来查看一列中的值和它们相同的位置,取另一列中的值并将其连接到它找到的第一个记录的列值(in新专栏)。

例如:

ADDRESS                         PAGE         NEW COLUMN
1 810 ANDERSON TERR 1817-2     1817-2
10 1940 HILLSIDE DR 1315-42    1315-42
101 TRANQUILLE RD              1518-53     1518-53 1517-30
101 TRANQUILLE RD              1517-30     
1020 HILLSIDE DR               1417-111    1417-111 1417-112
1020 HILLSIDE DR               1417-112 
10285 DALLAS DR                1330-10     1330-10 1330-3
10285 DALLAS DR                1330-3   
1051 PINE SPRINGS RD           2218-46     2218-46 2218-18 2218-31 2217-6 2218-32
1051 PINE SPRINGS RD           2217-18  
1051 PINE SPRINGS RD           2218-31  
1051 PINE SPRINGS RD           2217-6   
1051 PINE SPRINGS RD           2218-32  

非常感谢任何见解!!

此致

2 个答案:

答案 0 :(得分:0)

我会对相关列上的表进行排序,然后在彼此之后获得具有相同列值的所有行。在排序表上,您可以使用类似

的函数
  

= IF('列值'='前一列值','连接值','')

如果您总是需要连接找到的FIRST值,则可以创建另一列,该列始终只包含属于一起并与之连接的一组行的第一个找到的值。

更精确:

1)排序表 2)假设A列中的地址和B列中的页面,在C列中添加该公式(并向下复制):

  

= IF(A2 = A1,C1&“”& B2,B2)

这准确地给出了示例中的值:

  

ADDRESS PAGE NEW

     

1 ANDERSON 1817-2 1817-2

     

10 HILLSIDE 1315-42 1315-42

     

101 TRANQUILLE 1518-53 1518-53

     

101 TRANQUILLE 1517-30 1518-53 1517-30

     

1020 HILLSIDE 1417-111 1417-111

     

1020 HILLSIDE 1417-112 1417-111 1417-112

     

10285 DALLAS 1330-10 1330-10

     

10285 DALLAS 1330-3 1330-10 1330-3

     

1051 PINE 2218-46 2218-46

     

1051 PINE 2217-18 2218-46 2217-18

     

1051 PINE 2218-31 2218-46 2217-18 2218-31

     

1051 PINE 2217-6 2218-46 2217-18 2218-31 2217-6

     

1051 PINE 2218-32 2218-46 2217-18 2218-31 2217-6 2218-32

如果您不想要中间串联,则必须隐藏C列,并在A列中的值发生更改时再创建另一个复制C列值的列。

答案 1 :(得分:0)

作为一个功能:

Sub Combine()

    Dim rwNumber As Integer
    Dim value As String
    Dim oldValue As String
    Dim concatenatedString As String

    'Sort the table
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A2:C14")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    For rwNumber = 2 To 100
       'gets value of first cell
       value = ActiveWorkbook.Worksheets("Sheet1").Cells(rwNumber, 1).value
       If value = oldValue Then
        concatenatedString = concatenatedString + " " + ActiveWorkbook.Worksheets("Sheet1").Cells(rwNumber, 2).value
       Else
            ActiveWorkbook.Worksheets("Sheet1").Cells(rwNumber - 1, 3).value = concatenatedString
            concatenatedString = ActiveWorkbook.Worksheets("Sheet1").Cells(rwNumber, 2).value
       End If
       oldValue = value
    Next rwNumber
End Sub

或类似的东西: - )