首页 文章

在Excel中获取唯一值列表

提问于
浏览
0

我是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 |
+---+---------+-----------------+

每个 Value 都是独一无二的 . 我尝试了Vlookup,但它只返回1个值为1的元素 . 示例:与福特的VLookup将仅返回第一个结果Mustang,但不返回Focus

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

3 回答

  • 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

    把它放在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
    
  • 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

相关问题