Excel 试图找到所有可能的组合

Excel 试图找到所有可能的组合,excel,Excel,我一直在尝试使用excel解决以下问题,但不确定从哪里开始,我尝试使用组合和渗透,但对它们只有基本的了解,你们如何解决这个问题 有6种咖啡和10种口味的咖啡,你可以在每种咖啡中放一、二或三杯。基于此,我想知道并列出独特的风味组合,以及你不喝同一杯咖啡能坚持多久 像这样构建您的表: A B Coffee1 Syrup1 Coffee2 Syrup2 Coffee3 Syrup3 Coffee4 Syrup4 Coffee5 Syrup5 Coffee6 Syrup6 S

我一直在尝试使用excel解决以下问题,但不确定从哪里开始,我尝试使用组合和渗透,但对它们只有基本的了解,你们如何解决这个问题


有6种咖啡和10种口味的咖啡,你可以在每种咖啡中放一、二或三杯。基于此,我想知道并列出独特的风味组合,以及你不喝同一杯咖啡能坚持多久

像这样构建您的表:

A       B
Coffee1 Syrup1
Coffee2 Syrup2
Coffee3 Syrup3
Coffee4 Syrup4
Coffee5 Syrup5
Coffee6 Syrup6
        Syrup7
        Syrup8
        Syrup9
        Syrup10
对于上述数据,以下公式将计算组合总数:

=COUNTA(A:A)*COUNTA(B:B)
+COUNTA(A:A)*COUNTA(B:B)^2
+COUNTA(A:A)*COUNTA(B:B)^3

尝试所有不同组合所需的时间取决于你的咖啡因成瘾程度。

宏非常简单

首先要注意的是,我们需要的是组合,而不是排列。这是因为{Kona,vanella,chocolate}与{Kona,chocolate,vanilla}相同

将6号咖啡放置在A1至A6之间

将10种口味放入B2至B11。让B1空着

输入并运行以下VBA宏:

这将产生875个样本

宏非常易于安装和使用:

ALT-F11将显示VBE窗口 ALT-I ALT-M打开一个新模块 粘贴内容并关闭VBE窗口 如果保存工作簿,宏将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

要删除宏,请执行以下操作:

如上所述打开VBE窗口 清除代码 关闭VBE窗口 要使用Excel中的宏,请执行以下操作:

ALT-F8 选择宏 触跑 要了解有关宏的更多信息,请参阅:

必须启用宏才能使其工作

以下是一个示例:

编辑1

以下是更新的代码:

Sub CoffeeMixer()
    Range("C:F").Clear
    Dim k As Long, _
        i As Long, _
        j As Long, _
        l As Long, _
        Z As Long
    Z = 1
    For i = 1 To 6
        cf = Cells(i, 1).Value
        For j = 1 To 11
            fl1 = Cells(j, 2).Value
            kk = j + 1
            If j = 11 Then kk = 11
            For k = kk To 11
                fl2 = Cells(k, 2).Value
                ll = 1 + k
                If k = 11 Then ll = 11
                For l = ll To 11
                    fl3 = Cells(l, 2).Value
                        Cells(Z, "C").Value = cf
                        Cells(Z, "D").Value = fl1
                        Cells(Z, "E").Value = fl2
                        Cells(Z, "F").Value = fl3
                        Z = Z + 1
                Next l
            Next k
        Next j
    Next i
End Sub

使用此版本,您必须从B1到B10填写,并将B11留空

这太棒了,非常感谢你花时间来写这一切,这看起来非常接近我想要的,除了用味道组合打印出来的结果,如何更改宏,使其显示一种咖啡和1、2或3种口味快照的所有组合?@Axios_Andrew我将在一段时间内提供一个更新。我刚刚注意到的是,它也不会显示每种咖啡只有一种口味快照。如果我是对的,有1050种可能性或1056,如果简单的咖啡没有额外的味道也是可能的。对于一种咖啡,有10种可能的口味,然后45=10!/10-2! / 2.两种口味的可能性,120=10!/10-3! / 3.3种口味的可能性。6杯咖啡=6*10+45+120=1050。这是否显示出独特的口味。我得出了相同的结果,但是c1 f1 f3和c1 f2 f1 f3不是唯一的,所以这会使数字膨胀。我在想,如果我能想出一种方法来打印整个列表,即使是重复的,我也能想出第二种方法来剔除非唯一的组合。
Sub CoffeeMixer()
    Range("C:F").Clear
    Dim k As Long, _
        i As Long, _
        j As Long, _
        l As Long, _
        Z As Long
    Z = 1
    For i = 1 To 6
        cf = Cells(i, 1).Value
        For j = 1 To 11
            fl1 = Cells(j, 2).Value
            kk = j + 1
            If j = 11 Then kk = 11
            For k = kk To 11
                fl2 = Cells(k, 2).Value
                ll = 1 + k
                If k = 11 Then ll = 11
                For l = ll To 11
                    fl3 = Cells(l, 2).Value
                        Cells(Z, "C").Value = cf
                        Cells(Z, "D").Value = fl1
                        Cells(Z, "E").Value = fl2
                        Cells(Z, "F").Value = fl3
                        Z = Z + 1
                Next l
            Next k
        Next j
    Next i
End Sub