引用没有重复值的数据

问题描述 投票:0回答:2

我有下表:

enter image description here

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

主要产品类型不应在行中重复。如果“水果/蔬菜类型”中有重复项,我们只需获取该类型一次及其所有颜色。抱歉,如果解释不好。这是图形化的:

enter image description here

excel vba
2个回答
0
投票

这是使用字典的解决方案。

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

0
投票
=spl("=E(?).group(Type).(~.group(Name)).((~.Type|~.(Name|~.(Color))).conj())",A1:C6)
© www.soinside.com 2019 - 2024. All rights reserved.