Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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
Inhaltsverzeichnis

Zufallsgenerator

Zufallsgenerator
Patt
Hallo,
ich habe eine Exceltabelle mit dem nachfolgenden Code in Bearbeitung:

Option Explicit
Sub x()
Dim wsSrc As Worksheet     ' die Quell-Tabelle
Dim rngDst As Range        ' der 'Ziel-Bereich' = die Selektion
Dim arZufall() As Long     ' Array mit allen Zeilennummern von 1 ... lngZeilen
Dim lngZufall As Long      ' eine Zufallszahl zwischen 1 ... lngZeilen
Dim lngZeilen As Long      ' Anzahl der Zeilen der Quell-Tabelle
Dim intSpalten As Integer  ' Anzahlder zu kopierenden Spalten
Dim i As Long              ' Zähler
Randomize
Set rngDst = Selection
intSpalten = rngDst.Columns.Count
Set wsSrc = Worksheets("Daten")
lngZeilen = wsSrc.Cells(wsSrc.Rows.Count, 1).End(xlUp).Row
ReDim arZufall(1 To lngZeilen)
For i = 1 To lngZeilen
arZufall(i) = i
Next
For i = 1 To rngDst.Rows.Count
' Zufallszahl zwischen 1 und lngZeilen generieren
lngZufall = Int(lngZeilen * Rnd() + 1)
' Quellzeile ist die Zeile mit der Zeilennummer arZufall(lngZufall)
wsSrc.Cells(arZufall(lngZufall), 1).Resize(, intSpalten).Copy rngDst.Cells(1).Offset(i -  _
1)
' die letzte Zeilennummer auf die gerade gezogene Zeilennummer umkopieren
arZufall(lngZufall) = arZufall(lngZeilen)
' und dann einfach die Arraygrösse erniedrigen
lngZeilen = lngZeilen - 1
Next
End Sub
Private Sub CommandButton1_Click()
Call x
End Sub
In einem Datenblatt habe ich diverse Daten in den Spalten A bis E erfasst.
Die o.g. Funktion fügt nun nach Drücken von Strg+S per Zufall eine Zeile aus dem o.g. Datenblatt an die markierte Stelle ein.
Die Zufallsfunktion funktioniert hierbei leider nur Zeilenweise. Ich würde nun gerne wissen, wie ich nicht nur eine komplette Zeile auswählen lassen kann, sondern dass hierbei auch noch 2 einzelne Felder per Zufall ausgewählt werden und eingefügt werden. Ist irgendwie schwierig zu erklären.
Bsp.
Spalte A hat von Zeile 1 bis 3 folgende Werte:
Hamburg
Berlin
München
Werte von B:
100
200
300
Werte von C:
16:00
18:00
20:00
Werte von D:
18:00
20:00
22:00
Wenn ich nun Strg+S drücke wird in die zuvor markierten 4 Felder per Zufall eine aus dem zuvor genannten Zeilen ausgewählt und eingefügt.
Also: Berlin - 200 - 18:00 - 20:00
Wie muss der Code lauten, dass es bspw. Berlin - 100 - 16:00 - 22:00 auswählt.
Also die erste Spalte ist fix und bei den restlichen wird innerhalb der Liste nochmal per Zufall ausgewählt.
Hoffe ich habe mich einigermassen verständlich ausgedrückt.
Danke!
Grüße
Patt

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zufallsgenerator
12.12.2010 21:34:28
Patt
Hallo,
verstehe nicht ganz was du meinst!?
Hab meine Frage doch nicht in mehreren Rubriken veröffentlicht!?
Gruß
AW: Zufallsgenerator
16.12.2010 23:44:13
Patt
Hallo,
anstatt über Cross Postings belehrt zu werden hätte ich lieber eine zur Frage passende Hilfestellung erwartet. Sind ja nun mehrere Tage vorbei ohne, dass eine Antwort kam.
Aber da ist das Engagement wohl nicht so stark.
Ciao
Spaltenweise Zufallswerte ohne ARRAY-Speicherung
17.12.2010 01:28:14
NoNet
Hallo Patt,
bzgl. der Crossposting-Thematik stimme ich Hajo zu : Das ist nicht "die feine englische Art", Scharen von Helfern in mehreren Foren mit seiner eigenen Problematik zu belasten, ohne dass diese wissen, dass eine Frage auch woanders gepostet und möglicherweise bereits beantwortet wurde !!
Zu Deinem "Problem" : Den Sinn der ARRAY-Speicherung in deinem Code habe ich nicht begriffen, daher habe ich den gesamten ARRAY-Overhead in meinem Code weggelassen und mich auf das Wesentliche beschränkt : Zufallswerte aus verschiedenen Zeilen in den markierten Bereich übertragen :
Sub ZufallswerteKopieren()
Dim wsSrc As Worksheet     ' die Quell-Tabelle
Dim rngDst As Range        ' der 'Ziel-Bereich' = die Selektion
Dim lngZeilen As Long      ' Anzahl der Zeilen der Quell-Tabelle
Dim lngZufall As Long      ' eine Zufallszahl zwischen 1 ... lngZeilen
Dim intSpalten As Integer  ' Anzahl der zu kopierenden Spalten
Dim lngZ As Long           ' Zeilenzähler
Dim lngSpalte As Long      ' Spaltenzähler
Set rngDst = Selection
intSpalten = rngDst.Columns.Count
Set wsSrc = Worksheets("Daten")
lngZeilen = wsSrc.Cells(wsSrc.Rows.Count, 1).End(xlUp).Row
For lngZ = 1 To rngDst.Rows.Count
For lngSpalte = 1 To Application.Min(4, intSpalten)    ' max. 4 Spalten
' Zufallszahl zwischen 1 und lngZeilen generieren
Randomize Timer
lngZufall = Int(lngZeilen * Rnd() + 1)
rngDst.Cells(lngZ, lngSpalte) = wsSrc.Cells(lngZufall, lngSpalte)
Next
Next
End Sub
Bleibt natürlich noch DEIN Problem, zu entscheiden ob es sinnvoll ist, wenn z.B. "Berlin - 100 - 20:00 - 18:00" resultiert (da 20:00 ja später als 18:00 ist ;-))
Gruß, NoNet
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige