Zellen durch Makro füllen

chrisyfiae

Grünschnabel
Hallo,
habe hier ne Übung, die auch soweit ganz gut geht. Also es geht um den typischen Lottozahlengenerator. Mein Ergebnis habe ich erstmal in einer MessageBox eingetragen.
Nun möchte ich aber die Ergebnisse in den Zellen A2 bis F2.
Ich habe gelesen, dass es irgendwas mit "Range" ist, aber damit spreche ich ja erstmal nur die Zellen an z.B. Range("A2:F2").Select.
Hier erstmal der Code:
HTML:
Private Sub TIPP_Click()
Dim Loza(6) As Integer            
Randomize Timer                    
 

Dim Zuzahl As Integer, I As Integer, Prüf As Boolean, Kugel As Integer
                                  
Kugel = 0                        
While Kugel < 6
  Kugel = Kugel + 1
  Do
    Zuzahl = 49 * Rnd + 1        
    Prüf = True                   
    For I = 1 To Kugel - 1
      If Loza(I) = Zuzahl Then
        Prüf = False
        Exit For
      End If
    Next I
  Loop Until Prüf = True
  Loza(Kugel) = Zuzahl
Wend

Dim Output As String              'hier werden die Lottozahlen in einem Fenster eingeblendet
 
Output = "Ihr Tippschein mit folgenden Lottozahlen lautet: "
For I = 1 To 6
  Output = Output & Format$(Loza(I)) & " "
Next I
MsgBox Output

End Sub

Ich hoffe ihr könnt mir helfen

MfG,
der Chrisy

P.S.: Bin auch leider noch nicht so gut im VBA-Stoff, bin noch fleißig am lernen :)
 
Zuletzt bearbeitet:

DrSoong

Iss was, Doc!
Gerade bei Excel- und Word-VBA hast du den großen Vorteil, dass du ein Makro aufzeichnen kannst und dir den Code ansehen kannst. So kommst du auf Lösungen, an denen du wahrscheinlich lange gesessen wärst.

Zu deinem Code, wäre an sich ganz einfach:
Visual Basic:
Private Sub TIPP_Click()
Dim Loza(6) As Integer            
Randomize Timer                    
 

Dim Zuzahl As Integer, I As Integer, Prüf As Boolean, Kugel As Integer
                                  
Kugel = 0                        
While Kugel < 6
  Kugel = Kugel + 1
  Do
    Zuzahl = 49 * Rnd + 1        
    Prüf = True                   
    For I = 1 To Kugel - 1
      If Loza(I) = Zuzahl Then
        Prüf = False
        Exit For
      End If
    Next I
  Loop Until Prüf = True
  Loza(Kugel) = Zuzahl
Wend

'Dimensionierungen
Dim lZeile As Long, lSpalte As Long
'Festlegen der Ausgangszellen
lZeile = 2 'Ausgabe in die zweite Zeile
lSpalte = 2 'startet in der zweiten Spalte
 
'jetzt in der Schleife einfach ausgeben, das einbinden der Countervariablen in Cells
'sorgt dafür, dass das ganze immer um 1 weitergeht
For I = 1 To 6
  ActiveSheet.Cells(lZeile, lSpalte + I - 1).Value = Format$(Loza(I))
Next I

End Sub


Der Doc!
 

chrisyfiae

Grünschnabel
Hey Doc,
Vielen vielen Dank!
Hat prima geklappt.
Könntest du mir nochmal ganz kurz erklären, was es mit "-1" auf sich hat?
Alles andere hab ich wunderbar verstanden.

Hab nochmals schönen Dank
 
Zuletzt bearbeitet:

DrSoong

Iss was, Doc!
Als erste Spalte hab ich ja im Beispiel 2 angegeben, bei Excel beginnen die Spalten bzw. die Zeilen nicht bei 0 sondern bei 1 (anders als z.B. bei Listboxen, Arrays, ...).

Da die For-Schleife bei dir ja von 1 bis 6 geht, würde ohne das -1 die erste Zahl in die Spalte 2+1 geschrieben werden, also in die 3. Mit dem -1 lass ich das ganze also wieder rüberrutschen.

Einfach er wäre es, wenn du dein Array von 0-5 laufen lassen würdest, du hättest auch 6 Zahlen und die -1 wäre nicht notwendig, da 2+0 ja weiterhin 2 ist.


Der Doc!
 

chrisyfiae

Grünschnabel
Hallo nochmal @Doc,
sorry, dass ich schon wieder störe.
Wollte gerade das Ganze so programmieren, dass er mir 20 verschiedene Tipps ausspuckt und diese dann in 20 Reihen darstellt...quasi das alles was ich jetzt habe 20mal.
Habe mir gedacht, das ich ja im Prinzip nur ne For..Next-Schleife benötige, also:
For Tipp= 1 to 20...
Schau dir mal den Code an, der sagt ganz unten den Fehler "Next ohne For".
Bitte nicht auslachen, ich weis es ist sau billig sowas zu programmieren, aber ich hab grad irgendwie nen BlackOut.
Code:
Dim Zuzahl As Integer, I As Integer, Prüfung As Boolean, Kugel As Integer, Tipp As Integer
                                  
Tipp = 0
For Tipp = 1 To 20
  Tipp = Tipp + 1
  Do
    Kugel = 0
    While Kugel < 6
    Kugel = Kugel + 1
    Do
      Zuzahl = 49 * Rnd + 1         
      Prüfung = True
      For I = 1 To Kugel - 1
        If Loza(I) = Zuzahl Then
          Prüfung = False
          Exit For
        End If
      Next I
    Loop Until Prüfung = True
    Loza(Kugel) = Zuzahl
  Wend
Next Tipp

Danke schon einmal im Vorraus,
der Chrisy
 

DrSoong

Iss was, Doc!
Der Fehler liegt hier:
Visual Basic:
For Tipp = 1 To 20
  Tipp = Tipp + 1
Du verwendest Tipp als Variable für die For/Next-Schleife, da wird es sowieso hochgezählt. Das nachträgliche hochzählen ist da nicht mehr notwendig.

Ich hab die ganze Sub mal in die Richtung erweitert:
Visual Basic:
Private Sub TIPP_Click()
 Dim Loza(6) As Integer
 Dim lZeile As Long, lSpalte As Long, lRunden As Long
 Dim Zuzahl As Integer, I As Integer, Prüf As Boolean, Kugel As Integer
 Randomize Timer
 
 lZeile = 2
 lSpalte = 2
 lRunden = 20 'Anzahl der Runden
 
 
 For Tipp = 1 To lRunden 'Beginn Schleife für Runden
 Kugel = 0
 While Kugel < 6
  Kugel = Kugel + 1
  Do
    Zuzahl = 49 * Rnd + 1
    Prüf = True
    For I = 1 To Kugel - 1
      If Loza(I) = Zuzahl Then
        Prüf = False
        Exit For
      End If
    Next I
  Loop Until Prüf = True
  Loza(Kugel) = Zuzahl
  ActiveSheet.Cells(lZeile + Tipp - 1, lSpalte + Kugel - 1).Value = Zuzahl 'Zahl schreiben
 Wend
 Next Tipp 'Ende Schleife für Runden
End Sub
Noch was: Verwend doch die VB-Codetags [code=vb] und [/code], dann hast du beim Code dieses schöne Syntaxhighlighting, liest sich einfach besser.


Der Doc!