关于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列唯一值的数组的项。
我的感觉是,这是解决问题的效率低下且令人费解的方法,因此我希望收到有关如何更好地解决问题的意见。