有人知道如何将由7列组成的数据集转换为所有可能组合的例程吗?
这样的组合由7个数字组成-> 1 | 3 | 8 | 10 | 35 | 40 | 50
例程需要查看第一个表,并列出所有可能的组合的列表,但第二个表中的组合中不包括重复编号。请看图片。
左侧表格包含需要重新组合的组合,右侧表格包含所有可能的组合。
答案 0 :(得分:0)
我会做类似的事情:
选项的数量为6 ^ 7,因此会有很多情况:279936 要获得所有这些,您应该遍历它们。 首先,我们应该找到所有选项。 为了生成包括重复项在内的所有可能的组合,问题与在底数为6的情况下获得所有可能的7位数长数字相同(因为每列中有6个数字)
在较新的excel中,您可以使用BASE函数,但是如果无法访问它,则可以使用以下函数: 如果您可以稍微修改一下代码,则可以调用原始表的值而不是0-5数字。
然后只删除重复项。
Sub generateAllBase6()
Dim i As Double 'number tries
Dim n As String ' the number of item from the column 1-7
For i = 0 To 279936 - 1
n = ConvertBase10(i, "012345")
For k = 1 To 7
If Len(n) < k Then
Cells(i + 2, k) = 0
Else
Cells(i + 2, k) = Right(Left(n, k), 1)
End If
Next k
Next i
End Sub
Public Function ConvertBase10(ByVal d As Double, ByVal sNewBaseDigits As String) As String
Dim S As String, tmp As Double, i As Integer, lastI As Integer
Dim BaseSize As Integer
BaseSize = Len(sNewBaseDigits)
Do While Val(d) <> 0
tmp = d
i = 0
Do While tmp >= BaseSize
i = i + 1
tmp = tmp / BaseSize
Loop
If i <> lastI - 1 And lastI <> 0 Then S = S & String(lastI - i - 1, Left(sNewBaseDigits, 1)) 'get the zero digits inside the number
tmp = Int(tmp) 'truncate decimals
S = S + Mid(sNewBaseDigits, tmp + 1, 1)
d = d - tmp * (BaseSize ^ i)
lastI = i
Loop
S = S & String(i, Left(sNewBaseDigits, 1)) 'get the zero digits at the end of the number
ConvertBase10 = S
End Function