AW: Teilsummenproblem
27.02.2019 16:09:19
Sven
Hallo Leute,
über die Suche dieses Forums habe ich diesen Beitrag gefunden:
https://www.herber.de/forum/archiv/1028to1032/1031475_Welche_Kombinationen_ergeben_Summe.html
Den Code finde ich super, er funktioniert. Aber: Ich verstehe ihn nicht ganz. Leider verstehe ich das Forum hier zu wenig, um eine Möglichkeit des Antwortens auf Erich G.s Beitrag zu verfassen.
Kann mir jemand von Euch sagen, wie die Boolean-Werte (pro Summand im Array) und zusätzlich "umsch" funktionieren?
Ich habe den Code schon ordentlich reduziert und ihn um "Schönheiten", wie die Zeitberechnungen etc. bereinigt, aber dennoch blicke ich das Konzept nicht ganz.
Option Explicit
Sub Summanden_ermitteln()
Dim intAnzSummanden As Integer
Dim i As Long
Dim j As Long
Dim k As Long
Dim Atst As Double
Dim Amax As Double
Dim dblZielsumme As Double
Dim erg As String
Dim umsch As Boolean
Dim arrB() As Boolean
intAnzSummanden = Cells(Rows.Count, 1).End(xlUp).Row - 1
dblZielsumme = Cells(1, 5)
ReDim arrB(1 To intAnzSummanden)
k = 1
Columns("G:H").ClearContents
Cells(1, 7) = "Treffer"
Cells(1, 8) = Time
Debug.Print "Durchgänge: " & 2 ^ intAnzSummanden - 1
For i = 1 To 2 ^ intAnzSummanden - 1
Atst = 0
erg = ""
umsch = True 'Schalter für An/Aus-Wechsel
For j = intAnzSummanden To 1 Step -1
If umsch Then 'bis ein Element "Aus" war
'(Schalter auf False ist)
arrB(j) = Not arrB(j) '"An/Aus" umschalten
If arrB(j) Then umsch = False 'wenn "An"geschaltet, aufhören
End If
Atst = Atst - arrB(j) * Cells(j + 1, 1) 'addieren Spalte A, Zeilen mit "An"
If Atst > dblZielsumme Then Exit For
erg = IIf(arrB(j), "1", "0") & erg 'Einsen ("An") und Nullen ("Aus") verketten
Next j
If Atst = Amax Then
If Atst > Amax Then Amax = Atst
Cells(3, 5) = erg
If Amax = dblZielsumme Then
k = k + 1
DoEvents
Cells(k, 7) = erg
Cells(k, 8) = Time
End If
End If
Next i
Cells(3, 5).Select
End Sub
Grüße
Sven