![背包/总和变化。在 EXCEL 中,如何获取总和在一定范围内的所有数字组合?](https://linux22.com/image/1487909/%E8%83%8C%E5%8C%85%2F%E6%80%BB%E5%92%8C%E5%8F%98%E5%8C%96%E3%80%82%E5%9C%A8%20EXCEL%20%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E6%80%BB%E5%92%8C%E5%9C%A8%E4%B8%80%E5%AE%9A%E8%8C%83%E5%9B%B4%E5%86%85%E7%9A%84%E6%89%80%E6%9C%89%E6%95%B0%E5%AD%97%E7%BB%84%E5%90%88%EF%BC%9F.png)
你好,我是新来的,希望你们能帮助我。
请注意,这个主题与其他一些主题类似,但没有一个回答这个确切的问题。
这与这个未解答的问题完全相同: 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 插件可以轻松找到符合条件的所有数字组合,名为和匹配
随附的图片解释了如何设置条件以查看所有符合条件的组合。通过修改条件,您可以使用插件的免费试用版获得解决方案。