遍历4个

时间:2018-08-02 11:59:44

标签: arrays excel vba iteration

我最多有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函数检查该值是否已经分配给一个组,因为每个数据集只能在一个组中。

谢谢!

图片:

Datasets

Relatively Well Matched Data

Fairly Poorly Matched Data

0 个答案:

没有答案