Einsargen (13 Striche sammeln), Anzahl Kegler verringert sich
#1
Hallo Forumslesende
Einsargen - heisst, seinen nächsten Mitspieler ins Nirvana zu sckicken.
Somit werde ich nun mal mit Einsargen beginnen.
Hier ist es ein wenig verzwickt. Pro Spieler hat man 13 Striche zu kassieren bevor man stirbt.
Gekegelt wird reihum - Wurfanzahl wird im Uhrzeigersinn weiter gezählt, bis zum Treffer. Und so weiter ...
Hat ein Kegler alle 13 Striche, scheidet sie/er aus. Somit fängt hier jetzt das Problem an. Die Anzahl der Werfenden hat sich verändert, somit muss nun die ganze Formelgeschichte anders angepackt werden.
Wir sind oft 8 Kegler, aber auch mal 6 oder mehr als 8.
Ein Kreis mit Anzahl Anwesenden (sagen wir mal Tortenstücke) wird gezeichnet.
Die Position oben fängt an zu werfen, die Holzanzahl wird nun im Uhrzeigersinn bis zum Treffer gezählt. Der besagte Kegler erhält einen Strich.
8 Personen wie in der Datei zu erkennen ist.
Kegler 2 hat eine 8 geworfen, sich selber getroffen.
Eine kleine Anschaudatei anbei

.xlsx   Einsargen.xlsx (Größe: 19,21 KB / Downloads: 7)
Frage, nur WIE???

Hoffe auf geduldige Mitschreiber/Formelgeber
Top
#2
Hallo @all

.xlsx   Einsargen_Probe01.xlsx (Größe: 31,12 KB / Downloads: 4)
Zelle "E42"
Code:
=WENN(AA42=8;1;0)+WENN(AA43=7;1;0)+WENN(AA44=6;1;0)+WENN(AA45=5;1;0)+WENN(AA46=4;1;0)+WENN(AA47=3;1;0)+WENN(AA48=2;1;0)+WENN(AA49=1;1;0)+WENN(AA49=9;1;0)+WENN(AA42=0;1;0)
Habe mal mit der Formel auf 8 teilnehmer abgezielt.
Soweitsogut, nur, aber W6 fängt es nun an in die nicht gewollte Richtung zu laufen

Da weiß ich nicht weiter.
Wie sage/schreibe ich es jetzt; Teiln. "A" ist raus, zähle/addiere nun mit den neuen Anwesenden-Wert Zelle "C41" ?
Top
#3
Hallo Frank,

ich glaube, mit einer Formel zum "Werteholen" wird das ganze recht komplex. Neben dem geworfenen Wert in Abhängigkeit vom Werfer müsstest Du ja auch noch berücksichtigen, dass zwischendrin ein oder mehrere Werfer schon ausgefallen sein könnten, und, wie Du auch in der Aufgabenstellung schreibst, eine unterschiedliche Anzahl Werfer vorkommen kann.

Ich denke, für eine Formellösung müsstest Du zuerst einmal für jeden Wurf eines Spielers eine eigene Eingabezelle vorsehen. Nur eine Zelle wird ohne VBA nix. Und wenn einmal VBA im Spiel ist, kann man auch alternativ darüber nachdenken, das komplett in VBA umzusetzen. Was die cleverere Lösung ist kann ich noch nicht abschätzen. Aber ich denke, wir bekommen das hier in unserem Excel-Forum auch noch hin Exclamation.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
Hallo Frank,

ich habe hier mal die von mir erwähnte VBA-Lösung. Basis ist eine Tabelle der Spieler, Würfe und Stände. Für eine "grafische" Ausgabe kannst Du die Stände ja per Formel aus dieser Excel-Tabelle irgendwohin übernehmen. Am code ist noch eine Kleinigkeit für die Ausgabe der Stände usw. einzubauen - siehe Kommentare. Ob jemand eine clevere Formellösung findet - wer weiß ... Huh

Tabelle:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABC
1NameWurfStand
212 
32 13
43 13
54  
65  
76  
873 
98  
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg

Code:
Sub Zaehlen()
'Variablendeklarationen
'Integer
Dim iRowEintrag%, iCnt%
'mit der aktiven Zelle - Cursor auf die Zelle mit dem Eintrag stellen!
With ActiveCell
  'Wenn in der Zelle was steht und es ist Spalte 2, dann
  If .Value <> "" And .Column = 2 Then
    'Zeilennummer für Eintrag berechnen, "Restwert" (mod) anhand
    'Zellwert, Zeile der Zelle,
    'Anzahl der Mitspieler anhand Eintraege in Spalte a - 1 (- 1 wegen Ueberschriften)
    iRowEintrag = (.Value + .Row) Mod (WorksheetFunction.CountA(Columns(1)) - 1)
    'Schleife solange im Zielstand die 13 schon erreicht ist
    Do While Cells(iRowEintrag, 3) = 13
      'Schleifenzaehler für Do hochsetzen
      iCnt = iCnt + 1
      'Zeilennummer fuer Eintrag neu berechnen
      'Ist noetig, falls wir wieder oben beginnen muessen
      iRowEintrag = (.Value + .Row + iCnt) Mod (WorksheetFunction.CountA(Columns(1)) - 1)
    'Ende Schleife solange im Zielstand die 13 schon erreicht ist
    Loop
    'Ausgabe der Zeilennummer
    'Hier muesste der Stand eingetragen werden und ggf. der Wurfeintrag entfernt
    MsgBox iRowEintrag
  'Ende Wenn in der Zelle was steht und es ist Spalte 2, dann
  End If
'Ende mit der aktiven Zelle - Cursor auf die Zelle mit dem Eintrag stellen!
End With
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
(06.09.2014, 08:21)schauan schrieb: ...ist noch eine Kleinigkeit für die Ausgabe der Stände usw. einzubauen...
Hallo André, vorab "Hut abnehm und tiefer Beuger"
Habe anstatt Msgbox, Hinweis in Zelle D10 gesetzt.
Die Wurffelder mit Dropdown versehen (A15 - A24; Zahlen 1-9 und 0)
Name 1 = Wurf 1 = Treffer Zeile 3
Name 2 = Wurf 2 = Treffer Zeile 5
Name 3 = Wurf 3 = Treffer Zeile 7
Name 4 = Wurf 4 = Treffer Zeile 9
Name 5 = Wurf 5 = Treffer Zeile 11
Name 6 = Wurf 6 = Treffer Zeile 13
Name 7 = Wurf 7 = Treffer Zeile 15
Name 8 = Wurf 8 = Treffer Zeile 1
hmmmm !?!
anbei eine kleine Tabelle wie es eventuell klappen könnte, aber nur eventuell.
.xlsm   M.xlsm (Größe: 22,31 KB / Downloads: 4)
Top
#6
Hallo Frank,

das erste "kleine" Problemchen sind die Einträge in A15:A24.
Siehe mein Kommentar
'Anzahl der Mitspieler anhand Eintraege in Spalte a - 1 (- 1 wegen Ueberschriften)

Das Makro ist ja für eine beliebige Anzahl Mitspieler, theoretisch kannst Du die kommplette Spalte A mit Spielern auffüllen Wink (ausgenommen die Überschrift)

Du müsstest jetzt entweder die Einträge aus A15:A24 anderswo platzieren oder statt -1 dann 10 mehr abziehen, also -11 schreiben oder statt columns(1) dann Range("A1:A14") nehmen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
(06.09.2014, 13:09)schauan schrieb: ...das erste "kleine" Problemchen sind die Einträge in A15:A24...
Hallo Andrè,
habe das ganz ehrlich übersehen. Auswahlliste nach R verschoben (R15:R24).
Nun sieht es anders aus, Treffer werden richtig gestellt.
Da ist noch ein Fehler, gerade entdeckt.
B2 mit 6 füllen, Button klicken, sollte eigentlich "8" angezeigt werden
Fehlermeldung


Da bin ich jetzt aber ganz Huh


IdeaWeitere GedankenIdea
Jede angefangene Runde bekommt in der Zeile 1 ein "X", soll dann solange durchlaufen werden bis alle Teilnehmer einen Wurf gesetzt haben. Ist das der Fall, Sprung in die nächste Spalte Anfang Zeile 2.
Bekommt eine Zeile mehrere Treffer, müssten diese nach rechts angezeigt werden.
Jetzt meine Frage:
Wie die Treffer festsetzen, damit in Spalte R alle "X" addiert und als Ergebnis in Spalte C korrekt angezeigt werden?

An alle Problembeseitiger vorab Danke
Top
#8
Hallo Frank,

der iRow in den beiden Zeilen zum Berechnen von iRowEintrag war im geposteten code an der falschen Stelle und in der Do - Bedingung stand 1 statt 13 - wahrscheinlich hab ich den Endstand nicht gespeichert und einen Zwischenstand gepostet Sad .

Zum Zählen der Treffer in Spalte C habe ich noch diese Zeile hinzugefügt:
Cells(iRowEintrag, 3) = Cells(iRowEintrag, 3) + 1

Ich könnte übrigens nicht erst ab Spalte D in die nächste springen, wenn alle einen Wurf hatten. Was ist, Wenn Spieler 1 13 mal hintereinander 9 wirft? Dann waren die anderen noch gar nicht dran.

So sollte es klappen (ohne Ausfüllen ab Spalte D):

Code:
Sub Zaehlen()
    Cells(10, 4).ClearContents
                                  'Variablendeklarationen
                                  'Integer
Dim iRowEintrag%, iCnt%
                                  'mit der aktiven Zelle - Cursor auf die Zelle mit dem Eintrag stellen!
With ActiveCell
                                  'Wenn in der Zelle was steht und es ist Spalte 2, dann
  If .Value <> "" And .Column = 2 Then
                                  'Zeilennummer für Eintrag berechnen, "Restwert" (mod) anhand
                                  'Zellwert, Zeile der Zelle,
                                  'Anzahl der Mitspieler anhand Eintraege in Spalte a - 1 (- 1 wegen Ueberschriften)
    iRowEintrag = (.Value) Mod (WorksheetFunction.CountA(Columns(1)) - 1) + .Row
                                  'Schleife solange im Zielstand die 13 schon erreicht ist
    Do While Cells(iRowEintrag, 3) = 13
                                  'Schleifenzaehler für Do hochsetzen
      iCnt = iCnt + 1
                                  'Zeilennummer fuer Eintrag neu berechnen
                                  'Ist noetig, falls wir wieder oben beginnen muessen
      iRowEintrag = (.Value + iCnt) Mod (WorksheetFunction.CountA(Columns(1)) - 1) + .Row
                                  'Ende Schleife solange im Zielstand die 13 schon erreicht ist
    Loop
    'MsgBox iRowEintrag
     Cells(iRowEintrag, 3) = Cells(iRowEintrag, 3) + 1
     Cells(10, 4) = iRowEintrag
                                  'Ausgabe der Zeilennummer
                                  'Hier muesste der Stand eingetragen werden und ggf. der Wurfeintrag entfernt
                                  'Ende Wenn in der Zelle was steht und es ist Spalte 2, dann
  End If
                                  'Ende mit der aktiven Zelle - Cursor auf die Zelle mit dem Eintrag stellen!
End With
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#9
(07.09.2014, 07:00)schauan schrieb: ...So sollte es klappen...
HAllo André & @all
Die Fehlermeldung ist eliminiert, die Werte werden addiert.

Nun ist mir im Verhalten der einzelnen Wurfwerte aufgefallen das hier weiter nach unten gezählt wird.
Es erfolgt kein Umbruch (weiß nicht wie anders benennen), also sofern Zeile 9 erreicht wird in Zeile 2 nicht fortgefahren.
Einzige richtige Zahl ist hier die 8, siehe angehangene Datei

.xlsm   M_mit_fehler.xlsm (Größe: 25,21 KB / Downloads: 3)
Farbunterlegte Felder sind so zu lesen:
- dunkelgrün_____richtig
- ocker__________falsch
- blau___________falsch, wird nicht gefüllt
- grün__________richtig

Muss die Namensspalte erweitert werden oder eher mit dem Namensmanager irgendwie eingegrenzt werden.

Bitte um Hilfe
Top
#10
Hallo Frank,

schwere Geburt ...

Nächster Versuch, diesmal intensiv getestet und diesmal scheint's zu klappen. Falls nicht, Du findest mich hier im Forum Wink

Code:
Sub Zaehlen()
    Cells(10, 4).ClearContents
                                  'Variablendeklarationen
                                  'Integer
Dim iRowEintrag%, iCnt%
                                  'mit der aktiven Zelle - Cursor auf die Zelle mit dem Eintrag stellen!
With ActiveCell
                                  'Wenn in der Zelle was steht und es ist Spalte 2, dann
  If .Value <> "" And .Column = 2 Then
                                  'Zeilennummer für Eintrag berechnen, "Restwert" (mod) anhand
                                  'Zellwert, Zeile der Zelle,
                                  'Anzahl der Mitspieler anhand Eintraege in Spalte a - 1 (- 1 wegen Ueberschriften)
    iRowEintrag = (.Value + .Row - 1) Mod (WorksheetFunction.CountA(Columns(1)) - 1)
    If iRowEintrag = 0 Then
       iRowEintrag = WorksheetFunction.CountA(Columns(1))
    ElseIf (.Value + .Row - 1) > WorksheetFunction.CountA(Columns(1)) - 1 Then
      iRowEintrag = iRowEintrag + 1
    End If
                                 'Schleife solange im Zielstand die 13 schon erreicht ist
    Do While Cells(iRowEintrag, 3) = 13
                                  'Schleifenzaehler für Do hochsetzen
      iCnt = iCnt + 1
                                  'Zeilennummer fuer Eintrag neu berechnen
                                  'Ist noetig, falls wir wieder oben beginnen muessen
      iRowEintrag = (.Value + .Row - 1 + iCnt) Mod (WorksheetFunction.CountA(Columns(1)) - 1)
      If iRowEintrag = 0 Then
        iRowEintrag = WorksheetFunction.CountA(Columns(1))
      ElseIf (.Value + .Row - 1) > WorksheetFunction.CountA(Columns(1)) - 1 Then
        iRowEintrag = iRowEintrag + 1
      End If
                                  'Ende Schleife solange im Zielstand die 13 schon erreicht ist
    Loop
    'MsgBox iRowEintrag
                                  'Zum Zählen der Treffer in Spalte C habe ich noch diese Zeile hinzugefügt
     Cells(iRowEintrag, 3) = Cells(iRowEintrag, 3) + 1
     Cells(10, 4) = iRowEintrag
    
                                  'Ausgabe der Zeilennummer
                                  'Hier muesste der Stand eingetragen werden und ggf. der Wurfeintrag entfernt
                                  'Ende Wenn in der Zelle was steht und es ist Spalte 2, dann
  End If
                                  'Ende mit der aktiven Zelle - Cursor auf die Zelle mit dem Eintrag stellen!
End With
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


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