在Excel中获取唯一的值列表

我在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将只返回第一个结果野马,但不是焦点

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

现在,如果你不介意他们在不同的单元格,那么:

 =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退出编辑模式。

在这里输入图像说明

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

所以在我的例子中,我把你给出的数据(似乎sorting为列车),但假设它没有sorting(屏幕截图中未sorting的数据)。

在这里输入图像说明

步骤1:

对未sorting的数据进行sorting,并在第9-14行中形成表格。 在D9中添加一列,在单元格D10中join这个公式:

 =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))

在这里输入图像说明

第2步:

在第18-20行(独特的条目的types给了一个想法这个表有多大),

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中,以便看到输出) 在这里输入图像说明

把这个放在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的删除function,这将会容易得多。

如果你想用代码来做,这将工作:

 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