VBA und Allgorithmus?

3 Antworten

Wie die anderen schon sagen, ist "kosteninnen" eine Funktion, der du auch die Funktionsargumente übergeben musst. Also z.B.:

kostenaussen = (kosten + zusatzkosten + kosteninnen(innenvolumen(laenge-2, breite-2, hoehe-2))) * rabatt_1

Wobei beim Rest des Codes auch einige Dinge falsch oder zumindest anders sind, als ich sie verstehe:

  • Beim Innenvolumen sollen pro mm³ 4 bzw. 3 Cent berechnet werden. Deine Funktion gibt insgesamt 4 Cent zurück, bzw. insgesamt 3 Cent, wenn das Volumen größer als ein Liter ist
  • Außerdem sollen die 3 Cent ab dem 1000sten mm³ berechnet werden. Ich verstehe das so, dass bei einem Volumen über 1000mm³ für die ersten 1000mm³ insgesamt 40€ berechnet werden sollen und für alles, was über die 1000mm³ hinausgeht nur noch 3 Cent pro mm³. Also z.B. bei einem Gesamtvolumen von 1600mm³: 1000 * 0,04€ + 600 * 0,03€ = 58€
  • Bei den Kostenaußen soll auch pro Millimeter ein Betrag berechnet werden und du hast nur einen Gesamtbetrag eingebaut
  • Bei den If-Blöcken in der Kostenaußen-Funktion musst du drauf achten, dass jeder If-Block auch wieder mit einem End If geschlossen wird. So, wie es jetzt ist, wird die Breite nur geprüft, wenn die Höhe über 150mm ist und die Länge wird nur geprüft, wenn zusätzlich die Breite unter 10mm ist. Die ganze Funktion gibt nur ein Ergebnis zurück, wenn die Höhe über 150mm ist und die Breite unter 10mm ist.
  • Wenn die Breite unter 10mm ist und gleichzeitig die Länge über 100mm ist, überschreiben die Zusatzkosten sich gegenseitig, so dass du am Ende nur Zusatzkosten von 0.3 hast, obwohl du eigentlich 0.9 haben wolltest.
  • Du hast bei den Außenkosten einen Grundpreis von 1,50€ hinterlegt, obwohl es nur 1,20€ sein sollen.

Kann natürlich sein, dass ich an der Aufgabe auch was falsch verstehe, weil da astronomische Kosten rauskommen würden. Eine Kiste in der Größe eines Schuhkartons würde knappe 230.000€ kosten. Kann aber auch sein, dass das absichtliche Irreführung des Lehrers ist. Wie der Mann, der 30 Wassermelonen kauft oder der Hund, der 40km/h schnell laufen kann und daher in einer Woche 6720km schafft, ohne schlapp zu machen.

Wie die anderen schon angemerkt haben: Die Aufgabe lässt sich auch mit den Excel-Tabellenfunktionen lösen und soll vielleicht gar nicht in VBA gelöst werden.

Hier mal meine Interpretation des Codes:

Option Explicit

Public Function kostenKiste(laenge, breite, hoehe) As Currency
    Dim innenVolumen As Long
    innenVolumen = (laenge - 2) * (breite - 2) * (hoehe - 2)
    
    Dim innenKosten As Currency
    If innenVolumen <= 1000 Then
        innenKosten = 0.04 * innenVolumen
    Else
        innenKosten = (1000 * 0.04) + ((innenVolumen - 1000) * 0.03)
    End If
    
    ' Bei den Außenkosten wäre auch zu überlegen, ob die Werte für
    ' Länge, Höhe und Breite automatisch so sortiert werden sollen,
    ' dass immer die günstigste Lösung ermittelt wird
    
    Dim kostenLaenge As Currency, kostenBreite As Currency, kostenHoehe As Currency
    kostenHoehe = hoehe * 1.2
    kostenLaenge = laenge * IIf(laenge > 100, 1.5, 1.2)
    kostenBreite = breite * IIf(breite < 10, 1.8, 1.2)
    
    ' Anders, als bei den meisten anderen Programmiersprachen gibt VBA nicht
    ' sofort einen Wert zurück, wenn der Rückgabewert feststeht, daher kann
    ' man dem Rückgabewert etwas zuweisen und es nachträglich bei Bedarf ändern
    kostenKiste = innenKosten + kostenHoehe + kostenLaenge + kostenBreite
    
    If hoehe >= 150 Then kostenKiste = kostenKiste * 0.87
End Function

Wenn Du kosteninnen() aufrufst, erwartet die Funktion als Argument das Innenvolumen. Das fehlt hier.

onek1506 
Fragesteller
 16.11.2023, 16:39

vielen Dank dir für den Hinweise, da ich erst neu mit VBA anfange, magst du kurz beschreiben wo genau ich jetzt was ändern muss

0
verreisterNutzer  16.11.2023, 16:53
@onek1506

Du solltest dir vllt erstmal ein Buch dazu kaufen und es ordentlich lernen. Das bringt dir mehr als sowas. Es gibt wirklich geniale Fachliteratur, auch zu vba.

0
onek1506 
Fragesteller
 16.11.2023, 16:59
@verreisterNutzer

Ja ist das stimmt, ist tatsächlich eine Aufgabe aus Wirtschaftsinformatik und erst am Anfang des Semesters

0
verreisterNutzer  16.11.2023, 17:01
@onek1506

Wie gesagt, Buch hilft. War bei mir auch so :)

Du brauchst erstmal einen grundlegenden Blick für die Sprachen, dann erklärt sich wirklich viel selbst. Das bringt nix, wenn man dir einfach nur zeigt wie der Code aussehen muss. Du musst ihn verstehen.

1

Deine Funktion "kosteninnen" benötigt einen parameter. Dieser muss mitgegeben werden, damit diese Funktion vollständig aufgerufen wird.
kosteninnen(Zahl für das innenvolumen)
==
Aber: Bist du sicher dass dies mit VBA gelöst werden muss ?
Dies ist alles aus meiner Sicht mit native Excel Formeln möglich.