Fahrscheinautomat

Jchroppeljrchase

Grünschnabel
Hallööö..


Ich hab mal eine Frage.

Kann mir vielleicht irgendwer sagen, wie ich eine Schleife im VBA programmieren kann, die mir folgendes kann:

Ich habe eine Tabelle die so aussieht:


Rückgabe:
Höhe des Wechselgeldes​
20 euro .............. [hier sollte die Anzahl stehen wie oft ich es bekommen]
10 euro .............. " - "
5 euro .............. " - "
....
10 cent .............. " - "
5 cent .............. " - "


Und jetzt bräuchte ich eine Schleife die mir ausrechnet, wie oft ich nun zB bei einem Wechselgeld von 30,50 Euro einen 20-Euro-Schein zurückbekomme, einen 10-Euro-Schein ................ einen 5-cent usw.


Ich habe wirklich keine Ahnung mehr was ich noch alles ausprobieren soll.

Ich hoffe irgendjemand blickt da durch. [ich tu es auf alle Fälle nicht mehr]


Danke schon einmal im Vorraus.


lg Kerstin



ps: Ich weiß ich bin keine Meister im beschreiben, aber ich habe mein Bestes gegeben! =)
 
Ich hab hier einen Code, den hab ich schnell in Word-VBA zusammengeschustert (daher keine Zellendefinitionen), mit Anpassung sollte er aber nach Excel-VBA leicht zu übernehmen sein:
Visual Basic:
Sub Restgeld()
 'Dimensionierungen
 Dim Rest As Single, Rückgabe As String, rg As Integer, Werte As String, aWerte() As String
 'Ich leg hier mal was fest, du übernimmst es einfach aus einer Zelle
 Rest = 26.35 'CSng(Val(Selection.Text))
 'Welche Scheine/Münzen werden zurückgegeben
 Werte = "20;10;5;1;0.5;0.2;0.10;0.05"
 'Am Semikolon splitten
 aWerte() = Split(Werte, ";")
 'und die Scheine/Münzen in einer Schleife abarbeiten
 For cnt = 0 To UBound(aWerte)
  'Anzahl der Scheine/Münzen für den Wert ermitteln
  rg = Int(Rest / Val(aWerte(cnt)))
  'Restgeld nach Abzug der oben ermittelten Scheine/Münzen berechnen
  Rest = Rest - rg * Val(aWerte(cnt))
  'Ich sammel hier alles in einem String, du kannst es hintereinander in Zellen schreiben
  Rückgabe = Rückgabe & rg & " x " & aWerte(cnt) & ", "
 Next cnt
 'Ich geb es per MessageBox aus
 MsgBox Rückgabe
End Sub


Der Doc!
 
Bissl hingewurstelt aber funktioniert :)

Code:
Dim wechselgeldgesamt As Currency
Dim scheinemuenzen(11) As Variant
Dim stringanzahlscheinemuenzen(11) As String
Dim integeranzahlscheinemuenzen(11) As Integer
Private Sub Form_Load()
scheinemuenzen(1) = 200
scheinemuenzen(2) = 100
scheinemuenzen(3) = 50
scheinemuenzen(4) = 20
scheinemuenzen(5) = 10
scheinemuenzen(6) = 5
scheinemuenzen(7) = 2
scheinemuenzen(8) = 1
scheinemuenzen(9) = 0.5
scheinemuenzen(10) = 0.2
scheinemuenzen(11) = 0.1

wechselgeldgesamt = 30.5


For i = 1 To 11
  stringanzahlscheinemuenzen(i) = wechselgeldgesamt / scheinemuenzen(i)
  integeranzahlscheinemuenzen(i) = Left(stringanzahlscheinemuenzen(i), 1)
  If integeranzahlscheinemuenzen(i) > 0 Then
    wechselgeldgesamt = wechselgeldgesamt - scheinemuenzen(i)
  End If
  MsgBox integeranzahlscheinemuenzen(i) & " mal " & scheinemuenzen(i) & "Schein/Münze"
Next i

End Sub

Edit: Verdammt DrSoong war schneller und seins sieht auch viel schöner aus :)
 
Zuletzt bearbeitet:
Puh ...
das schaut ganz schön kompliziert aus!
Aber müsste ich mal probieren ob das geht..
Mein Ansatz hat ein wenig sehr viel anders ausgesehen ... ^^

Aber jetzt habe ich noch ein Problem...
Bei diesem "Fahrscheinautomat" werden die Werte aus dem Excel-Datenblatt selber genommen...

Eig. würde es mir reichen, wenn ich wüsste was ich eingeben muss, damit ich per Schleife meine Zeile mit den Werten, nach unten verschieben kann.
bzw. er mir dann die Anzahl der bestimmten Scheine, Münzen,... in die Spalte daneben schreibt...

[Ich hoffe irgendwer kennt sich jetzt noch aus... ^^ ]

Aber schon einmal tausenddank für die bisherige Hilfe.


lg Kerstin
 
Ein bißchen Eigeninitiative setz ich voraus, ich hab meinen Code ja auch so kommentiert, dass er verständlich sein sollte.

Außerdem sollte sich über die Excel-VBA-Suche ja herauskriegen lassen, dass man eine Zelle über die .Cells()-Eigenschaft auslesen bzw. beschreiben kann:
Visual Basic:
'Zelle B3 auslesen:
Wert = ActiveSheet.Cells(3, 2).Value

'Zelle D6 beschreiben:
ActiveSheet.Cells(6,4).Value = Wert
Diese Erkenntnis, kombiniert mit meinem oder dem Code von Woll0r ergibt das gewünschte Ergebnis, mit dem Nebeneffekt, dass du dabei auch selbst was gelernt hast. :D


Der Doc!

PS: @Woll0r: Sieht nur schöner aus, weil ich die VB-Tags ([vb] bzw. [/vb]) benutzt habe.
 
Zuletzt bearbeitet:
Zurück