Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Berechnung maximaler Betrag unter Bedingung
#1
Hallo zusammen,

ich stehe gerade etwas auf dem Schlauch ;)

Ich möchte aus einer Zahlenreihe z.B. {22,40;6,40;16,50;57,65;15,75;2,80;11,00;3,99} den maximalen Betrag bis 50 errechnen.

Hat jemand eine Idee, wie die Funktion hierfür aussehen könnte?

Lg und danke für eure Hilfe,

Julian
Antworten Top
#2
Arbeitsblatt mit dem Namen 'Tabelle1'
BCDEFGHIJK
422,46,45057,6515,752,8113,9957,65

ZelleFormel
K4=KGRÖSSTE(B4:I4;1)
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#3
@Frogger: Der Wert, der gesucht ist, soll <=50 sein

Tabelle1

AB
122,422,4
26,4
316,5
457,65
515,75
62,8
711
83,99
Formeln der Tabelle
ZelleFormel
B1{=MAX(WENN(A1:A8<=50;A1:A8;0))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • Frogger1986
Antworten Top
#4
Danke euch für eure Hilfe!

@MisterBurns auch nicht ganz, aber etwas ungenau von mir oben erklärt.

Ziel ist es innerhalb der Zahlenreihe die Kombination in Summe der Zahlen zu finden, die am nähesten an 50 sind.

Beispiel:
22,40 + 16,50 + 6,40 + 3,99  = 49,29
6,40 + 16,50 + 15,75  + 11,00 = 49,65 <- ist näher an 50

Dementsprechend die verschiedenen Möglichkeiten durchgehen und den Betrag mit der höchsten Summe <=50 ausgeben.
Antworten Top
#5
Hi

Hier findest du Vorlagen die du an dein Problem anpassen kannst.
https://www.clever-excel-forum.de/thread-16459.html
Wenn es selbst nicht klappt mit anpassen, einfach nachfragen.

Gruß Elex
Antworten Top
#6
@Elex, danke dir

Ich komme nicht wirklich weiter.

Ich habe im unteren Code zwei Zeilen abgeändert:

If dblAktWert < dblSuchWert Then

If dblAktWert < dblSuchWert Then

Problem was ich gerade auch noch sehe ist, dass lngEbenen (Anzahl der Werte pro Kombination) unterschiedlich sein kann. Das wird dann aber out of space in der Lösung oder?

Original:
Code:
Option Explicit

Dim lngOffset As Long
Dim lngAnzwerte As Long
Dim dblAktWert  As Double
Dim dblSuchWert As Double
Dim dblKombinationen() As Double
Dim varListe As Variant
Dim rngAusgabe As Range
Const lngEbenen As Long = 4
Const dblAbweichung As Double = 0.006


Sub Machs()
varListe = ThisWorkbook.Names("Liste").RefersToRange.Value
dblSuchWert = ThisWorkbook.Names("Suchwert").RefersToRange.Value
Set rngAusgabe = ThisWorkbook.Names("Ausgabe").RefersToRange
ReDim dblKombinationen(1 To lngEbenen)

lngAnzwerte = UBound(varListe, 1)
lngOffset = 0
dblAktWert = 0
rngAusgabe.CurrentRegion = ""

If lngAnzwerte > 0 Then
   Call Recursiv(1, 1)
End If
MsgBox lngOffset & " Kombinationen gefunden."
End Sub
Sub Recursiv(ByVal lngEbene As Long, ByVal lngPos As Long)
Dim lngPosIntern As Long
Dim lngSpalte  As Long
   If lngPos <= lngAnzwerte And lngEbene <= lngEbenen Then
       For lngPosIntern = lngPos To lngAnzwerte
           dblAktWert = dblAktWert + varListe(lngPosIntern, 1)
           dblKombinationen(lngEbene) = varListe(lngPosIntern, 1)
           If Abs(dblAktWert - dblSuchWert) < dblAbweichung Then
               For lngSpalte = 1 To lngEbene
                   rngAusgabe.Offset(lngOffset, lngSpalte - 1) = dblKombinationen(lngSpalte)
               Next lngSpalte
               
               lngOffset = lngOffset + 1
           End If
           If dblAktWert < dblSuchWert + dblAbweichung Then
               Call Recursiv(lngEbene + 1, lngPosIntern + 1)
           End If
           dblAktWert = dblAktWert - varListe(lngPosIntern, 1)
       Next lngPosIntern
   End If
End Sub

Bearbeitet:
Code:
Option Explicit

Dim lngOffset As Long
Dim lngAnzwerte As Long
Dim dblAktWert  As Double
Dim dblSuchWert As Double
Dim dblKombinationen() As Double
Dim varListe As Variant
Dim rngAusgabe As Range
Const lngEbenen As Long = 4
Const dblAbweichung As Double = 0.006


Sub Machs()
varListe = ThisWorkbook.Names("Liste").RefersToRange.Value
dblSuchWert = ThisWorkbook.Names("Suchwert").RefersToRange.Value
Set rngAusgabe = ThisWorkbook.Names("Ausgabe").RefersToRange
ReDim dblKombinationen(1 To lngEbenen)

lngAnzwerte = UBound(varListe, 1)
lngOffset = 0
dblAktWert = 0
rngAusgabe.CurrentRegion = ""

If lngAnzwerte > 0 Then
   Call Recursiv(1, 1)
End If
MsgBox lngOffset & " Kombinationen gefunden."
End Sub
Sub Recursiv(ByVal lngEbene As Long, ByVal lngPos As Long)
Dim lngPosIntern As Long
Dim lngSpalte  As Long
   If lngPos <= lngAnzwerte And lngEbene <= lngEbenen Then
       For lngPosIntern = lngPos To lngAnzwerte
           dblAktWert = dblAktWert + varListe(lngPosIntern, 1)
           dblKombinationen(lngEbene) = varListe(lngPosIntern, 1)
           If dblAktWert < dblSuchWert Then                                 '<- geändert
               For lngSpalte = 1 To lngEbene
                   rngAusgabe.Offset(lngOffset, lngSpalte - 1) = dblKombinationen(lngSpalte)
               Next lngSpalte
               
               lngOffset = lngOffset + 1
           End If
           If dblAktWert < dblSuchWert Then                                 '<- geändert
               Call Recursiv(lngEbene + 1, lngPosIntern + 1)
           End If
           dblAktWert = dblAktWert - varListe(lngPosIntern, 1)
       Next lngPosIntern
   End If
End Sub
Antworten Top
#7
Hi Julian,

habe das Bsp. von @Ego mal etwas mehr an dein Vorhaben angepasst. Testen und evtl. noch nachbessern.


.xlsm   Summen Frage.xlsm (Größe: 31,98 KB / Downloads: 7)

Gruß Elex
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste