使用excel公式在包含两列的表中返回唯一值

使用excel公式在包含两列的表中返回唯一值,excel,excel-formula,Excel,Excel Formula,我在搜索网络和堆栈溢出,但找不到它=( 我的床单看起来像: R1 U1 R1 U1 R1 U2 R1 U3 R2 U2 R2 U2 R2 U3 是否可以使用excel公式返回 R1 U1,U2, U3 R2 U2, U3 谢谢!据我所知,Excel中没有函数可以执行此操作。您需要的基本上是一个返回所有值而不是一个值的VLOOKUP 但是,可以编写VBA函数来执行此操作,类似于: Public Function FindSeries(TRange As Range, MatchW

我在搜索网络和堆栈溢出,但找不到它=(

我的床单看起来像:

R1  U1
R1  U1
R1  U2
R1  U3
R2  U2
R2  U2
R2  U3
是否可以使用excel公式返回

R1 U1,U2, U3
R2 U2, U3

谢谢!

据我所知,Excel中没有函数可以执行此操作。您需要的基本上是一个返回所有值而不是一个值的
VLOOKUP

但是,可以编写VBA函数来执行此操作,类似于:

Public Function FindSeries(TRange As Range, MatchWith As String) 

    For Each cell In TRange 
        If cell.Value = MatchWith Then 
            x = x & cell.Offset(0, 1).Value & ", " 
        End If 
    Next cell 

    FindSeries = Left(x, (Len(x) - 2)) 

End Function 
您可以在此处找到此代码和更多信息:

透视表


假设您输入R1或R2的单元格是命名范围clVal。 如果上述数据在A1:B7范围内,请按如下所示在C1:C7中添加一个帮助器列:

C1:  =IF($A$1=clVal,B1 & ", ","")
C2:  =IF($A2=clVal,$C1&IF(ISERROR(FIND($B2,$C1)),B2&",",""),$C1)
 copy this formula down to C7.
最后,我们需要切掉训练逗号(如果有)。 这可以通过

=LEFT(C7,LEN(C7)-1*(RIGHT(C7,1)=","))