Clever-Excel-Forum

Normale Version: Excel Tabelle für Kartenspiel
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe hier mal wieder ein kleines Problem und hoffe, dass ihr mir da weiterhelfen könnt.

Und zwar spielen wir daheim Karten und möchte das Aufschreiben und Ausrechnen etwas digitaler machen.  :19:

In der angehängten Tabelle gibt es gerade 10 Spielrunden, die Einzelspiele werden auf das Gesamt entweder dazu addiert oder wenn man Gewinn -10 gerechnet.
Nun bräuchte ich aber eine Formel die:

- Sobald jemand über 100 kommt, auf das nächst höchste Ergebniss der Mitspieler springt und die Zahl rot makiert.
z.B. :
Runde 5 - Spieler 5 kommt auf 102 nun sollte sein Ergebnis auf 80 springen und rot makieren (=80 ist die nächste Zahl an 100 von Spieler 1)
Runde 8 - Spieler 1 kommt auf 130 hier sollte das Ergebnis nun auf 99 von Spieler 6 gehen und sich beim Spieler 1 rot makieren.

Ihr könnt da auch noch gerne eine Zeile/Spalte einfügen, wenn das notwenig ist.
Evtl bräuchte ich das Ganze dann auch für 10 Spieler.

Ich hoffe, ich konnte das einigermaßen erklären was ich bräuchte. Wenn nicht, einfach nachfragen.  :49:

Schon mal wieder vielen Dank für eure Mühen.
Viele Güße
Christian
Hallo Christian,

füge diesen Code ins Modul des Tabellenblattes ein, in dem deine Spieleliste liegt (Rechte Maustaste auf das Registerblatt --> Code anzeigen):

Code:
Sub test()
Dim lastCol As Integer
Dim Zeile As Integer
Dim Wert As Double
Dim i As Integer

lastCol = Cells(3, Columns.Count).End(xlToLeft).Column - 1
Zeile = Cells(Rows.Count, 2).End(xlUp).Row

Wert = 0

For i = 3 To lastCol Step 2
   If Cells(Zeile, i) > Wert And Cells(Zeile, i) < 100 Then
       Wert = Cells(Zeile, i)
   End If
   If Cells(Zeile, i) >= 100 Then
       Cells(Zeile, i).ClearContents
   End If
Next i

For i = 3 To lastCol Step 2
   If Cells(Zeile, i) = "" Then
       Cells(Zeile, i) = Wert
       Cells(Zeile, i).Interior.Color = 255
   End If
Next i

End Sub

Zur Erklärung: Ich bin jetzt davon ausgegangen, dass das Layout so bleibt, wie in deiner Beispieldatei. Auch, dass der "Betrag" (im Beispiel in Spalte N) nach der letzten Person steht. Falls sich das ändert, müsste man den Code geringfügig anpassen. Wieviele Spieler du einfügst, ist unerheblich, der Code ermittelt das automatisch.

Trage nach jedem Spiel die Punkte ein und löse den Code dann händisch aus, dies machst du am besten, indem du den Code mit einem Button verknüpfst. Es wird dann immer die letzte gefüllte Zeile abgefragt und bearbeitet.

Nur für mein Verständnis - in Rund 4 hätte Person 5 auch schon als Treffer zählen müssen, da die 100 Punkte ja erreicht wurden. Falls es so gewünscht ist, dass erst über 100 Punkte der Spielstand korrigiert wird, müsstest du in der Zeile
Code:
If Cells(Zeile, i) >= 100 Then
das Gleichheitszeichen entfernen.
Hallo Berni,

also ich habe in der Tabelle jetzt mal deinen Code eingetragen. Scheint super zu funktionieren.

------
Nur für mein Verständnis - in Rund 4 hätte Person 5 auch schon als Treffer zählen müssen, da die 100 Punkte ja erreicht wurden. Falls es so gewünscht ist, dass erst über 100 Punkte der Spielstand korrigiert wird, müsstest du in der Zeile
----
Das passt so, erst über 100 Punkte soll der Spielstand korrigiert werden. Habe das = rausgenommen.

- Wie kann ich den jetzt den Code auf einen Button verknüpfen? z.B. Enter oder F1
- Und gäbe es noch eine Möglichkeit, dass die noch nicht gespielten Spiele nicht bei Gesamt zu sehen sind?
In der Tabelle sind jetzt 3 Spiele gemacht, der Gesamtpunkte stand wird aber von 4-10 schon angezeigt.

Viele Grüße
Christian
Hallo Christian,

um den Button einzufügen, musst du zuerst die Registerkarte "Entwicklertools" einblenden. Wie das geht, siehst du hier:
https://support.office.com/de-de/article...fd9bea2d45

Gehe dann zur Registerkarte, wähle Einfügen - Formularsteuerelemente - Schaltfläche und ziehe dann an einer beliebigen Stelle im Tabellenblatt die Schaltfläche auf.
Es öffnet sich ein Dialogfenster, in dem du das Makro auswählen und zuweisen kannst.

Ändere deine Formel einfach wie folgt
Code:
=WENN(B5="";"";C4+B5)
Das kopierst du dann in die anderen Zellen für die Punkteberechnung.
Hallo Berni,

mensch das klappt ja alles super. Schon mal besten Dank.

Jetzt habe ich diese Schaltfläche generiert, so dass ich einen Button zum drücken hab. TOP.

Und nun noch die letzten Varianten:

Gäbe es noch eine Möglichkeit, den Betrag hinten automatisch berechnen zu lassen?
Also am Anfang zahlen alle 0,10€ * 6 Spieler sind die 0,60 €.
Pro Runde zahlt jeder 0,10€ außer der Gewinner. Somit kommen in diesem Fall pro Runde 0,50 € dazu.
Außer einer hat ein rotes Feld, dieser müsste dann nochmal 0,10€ extra zahlen.

Und dann noch die doppel Runde (flash):
So das wenn man in diesem Beispiel in der Zeile O7 bei Spiel 4 ein F einträgt, sollten alle Einzelspiel Ergebnisse in dieser Runde verdoppelt werden. Also z.B. statt Spieler1 34 Punkte nun 68 Punkte und Spieler3 (Gewinner der Runde) kriegt statt -10 Punkte nun -20 Punkte auf das Gesamtergebnis berechen. Des Weiteren sollte der Betrag hinten nicht mit 0,10€ sondern mit 0,20 € pro Spieler gerechnet werden + 0,10 € wenn jemand ein rotes Feld dazu hat.

Könnte man das noch irgendwie hinterlegen?
Vielleicht auch so, dass es egal ist ob da nun 6 oder 10 Personen spielen.

Mega Dankeschön, wenn das klappt!! Aber auch so ist es schon absolut gelungen.

Gruß
Christian
Bittesehr. Nur wäre es beim nächsten Mal schön, wenn du gleich alle Anforderungen auf einmal bekannt gibst. Du magst bei dir in der Arbeit vermutlich auch nicht, wenn du was erledigst und dann kommen noch 3 Sonderwünsche?  :21:

Code:
Sub test()
Dim lastCol As Integer
Dim Zeile As Integer
Dim Wert As Double
Dim i As Integer
Dim Betrag As Double
Dim Verdoppler As Integer

lastCol = Cells(3, Columns.Count).End(xlToLeft).Column - 1
Zeile = Cells(Rows.Count, 2).End(xlUp).Row

Wert = 0
Betrag = 0.1 * ((lastCol - 1) / 2) - 0.1        'Anzahl Mitspieler - 1 x 0,10 €
Verdoppler = 1

If MsgBox("Ist dies eine Flashrunde?", vbYesNo) = vbYes Then
   Cells(Zeile, lastCol + 2) = "F"
   Verdoppler = 2
   Betrag = Betrag * Verdoppler
End If

For i = 3 To lastCol Step 2
   If Verdoppler = 2 Then Cells(Zeile, i - 1) = Cells(Zeile, i - 1) * Verdoppler
   
   If Cells(Zeile, i) > Wert And Cells(Zeile, i) <= 100 Then
       Wert = Cells(Zeile, i)
   End If
   If Cells(Zeile, i) > 100 Then
       Cells(Zeile, i).ClearContents
   End If
Next i

For i = 3 To lastCol Step 2
  If Cells(Zeile, i) = "" Then
      Cells(Zeile, i) = Wert
      Cells(Zeile, i).Interior.Color = 255
      Betrag = Betrag + 0.1
  End If
Next i

Cells(Zeile, lastCol + 1) = Betrag

End Sub


Zitat:Vielleicht auch so, dass es egal ist ob da nun 6 oder 10 Personen spielen.
Dazu hatte ich ja im ersten Beitrag schon geschrieben
Zitat:Wieviele Spieler du einfügst, ist unerheblich, der Code ermittelt das automatisch.
Wichtig ist eben nur, dass der Erstbetrag (also im Beispiel die 0,60 €) immer in Zeile 3 steht und rechts davon nichts mehr kommt. Sonst rechnet das System falsch.


So, und zum Schluss noch die alles entscheidende Frage: WAS spielt ihr da eigentlich und wohin muss ich kommen (dass das Bier kaltgestellt ist, davon gehe ich aus)?  :05:
Ja ich werde verrückt! Das funktioniert ja alles wie ich es mir vorstelle. MEGA!
Und sorry für die stückweise Informationen.

Wir spielen da in der Familie ein Kartenspiel ähnlich Rommé, nur eben in abgewandelter Form.
Kaltes Bier = Standard in Bayern  :21:  :19: