如何将重复项映射到重复键

时间:2019-02-11 18:15:08

标签: vba

关于StackOverflow的第一个问题,请告诉我如何改进。编程也是新手,所以问题可能很简单,我花了多个小时才能解决

我在表中包含两列,即X列和Y列。X列包含键,Y列包含项。列按行关联。 Y中Z行上的项目应映射到X中同一行上的键。每个键可以有一个以上唯一项,但每个项目只能有一个唯一键。两列中的所有值出现的次数未知。我们的任务是提供一个有效的映射,以便轻松访问与特定键相对应的所有唯一项。

请在下面查看我的解决方案。该函数称为teamgroup,并且是较大程序的一部分,因此存在其他函数的输入。我的代码中未包括的内容是表按列X排序,并且列X的唯一键存储在单独的数组keys中。 IsInArray也是一个单独的功能。

'Set keys
For i = 1 To UBound(keys)

    With dict

        .Add keys(i, 1), tmp

    End With

Next i

'Group values by key
For Each kee In dict.keys

    For i = 2 To lastrow

        If kee = tbl.Range(i, keycol).Value Then

            If IsInArray(tbl.Range(i, itemcol).Value, dict.Item(kee)) Then

            Else
                ReDim Preserve tmp(1 To UBound(tmp) + 1)
                tmp(UBound(tmp)) = tbl.Range(i, itemcol).Value
                dict.Remove (kee)
                dict.Add (kee), tmp
            End If

        Else

        End If

    Next i

    ReDim tmp(0)

Next

Set teamgroup = dict

End Function

数据如下:

 X     Y
 56     6070
 56     6070
 55     6021
 55     6024
 56     6054
 0      6050

没有必需的输出形式,但应允许轻松访问映射到特定键的项目。我相信字典将是一个很好的工具。在这种情况下,输入“ 56”应输出包含6070和6054的数组或类似的数组。

my 代码的最终结果是一个字典,该字典具有唯一键,该键映射到包含具有Y列唯一值的数组的项。

我的感觉是,这是解决问题的效率低下且令人费解的方法,因此我希望收到有关如何更好地解决问题的意见。

0 个答案:

没有答案