【问题标题】:Find all combinations from multiple columns that add up to an exact value从多个列中查找所有组合,这些组合加起来为一个精确值
【发布时间】:2019-01-25 04:14:36
【问题描述】:

我有四列

我想从每一列中找出所有数字的组合,它们加起来是一个精确的值。有没有 VBA 脚本可以帮助我实现这个目标?

我正在寻找类似的输出:

假设我希望这些值加起来为 2721,那么代码应将组合返回为 (1,3,6,7),即每列的相应行,依此类推,直到找到所有此类组合。如果无法找到确切的总和,则找到最接近该值的总和。

【问题讨论】:

  • 您是否在此处搜索过有关“组合”的帖子?你应该这样做,因为这已经被问过了。
  • 那是在 Python 中。我正在寻找VBA。你能指出你所指的那个吗?
  • 如果您在搜索框中输入“组合”一词并按回车键,这是第一个结果,您需要这样做,因为可能相关的结果超过 1 个......请参阅stackoverflow.com/q/32853339/4961700

标签: excel vba excel-formula


【解决方案1】:

使用 ReSize 方法、Sum 函数、循环和条件语句可以在 VBA 中轻松完成。下面是一个示例数据示例:

第 1 步:编写一个与此类似的 VBA 宏。

Option Explicit

Function Check_Combination_Sum(ByVal lngSum As Long) As String

    Dim rng As Range
    Dim rngSource As Range

    Set rngSource = Range("A2:A16")

    For Each rng In rngSource.Cells
        If WorksheetFunction.Sum(rng.Resize(1, 4)) = lngSum Then
            rng.Resize(1, 4).Interior.Color = RGB(200, 255, 220)
            Check_Combination_Sum = rng.Row & "," & Check_Combination_Sum
        End If
    Next

    If Len(Check_Combination_Sum) > 1 Then
        Check_Combination_Sum = Left(Check_Combination_Sum, Len(Check_Combination_Sum) - 1)
    End If
End Function

Sub Check_Data()
    MsgBox Check_Combination_Sum(197)
End Sub

第 2 步:上面的代码将突出显示包含给定总和的数据的行,并弹出行号。修改代码以满足您的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多