在Excel中获取唯一值列表

时间:2016-02-22 23:04:40

标签: excel excel-formula

我是Excel公式的新手,所以任何人都可以帮助我

我有以下元素

+----+---------+------------+
| A  | B       | C          |
| nr | car     | model      |
| 1  | Ford    | Mustang    |
| 2  | Ford    | Focus      |
| 3  | Ford    | Focus      |
| 4  | Ferrari | 458        |
| 5  | Ferrari | Testarossa |
+----+---------+------------+

我怎样才能得到如下结果

+---+---------+-----------------+
| 1 | Ford    | Mustang, Focus  |
| 2 | Ferrari | 458, Testarossa |
+---+---------+-----------------+

每个值都是唯一的。我尝试了Vlookup,但它只返回1个值为1的元素。示例:使用福特的VLookup将仅返回第一个结果Mustang,但不返回Focus

如果可能,请仅使用公式:) 我见过类似的问题,但没有答案

3 个答案:

答案 0 :(得分:1)

现在,如果你不介意他们在不同的小区,那么:

=IFERROR(INDEX($C$2:$C$6,MATCH(1,IF(($B$2:$B$6=$F1)*(COUNTIF($F1:F1,$C$2:$C$6)=0),1,0),0)),"")

这是一个数组公式,因此必须使用Ctrl-Shift-Enter而不是Enter或Tab确认以退出编辑模式。

enter image description here

答案 1 :(得分:1)

这可以在额外的步骤中完成。因为在你需要一个中间表。

所以在我的例子中,我获取你给出的数据(似乎是为Column car排序),但是假设它没有排序(截图中的未排序数据)。

enter image description here

第1步:

对未排序的数据进行排序,并在第9-14行中形成表格。在D9中添加一列,在单元格D10中添加以下公式:

=IF(B10=B9,CONCATENATE(VLOOKUP(B9,B9:D10,3,0),", ",C10),C10)

这个公式的作用是同时查找和连接值。

我在第9行和第14行的表格中找不到唯一的条目,第16行的公式。(这只是为了方便)

B16 =SUMPRODUCT(1/COUNTIF($B$10:$B$14,$B$10:$B$14))

enter image description here

第2步:

在第18-20行(没有任何独特条目可以说明这张表的大小),

B19 =INDEX($B$10:$B$14,MATCH(0,INDEX(COUNTIF($B$18:B18,$B$10:$B$14),0,0),0))

此公式列出colB中的唯一车名。在colC中,你查找汽车名称的最后一个连接值(因为我们之前一直连接,汽车名称的最后一个条目会得到你的结果)

C19 =LOOKUP(2,1/($B$9:$B$14=B19),$D$9:$D$14)

那会给你结果表! (将所有这些作为值粘贴在colG以上,以便您看到输出) enter image description here

答案 2 :(得分:1)

把它放在D2

=IF(B2<>B1,C2,IF(C2<>C1,IF(D1="",C2,D1&", "&C2),""))

向下拖动

nr  car     model       ColD
1   Ford    Mustang     Mustang
2   Ford    Focus       Mustang, Focus
3   Ford    Focus   
4   Ferrari 458         458
5   Ferrari Testarossa  458, Testarossa

每辆车最后一次出现的车型都有你想要的数据。

如果您可以杀死A列并使用Excel的删除欺骗功能,这将会容易得多。

如果你想用代码来做,这将有效:

Sub ConcatByMasterColumn()
Dim X As Long, MyString As String
Range("F1:G1").Formula = Array("Car", "Model")
For X = 2 To Range("A" & Rows.Count).End(xlUp).Row + 1
    If Range("B" & X) <> Range("B" & X - 1) And X > 2 Then 'MyString = Range("B" & X).Text
        Range("F" & Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Row).Formula = Range("B" & X - 1).Text
        Range("G" & Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Row).Formula = Right(MyString, Len(MyString) - 2)
        MyString = ""
    End If
    If Range("C" & X) <> Range("C" & X - 1) Then MyString = MyString & ", " & Range("C" & X).Text
Next
End Sub

结果:

Car         Model
Ford        Mustang, Focus
Ferrari     458, Testarossa