我最多有16个数据集(此处的示例仅使用8个),我试图将它们分为4组,其中每组中的数据集都尽可能匹配。 (在Excel中使用VBA宏)。
我的目标是遍历4个组的每种可能的组合,并比较它们与先前的“最佳匹配”的匹配程度,如果可以的话,将其覆盖。
比较各组的匹配程度没有问题,但是我不会遍历每种可能的组合的代码。
我的问题是,为什么这段代码不起作用?如果有更好的解决方案,请告诉我。
For a = 1 To UBound(Whitelist) - 3
For b = a + 1 To UBound(Whitelist) - 2
For c = b + 1 To UBound(Whitelist) - 1
For d = c + 1 To UBound(Whitelist)
TempGroups(1, 1) = a: TempGroups(1, 2) = b: TempGroups(1, 3) = c: TempGroups(1, 4) = d
For e = 1 To UBound(Whitelist) - 3
If InArray(TempGroups, e) = False Then
For f = e + 1 To UBound(Whitelist) - 2
If InArray(TempGroups, f) = False Then
For g = f + 1 To UBound(Whitelist) - 1
If InArray(TempGroups, g) = False Then
For h = g + 1 To UBound(Whitelist)
If InArray(TempGroups, h) = False Then
TempGroups(2, 1) = e: TempGroups(2, 2) = f: TempGroups(2, 3) = g: TempGroups(2, 4) = h
If HowClose(Differences, TempGroups, 1) + HowClose(Differences, TempGroups, 2) < HowClose(Differences, Groups, 1) + HowClose(Differences, Groups, 2) Then
For x = 1 To 4
For y = 1 To 4
Groups(x, y) = TempGroups(x, y)
Next y
Next x
End If
End If
Next h
End If
Next g
End If
Next f
End If
Next e
Next d
Next c
Next b
Next a
作为参考,UBound(白名单)可以作为8(我必须匹配的数据集数量)
TempGroups是一个数组,我将每次迭代写入其中,因此可以将其与...进行比较...
组,将包含归类为匹配组的数据的数组
InArray函数检查该值是否已经分配给一个组,因为每个数据集只能在一个组中。
谢谢!
图片: