Excel 引用没有重复值的数据

Excel 引用没有重复值的数据,excel,vba,Excel,Vba,我有下表: 我们的主要类别是水果/蔬菜,其子类别是其类型,其类型的子类别是颜色。几个小时以来,我一直试图通过公式实现以下输出,但没有成功 行中的主产品类型不应重复。如果“水果/蔬菜类型”中存在重复,我们只需使用该类型的一次及其所有颜色。对不起,如果解释不好的话。以下是图表: 这是一个使用字典的解决方案 Sub test() Dim vDB, vR() Dim Dic As Object 'Dictionary Dim Fruit As Object 'Dictionar

我有下表:

我们的主要类别是水果/蔬菜,其子类别是其类型,其类型的子类别是颜色。几个小时以来,我一直试图通过公式实现以下输出,但没有成功

行中的主产品类型不应重复。如果“水果/蔬菜类型”中存在重复,我们只需使用该类型的一次及其所有颜色。对不起,如果解释不好的话。以下是图表:


这是一个使用字典的解决方案

Sub test()
    Dim vDB, vR()
    Dim Dic As Object 'Dictionary
    Dim Fruit As Object 'Dictionary
    Dim Ws As Worksheet, toWs As Worksheet
    Dim i As Long, j As Long, r As Long
    Dim k As Integer
    
    Set Ws = Sheets(1) 'set your data Sheet
    Set toWs = Sheets(2) 'set your result Sheet
    
    vDB = Ws.Range("a1").CurrentRegion
    
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Fruit = CreateObject("Scripting.Dictionary")
    
    For i = 2 To UBound(vDB, 1)
        If Dic.Exists(vDB(i, 1)) Then
        Else
            Dic.Add vDB(i, 1), vDB(i, 1)
        End If
    Next i
    
    r = Dic.Count
    
    ReDim vR(1 To r, 1 To 1000)

    For i = 1 To r
        vR(i, 1) = Dic.Items(i - 1)
        k = 1
        For j = 2 To UBound(vDB, 1)
            If vDB(j, 1) = Dic.Items(i - 1) Then
                If Fruit.Exists(vDB(j, 2)) Then
                    k = k + 1
                    vR(i, k) = vDB(j, 3)
                Else
                    Fruit.Add vDB(j, 2), vDB(j, 2)
                    k = k + 2
                    vR(i, k - 1) = vDB(j, 2)
                    vR(i, k) = vDB(j, 3)
                End If
            End If
        Next j
    Next i
        
    With toWs
        .Range("a1").CurrentRegion.Clear
        .Range("a1").Resize(r, 1000) = vR
    End With
    
End Sub

到目前为止,您尝试了什么?@horst我尝试用数据透视表分离这些值,这样就不会有重复的值,但没有成功。我也试过VLOOKUP,但它也会打印出副本。为什么透视表不起作用?可以发布吗?在透视表中,我垂直获取值,但问题是,我需要将它们分为两行,如上面的“结果”图所示。当然,我可以复制它们并水平粘贴,但问题是是否可以使用公式,而不是复制粘贴选项..谢谢!为了更好地理解字典的结构,我读了一些关于字典结构的书,非常好用!