Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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.

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

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)
Anzeige
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)
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

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige