Microsoft Excel

Herbers Excel/VBA-Archiv

VBA- 25 Würfel verteilen | Herbers Excel-Forum


Betrifft: VBA- 25 Würfel verteilen von: Chris
Geschrieben am: 23.11.2009 13:07:10

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?

  

Betrifft: 25 Würfel zufällig würfeln von: NoNet
Geschrieben am: 23.11.2009 13:43:21

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


  

Betrifft: AW: 25 Würfel zufällig würfeln von: Chris
Geschrieben am: 23.11.2009 13:55:34

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.


  

Betrifft: AW: 25 Würfel zufällig würfeln mit Formel von: hary
Geschrieben am: 23.11.2009 14:04:24

Hi Chris
muss es Vba sein? Geht auch so.
https://www.herber.de/bbs/user/66116.xls
Gruss hary


  

Betrifft: AW: 25 Würfel zufällig würfeln mit Formel von: Chris
Geschrieben am: 23.11.2009 14:11:48

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?


  

Betrifft: AW: "Aktualisieren-Link" von: hary
Geschrieben am: 23.11.2009 14:18:26

Hi
Autoform in Tabelle/rechtsklick/Makro zuweisen/neu/als Code: calculate
gruss hary
hatte Deine Antwort auf Edes Loesung zu spaet gesehen:-(


  

Betrifft: Alternative : Würfelwerte in Strings vorgegeben von: NoNet
Geschrieben am: 23.11.2009 14:13:16

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


  

Betrifft: AW: Alternative : Würfelwerte in Strings vorgegeben von: Chris
Geschrieben am: 23.11.2009 14:21:47

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?


  

Betrifft: Würfelwerte in Strings - Version 3 von: NoNet
Geschrieben am: 23.11.2009 14:28:38

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


  

Betrifft: Würfelsimulation : Beispielmappe inside von: NoNet
Geschrieben am: 23.11.2009 14:36:18

Hallo Chris,

hier meine dokumentierte Beispielmappe mit beiden Varianten :

https://www.herber.de/bbs/user/66117.xls

Gruß, NoNet


  

Betrifft: AW: Würfelsimulation : Beispielmappe inside von: Chris
Geschrieben am: 23.11.2009 14:47:26

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


  

Betrifft: AW: VBA- 25 Würfel verteilen von: ede
Geschrieben am: 23.11.2009 14:02:34

Hallo,
hier mal ein Beipiel ohne vba
https://www.herber.de/bbs/user/66115.xls

gruss


  

Betrifft: AW: VBA- 25 Würfel verteilen von: Chris
Geschrieben am: 23.11.2009 14:08:56

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.


  

Betrifft: AW: VBA- 25 Würfel verteilen von: ede
Geschrieben am: 23.11.2009 14:11:45

Hallo chris,
natürlich kann man das auch noch per zufall machen.
gruss


  

Betrifft: AW: @ ede,geht doch einfacher von: hary
Geschrieben am: 23.11.2009 14:09:27

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


Beiträge aus den Excel-Beispielen zum Thema "VBA- 25 Würfel verteilen"