背包/总和变化。在 EXCEL 中,如何获取总和在一定范围内的所有数字组合?

背包/总和变化。在 EXCEL 中,如何获取总和在一定范围内的所有数字组合?

你好,我是新来的,希望你们能帮助我。

请注意,这个主题与其他一些主题类似,但没有一个回答这个确切的问题。

这与这个未解答的问题完全相同: https://stackoverflow.com/questions/31248379/vba-to-extract-values-from-a-list-until-the-sum-is-within-a-certain-range

我的问题如下:作为 Excel 用户,我有一列数字,比如

5, 6, 7, 8, 8, 9, 14, 17

并了解所有落在 25 - 35 范围内的和的组合。我可能只有 4-5 个条目/列号。

还有一个限制:我希望组合尽可能小,但仍在范围内。

因此 17 + 9 = 26 是好的,但 17 + 9 + 5 = 31 是不好的(不应该计算),因为该组大于必要的,尽管它仍然在范围内。

所以总的来说,我想要获得一列中所有可能的数字组合,这些数字的组合总和落在一个特定的范围内,并且总和尽可能小,但仍在该范围内。

希望有人能帮忙!如果没有,有人知道我可以在哪里找到可以自学编码的信息吗 :)

欢呼吧,祝你周末愉快!!

答案1

将您的价值观放入列中A并在列中地方0就在他们旁边。

然后在C9输入公式:

=SUMPRODUCT(A1:A8*B1:B8)

然后输入并运行这个简短的宏:

Sub ABC()
    Dim i As Long, s As String
    Dim j As Long, K As Long
    Dim wf As WorksheetFunction
    Dim answer As String
    Set wf = Application.WorksheetFunction

    K = 1

    For i = 0 To 255
        s = wf.Dec2Bin(i, 8)
        For j = 1 To 8
            Cells(j, 2).Value = Val(Mid(s, j, 1))
        Next j
        If Range("C9").Value > 24 And Range("C9").Value < 36 Then
            answer = ""
            For j = 1 To 8
                If Cells(j, 2) = 1 Then answer = answer & "," & Cells(j, 1)
            Next j
            Cells(K, 4) = Mid(answer, 2)
            K = K + 1
        End If
    Next i
End Sub

您将获得列中列出的所有 64 个解决方案

在此处输入图片描述

这是基于 John Coleman 的建议。

答案2

Excel 用户经常会遇到这个问题。有一个 Excel 插件可以轻松找到符合条件的所有数字组合,名为和匹配

随附的图片解释了如何设置条件以查看所有符合条件的组合。通过修改条件,您可以使用插件的免费试用版获得解决方案。

在此处输入图片描述

相关内容