Рюкзак / Сумма-Общее Изменение. В EXCEL, как получить все комбинации чисел, где суммы попадают в определенный диапазон?

2

Привет, я новичок здесь и надеялся, что один из вас сможет мне помочь.

Обратите внимание, что эта тема похожа на некоторые, но никто не ответил на этот точный вопрос.

Он точно такой же, как этот вопрос без ответа: https://stackoverflow.com/questions/31248379/vba-to-extract-values-from-a-list-until-the-sum-is-within-a-termin- ассортимент

Моя проблема заключается в следующем: как пользователь Excel, у меня есть столбец чисел, скажем,

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

и что нужно знать все комбинации сумм, которые попадают, например, в диапазон 25 - 35. Скорее всего, у меня будет только 4-5 записей / номеров столбцов.

Есть еще одно ограничение: я хочу, чтобы комбинации были как можно меньше, но все же в пределах диапазона.

поэтому 17 + 9 = 26 - это хорошо, а 17 + 9 + 5 = 31 - плохо (не следует считать), потому что группа больше, чем необходимо, хотя она все еще находится в пределах диапазона.

Итак, в целом, я хочу получить все возможные комбинации чисел в столбце, которые суммируются, чтобы попасть в определенный диапазон, где суммы настолько малы, насколько это возможно, но все же в пределах диапазона.

Надеюсь, кто-нибудь может помочь! Если нет, кто-нибудь знает, где я могу найти информацию, я могу научиться кодировать себя :)

Ура и хороших выходных !!

азбука
источник

Ответы:

0

Поместите ваши значения в столбец A и в столбец B, поместите 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 решения, перечисленные в столбце D :

введите описание изображения здесь

Это основано на предложении Джона Коулмана.

Ученик Гэри
источник
Здравствуй! Огромное спасибо!!! Это чрезвычайно полезно! Знаете ли вы, можно ли как-нибудь получить сумму чисел в столбце D? На самом деле я работаю с числами, которые являются процентами и, следовательно, добавить до 100%. поэтому у меня есть 5 записей по 20% каждая, и я хочу найти комбинации, сумма которых равна или превышает некоторый порог, скажем, 70%, но также равна или меньше 100%. Так что было бы здорово, если бы я мог связать код с порогом так, чтобы при обновлении порога делались записи, которые суммируют или превышают этот порог. Еще раз спасибо за вашу фантастическую помощь !!!!!!!!!!
ABC
@ABC Добро пожаловать.
Студент Гари
Здравствуй! Огромное спасибо!!! Это чрезвычайно полезно! Знаете ли вы, можно ли как-нибудь получить сумму чисел в столбце D? На самом деле я работаю с числами, которые являются процентами и, следовательно, добавить до 100%. поэтому у меня есть 5 записей по 20% каждая, и я хочу найти комбинации, сумма которых равна или превышает некоторый порог, скажем, 70%, но также равна или меньше 100%. Так что было бы здорово, если бы я мог связать код с порогом так, чтобы при обновлении порога делались записи, которые суммируют или превышают этот порог. Еще раз спасибо за вашу фантастическую помощь !!!!!!!!!!
ABC
Или вы знаете, возможно ли получить выходные данные с номерами, соответствующими строкам, в которых существуют используемые записи? поэтому для чисел 5 и 6 выходной результат будет 1, 2
ABC
Хорошо, основываясь на вашем коде, я теперь понимаю, как включить порог в код.
ABC
0

Пользователи Excel довольно часто сталкиваются с этой проблемой. Существует надстройка для Excel, которая позволяет легко находить все комбинации чисел, которые соответствуют вашим критериям, называется SumMatch.

Прилагаемое изображение объясняет, как настроить критерии, чтобы увидеть все комбинации, которые им соответствуют. Изменяя критерии, вы можете получить решения, используя бесплатную пробную версию надстройки.

введите описание изображения здесь

catpol
источник