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 - плохо (не следует считать), потому что группа больше, чем необходимо, хотя она все еще находится в пределах диапазона.

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

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

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

2 ответа2

0

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

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

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:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .