Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA- 25 Würfel verteilen

VBA- 25 Würfel verteilen
Chris
Hi Forum!
Eine kleines Würfel-Spielchen würde ich gern mit VBA in Excel umsetzen. Und zwar geht es um Folgendes:
Man hat 25 Würfel, auf denen jeweils 6 Buchstaben sind, z.B. Würfel 1: A, B, C, D, E, F ; Würfel 2: D, X, Y, Z, A, B, usw. Alle Würfel haben unterschiedliche Buchstaben drauf, deshalb nur das Beispiel für 2 Würfel.
Auf Knopfdruck auf eine Schaltfläche sollen:
In einem ersten Schritt diese 25 Würfel gewürfelt werden.
In einem zweiten Schritt die 25 gewürfelten Werte zufällig auf einer Fläche von 5x5 Zellen angeordnet werden.
Wie könnte man das umsetzen?
Anzeige
25 Würfel zufällig würfeln
23.11.2009 13:43:21
NoNet
Hallo Chris,
hier eine erste VBA-Lösung :
Sub Wuerfel25()
Dim wuerfel(1 To 25, 1 To 6)
Dim intS As Integer, intW As Integer, intZ As Integer
Dim strABC As String 'Variable für die möglichen Werte der Würfelseiten
strABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'Mögliche Werte für die einzelnen Würfelseiten
Cells.Clear 'Alle Zellen zuvor löschen - für Mehrfach-Start !
With [A1:I1]
.Value = Array("Würfel Nr.", "Zahl 1", "Zahl 2", "Zahl 3", "Zahl 4", "Zahl 5", "Zahl 6", _
"", "Matrix 5x5 :")
.Font.Bold = True
End With
For intW = 1 To 25
Cells(intW + 1, 1) = intW 'Würfelnr. ausgeben
For intS = 1 To 6
Randomize Timer 'Zufallsgenerator "Mischen"
wuerfel(intW, intS) = Mid(strABC, Int(Rnd() * Len(strABC) + 1), 1)
Cells(intW + 1, intS + 1).Value = wuerfel(intW, intS)
Next
'Würfeln und in passende Zelle der 5 x 5 Matrix schreiben :
intZ = Int(Rnd() * 6 + 1) 'die gewürfelte Zahl dieses Würfels
Cells((intW - 1) \ 5 + 2, (intW - 1) Mod 5 + 10) = wuerfel(intW, intZ)
'Gewürfelten Wert des Würfels gelb einfärben :
Cells(intW + 1, intZ + 1).Interior.Color = vbYellow
Next
Columns.AutoFit
End Sub
Das Makro funktioniert bereits, allerdings könnte es sein, dass auf einem Würfel ein "Wert" (Buchstabe) auch mal doppelt vorkommt.
Ist das erlaubt (und damit OK) oder nicht ?
Gruß, NoNet
Anzeige
AW: 25 Würfel zufällig würfeln
23.11.2009 13:55:34
Chris
Super der Code! Danke schonmal.
Momentan ist es ja so, dass ein Y theoretisch genauso oft vorkommt wie ein E.
Allerdings ist das Spielchen so ähnlich wie Scrabble und die Buchstaben auf den Würfeln sind fest vorgegeben.
D.h. ich möchte vorher die Buchstaben auf Würfel 1 (besteht bspw. aus A,B,C,D,E,F), Würfel 2 (besteht bspw. aus E,G,H,M,W,Z) usw. deklarieren.
Außerdem wäre es super, wenn mir nur die 5x5 Matrix in TAbelle1 angezeigt werden würde und die Würfel-Matrix in Tabelle 2.
Anzeige
AW: 25 Würfel zufällig würfeln mit Formel
23.11.2009 14:11:48
Chris
Auch nicht schlecht.
Aber wie auch im Beitrag von Ede sind hier die Würfel festen Feldern zugeordnet.
Die gewürfelten Ergebnisse sollen in der 5x5 Matrix zufällig verteilt werden!
Aber wie machst du denn das mit diesem grünen "mischen"-Feld? Wie hinterlege ich denn einen "Aktualisieren-Link" hinter die Ellipse?
Anzeige
AW: "Aktualisieren-Link"
23.11.2009 14:18:26
hary
Hi
Autoform in Tabelle/rechtsklick/Makro zuweisen/neu/als Code: calculate
gruss hary
hatte Deine Antwort auf Edes Loesung zu spaet gesehen:-(
Alternative : Würfelwerte in Strings vorgegeben
23.11.2009 14:13:16
NoNet
Hallo Chris,
teste mal diese Version :
Sub Wuerfel25Version2()
'23.11.2009, NoNet - www.excelei.de
Dim wuerfel()
Dim intS As Integer, intW As Integer, intZ As Integer
'Deklaration der 25 Würfel per Strings :
wuerfel() = Array("ABCDEF", "DEFGHI", "ACXEMP", "YDMERS", "TBMNKL", _
"SEWACO", "UHNVIZ", "ADWERT", "EQXIJL", "LPODSM", _
"WSDAGH", "ASDSDF", "RWEPQW", "WREWEQ", "ASDGMS", _
"WFGHIJK", "ABCDEF", "GHIJKL", "MNOPQR", "STUVWX", _
"ZABCDE", "QWERTZ", "UIOPAS", "FGHJKL", "MNBVCX")
'Alternativ : Die Strings der Würfelwerte stehen in "Tabelle1", Bereich A1:A25 :
'wuerfel = Sheets("Tabelle1").[A1:A25]
Sheets("Tabelle2").Select
Cells.Clear 'Alle Zellen zuvor löschen - für Mehrfach-Start !
[A1] = "Matrix 5x5 :"
For intW = 1 To 25
'Würfeln und in passende Zelle der 5 x 5 Matrix schreiben :
intZ = Int(Rnd() * 6 + 1) 'die gewürfelte Zahl dieses Würfels
Cells((intW - 1) \ 5 + 1, (intW - 1) Mod 5 + 2) = Mid(wuerfel(intW - 1), intZ, 1)
Next
Columns.AutoFit
End Sub
Gruß, NoNet
Anzeige
AW: Alternative : Würfelwerte in Strings vorgegeben
23.11.2009 14:21:47
Chris
Ja, so meinte ich das! Danke
Allerdings werden die Würfel nicht zufällig den Feldern der 5x5Matrix zugeordnet, sondern das Ergebnis von Würfel 1 wird immer in B1 geschrieben usw.
Wie kann man das randomisieren?
Würfelwerte in Strings - Version 3
23.11.2009 14:28:38
NoNet
Hallo Chris,
jetzt habe ich das wohl korrekt verstanden - hier Version 3 :
Sub Wuerfel25Version3()
'23.11.2009, NoNet - www.excelei.de
Dim wuerfel()
Dim intS As Integer, intW As Integer, intZ As Integer, strTemp As String
'Deklaration der 25 Würfel per Strings :
wuerfel() = Array("ABCDEF", "DEFGHI", "ACXEMP", "YDMERS", "TBMNKL", _
"SEWACO", "UHNVIZ", "ADWERT", "EQXIJL", "LPODSM", _
"WSDAGH", "ASDSDF", "RWEPQW", "WREWEQ", "ASDGMS", _
"WFGHIJK", "ABCDEF", "GHIJKL", "MNOPQR", "STUVWX", _
"ZABCDE", "QWERTZ", "UIOPAS", "FGHJKL", "MNBVCX")
'Alternativ : Die Strings der Würfelwerte stehen in "Tabelle1", Bereich A1:A25 :
'wuerfel = Application.Transpose(Sheets("Tabelle1").[A1:A25])
'Würfel mischen :
For intS = LBound(wuerfel) To UBound(wuerfel)
intW = Int(Rnd() * UBound(wuerfel)) + LBound(wuerfel)
intZ = Int(Rnd() * UBound(wuerfel)) + LBound(wuerfel)
strTemp = wuerfel(intW)
wuerfel(intW) = wuerfel(intZ)
wuerfel(intZ) = strTemp
Next
Sheets("Tabelle2").Select
Cells.Clear 'Alle Zellen zuvor löschen - für Mehrfach-Start !
[A1] = "Matrix 5x5 :"
For intW = 1 To 25
'Würfeln und in passende Zelle der 5 x 5 Matrix schreiben :
intZ = Int(Rnd() * 6 + 1) 'die gewürfelte Zahl dieses Würfels
Cells((intW - 1) \ 5 + 1, (intW - 1) Mod 5 + 2) = _
Mid(wuerfel(intW - 1 + LBound(wuerfel)), intZ, 1)
Next
Columns.AutoFit
End Sub
GRuß, NoNet
Anzeige
AW: Würfelsimulation : Beispielmappe inside
23.11.2009 14:47:26
Chris
Vielen Dank!
Das Spiel heißt übrigens Boggle. Die Spielregeln findest du hier, falls du dein eigenes Werk mal spielen möchtest: http://de.wikipedia.org/wiki/Boggle#Regeln
Anzeige
AW: VBA- 25 Würfel verteilen
23.11.2009 14:08:56
Chris
Keine schlechte Idee!
Allerdings (wenn ich das richtig sehe) wird der Würfel 1 immer dem ersten Feld zugewiesen, Würfel 2 dem zweiten usw.
Das soll aber zufällig geschehen.
Anzeige
AW: VBA- 25 Würfel verteilen
23.11.2009 14:11:45
ede
Hallo chris,
natürlich kann man das auch noch per zufall machen.
gruss
AW: @ ede,geht doch einfacher
23.11.2009 14:09:27
hary
Hi Ede
Pro zelle eine Formel
=WAHL(GANZZAHL(ZUFALLSZAHL()*6)+1;"a";"b";"c";"d";"e";"f")
nur die Buchstaben entsprechend aendern.
siehe mein Beispiel.
gruss hary
;
Anzeige
Anzeige

Infobox / Tutorial

25 Würfel in Excel zufällig verteilen


Schritt-für-Schritt-Anleitung

Um 25 Würfel in Excel zu simulieren, die jeweils mit 6 Buchstaben beschriftet sind, kannst Du folgenden VBA-Code verwenden. Dieser Code erstellt eine Zufallsverteilung der Würfelwerte in einer 5x5 Matrix.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Sub Wuerfel25()
    Dim wuerfel(1 To 25, 1 To 6)
    Dim intS As Integer, intW As Integer, intZ As Integer
    Dim strABC As String
    strABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Cells.Clear
    With [A1:I1]
        .Value = Array("Würfel Nr.", "Zahl 1", "Zahl 2", "Zahl 3", "Zahl 4", "Zahl 5", "Zahl 6", "", "Matrix 5x5 :")
        .Font.Bold = True
    End With
    For intW = 1 To 25
        Cells(intW + 1, 1) = intW
        For intS = 1 To 6
            Randomize Timer
            wuerfel(intW, intS) = Mid(strABC, Int(Rnd() * Len(strABC) + 1), 1)
            Cells(intW + 1, intS + 1).Value = wuerfel(intW, intS)
        Next
        intZ = Int(Rnd() * 6 + 1)
        Cells((intW - 1) \ 5 + 2, (intW - 1) Mod 5 + 10) = wuerfel(intW, intZ)
        Cells(intW + 1, intZ + 1).Interior.Color = vbYellow
    Next
    Columns.AutoFit
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Füge einen Button hinzu (Entwicklertools > Einfügen > Schaltfläche), um das Makro auszuführen.
  3. Weisen Sie das Makro Wuerfel25 dem Button zu.

Jetzt kannst Du auf den Button klicken, um die Würfelwerte zu simulieren und in der Matrix anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: Der Code gibt immer den gleichen Buchstaben aus.

    • Lösung: Stelle sicher, dass der Zufallsgenerator (Randomize Timer) korrekt gesetzt ist, um unterschiedliche Ergebnisse zu garantieren.
  • Fehler: Die Matrix wird nicht richtig formatiert.

    • Lösung: Überprüfe, ob die Zellen korrekt ausgewählt und formatiert sind. Der Code löscht alle Zellen vor der Ausführung, stelle sicher, dass dies gewünscht ist.

Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du die Funktion WAHL mit ZUFALLSZAHL nutzen:

  1. In einer Zelle kannst Du folgende Formel eingeben:
    =WAHL(GANZZAHL(ZUFALLSZAHL()*6)+1;"A";"B";"C";"D";"E";"F")
  2. Ziehe die Formel nach unten und rechts, um eine 5x5 Matrix zu erstellen.

Diese Methode ist einfacher, erfordert jedoch, dass Du die Buchstaben manuell in die Formel eingibst.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Würfelwerte in Excel organisieren kannst:

  • Würfel 1: A, B, C, D, E, F
  • Würfel 2: G, H, I, J, K, L

Diese Werte kannst Du in die Arrays im VBA-Code einfügen oder in den Zellen als Ausgangswerte festlegen.


Tipps für Profis

  • Verwende die Application.Transpose Methode, um die Würfelwerte aus einer Tabelle zu ziehen.
  • Erstelle eine Benutzeroberfläche mit Schaltflächen, um die Würfelsimulation zu starten und Ergebnisse anzuzeigen.
  • Experimentiere mit dem Zufallsgenerator, um verschiedene Simulationen und Spiele zu erstellen, z.B. einen Würfelsimulator für mehrere Würfel.

FAQ: Häufige Fragen

1. Muss ich VBA verwenden, um die Würfel zu simulieren?
Nein, Du kannst auch Excel-Formeln verwenden, um zufällige Buchstaben zu generieren, allerdings ist VBA flexibler.

2. Kann ich die Würfelwerte anpassen?
Ja, Du kannst die Werte in den Arrays im VBA-Code oder in den Zellen anpassen, um eigene Buchstabenkombinationen zu verwenden.

3. Wie kann ich die Ergebnisse speichern?
Verwende die Funktion Speichern unter in Excel, um Deine Arbeitsmappe zu sichern. Du kannst auch die Ergebnisse in eine andere Tabelle kopieren.

4. Funktioniert das in jeder Excel-Version?
Die VBA-Makros sollten in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen (Excel 2007 und höher).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige