Live-Forum - Die aktuellen Beiträge
Datum
Titel
20.05.2025 16:19:36
20.05.2025 15:34:36
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 6 Zahlen nach Zufall markieren

6 Zahlen nach Zufall markieren
29.09.2008 16:26:51
dieter(drummer)
Excel und VBA SoLaLa
Hi VBA Formelspezialisten,
ab Zelle B4 bis H10 stehen Lottozahlen wie im Lottoschein in der unten angegebenen Anordnung (Zelle B4 = 1 und H10 =49). Jede Zahl steht in einer Zelle!
Suche eine VBA Kösung, die nach dem Zufallsprinzip über den Bereich einen z. B. roten Kreis oder andere Markierung ÜBER 6 ZAHLEN legt OHNE Dubletten. Die Anordung der Zahlen soll nicht verändert werden!
Eine anschliessende Rückgängigmachung mit 2. Makro wäre dann die Spitze. Ein Makro zum Ausdrucken mach ich per VBA selbst.
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35
36 37 38 39 40 41 42
43 44 45 46 47 48 49
Wenn es eine Lösung gibt, dann Danke für's drum kümmern.
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 6 Zahlen nach Zufall markieren
29.09.2008 16:53:00
Braleta
Hallo Unbekannter,
ein Name wäre schon ganz schön, dann hat man das Gefühl, mit einem Menschen zu reden...
Warum so kompliziert mit rotem Ring und so?
Das soll wohl eine ganz normale Lotto-Auswahl ergeben oder etwa doch nicht?
Die Zahlen 1 bis 49 sind nur Tand.
versuche es mal mit dieser Version:

Sub test()
Dim rng As Range, rngAll As Range
Dim iRandomize As Integer
Dim Spalte As String
Dim SortierSpalte As String
Dim OffsetSpalte As String
Dim rRange As String
Dim Anzahl As Integer
Dim SpaltenKopf
Dim FelderAnzahl As Integer
SpaltenKopf = Array("B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", " _
P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
Anzahl = InputBox("Wie viele Spalten sollen gerechnet werden?")
For FelderAnzahl = 0 To Anzahl - 1
Spalte = SpaltenKopf(FelderAnzahl)
SortierSpalte = Spalte & "2"
OffsetSpalte = Spalte & "10"
rRange = Spalte & "2:" & Spalte & "7"
Set rngAll = Range(rRange)
Randomize
rngAll.ClearContents
For Each rng In rngAll.Cells
iRandomize = Int((49 * Rnd) + 1)
Do Until WorksheetFunction.CountIf(rngAll, iRandomize) = 0
iRandomize = Int((49 * Rnd) + 1)
Loop
rng.Value = iRandomize
Next rng
Range(rRange).Select
Dim sVersion As String
sVersion = Application.Version
Select Case sVersion
Case Is = "11:0"
Selection.Sort Key1:=Range(SortierSpalte), Order1:=xlAscending, Header:=xlGuess, _
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Case Is = "12.0"
ActiveWorkbook.Worksheets(1).Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range( _
SortierSpalte), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(1).Sort
.SetRange Range(rRange)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Select
Next FelderAnzahl
End Sub


Gruß ...braleta

Anzeige
AW: 6 Zahlen nach Zufall markieren
29.09.2008 17:42:27
dieter(drummer)
Hi Braleta,
sorry wegen fehlendem Namen (dieter(drummer)).
Danke für schelle Antwort.
Musste kurz weg. Dein Makro bricht in der Zeile: Spaltenkopf... ab.
gruß
dieter(drummer)
AW: 6 Zahlen nach Zufall markieren
29.09.2008 16:55:16
ANdreas
Hallo Dieter,
anbei mein Vorschlag:

Private Sub SelectRandom(rngParam As Range, intParam As Integer)
Dim lngCount As Long
Dim r As Range
Dim arr() As Variant
Dim s$, i%, j%
' Abbruchkriterien
If intParam  10000 Then Exit Sub
If lngCount 


Gruß
Andreas

Anzeige
AW: 6 Zahlen nach Zufall markieren
29.09.2008 17:46:22
dieter(drummer)
Hi Andreas,
Danke für schnelle Antwort. Deine funktioniert. Nur sind dei Markierungen nicht im Bereich B4 bis H10. sonst gut.
Gibt eine Nachbesserung?
Danke schon mal.
Gruß
dieter(drummer)
AW: 6 Zahlen nach Zufall markieren
30.09.2008 10:54:00
ANdreas
Hallo Dieter,
wichtig ist einzig der Aufruf:

Sub TestAufruf()
SelectRandom Range("A1:G7"), 6
' oder bei aktueller Selektion:
' SelectRandom Selection, 6
End Sub


Dort kannst Du wie geschrieben den Bereich definieren. Statt "A1:G7" geht jeder andere Bereich. Die 6 gibt an wieviele Zellen markiert werden sollen, kannst auch nur 5 oder 20 selektieren lassen - ist so flexibel wie möglich gehalten
SelectRandom Range("B4:H10"), 6
oder wenn du die jeweils aktuelle Selektion nehmen möchtest dann so:
SelectRandom Selection, 6
Gruß
Andreas

Anzeige
AW:Danke an alle. Version Mathias L nehm ich.
29.09.2008 17:50:22
dieter(drummer)
Hi Matthias L,
Prima Lösung und Danke für schelle Hilfe. Auf meinen gewünschten Bereich werde das Marko selbst anpassen, hoffe das ich dies hinkriege.
Gruß aun Dank an ALLE.
dietere (drummer)
Anzeige
AW: 6 Zahlen nach Zufall markieren
29.09.2008 17:38:00
Erich
Hi Dieter,
und noch ne Variante: https://www.herber.de/bbs/user/55725.xls
Hier der Code:

Option Explicit
Sub Mark6()
Dim arrZ, ii As Long
MarkWeg
arrZ = Zufallsliste(49)
For ii = 1 To 6
Cells(1, ii + 1) = arrZ(ii)  ' falls du die 6 Zahlen in Zeile 1 haben möchtest
arrZ(ii) = arrZ(ii) - 1
Cells(Fix(arrZ(ii) / 7) + 4, arrZ(ii) Mod 7 + 2).Interior.ColorIndex = 3
Next ii
End Sub
Sub MarkWeg()
Range("B1:G1").ClearContents
Range("B4:H10").Interior.ColorIndex = xlNone
End Sub
Function Zufallsliste(intI As Integer)
' Zahlen 1 bis Anzahl ohne Wiederholung - ingUR 04.12.2006
' www.herber.de/forum/archiv/824to828/t825988.htm
Dim ii As Long, iLosNr As Long, arrOK() As Boolean, arrLos() As Long
ReDim arrOK(1 To intI), arrLos(1 To intI)
Randomize
For ii = 1 To intI
Do
iLosNr = Int((intI * Rnd) + 1)
If Not arrOK(iLosNr) Then arrLos(ii) = iLosNr: arrOK(iLosNr) = True
Loop Until arrLos(ii) > 0
Next
Zufallsliste = arrLos
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Dank an Erich G auch Prima Lösung!
29.09.2008 17:54:00
dieter(drummer)
Gruß und Dank Erich G!
Ist immer wieder toll, wie schnell eine prima Hilfe aus diesem Forum kommt.
Dank noch mal an ALLE.
Gruß
Dieter (drummer)
AW: 6 Zahlen nach Zufall markieren
30.09.2008 11:14:00
ANdreas
Hallo,
von der Lösung würde ich abraten, da hier kein Laufzeitende der Funktion gesichert ist. Die Wahrscheinlichkeit, dass diese Funktion nicht beendet wird (Endlosschleife), ist theoretisch >0.
Wie oft die Schleife in der Funktion durchlaufen wird, hängt allein vom Zufall ab! Das kann 100 mal sein, 200, 300 oder 1000 mal. Heutzutage ist zwar genug Rechenleistung vorhanden, d.h. der User bemerkt das kaum, aber es ist nicht 'sauber'.
Gruß
Andreas
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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