Anzeige
Archiv - Navigation
1760to1764
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

VBA Dummy Daten in Tabelle schreiben

VBA Dummy Daten in Tabelle schreiben
29.05.2020 17:57:14
Peer
Hallo VBA-Profis.
Ich möchte gern in einer Tabelle eine Art Dummy-Daten per Makro einfügen, wobei in jeder Spalte unterschiedliche Formate sind.
Hintergrund ist folgender...
In derzeitiger Tabelle sind sensible Daten, die ich lösche, wenn ich mein Projekt bei Fragen hier online stellen möchte.
Dafür habe ich eine Makro, das den Inhalt dieser Tabelle mit ClearContent löscht.
Nun möchte ich aber in selbige Tabelle diese gelöschten Werte auf Knopfdruck mit Dummy-Daten füllen, die ähnliche Werte und gleiche Formate enthalten. Z.B für Geburtstag 12.05.2020 = format(Geb,"DD.MM.YYYY") oder für Mitgl.Nr. 01234567 (8stellig mit führender Null, wenn kürzer) = format(Mitgl.Nr., "00000000"). Diese Daten sollten halt willkürlich eingetragen werden, es sollten aber bei Namen keine Zahlen und bei Zahlen keine Buchstaben darin vorkommen.
Gibt es für sowas eine Sub als eine Art Zufallsgenerator?
LG
Peer

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zufällig überschreiben
29.05.2020 18:34:57
Fennek
Hallo,
der Code aus dem Archiv überschreibt Texte (nicht Zahlen oder Datum) mit zufälligen Zeichen.

Sub F_en()
Dim By() As Byte
With CreateObject("scripting.dictionary")
For Each it In ActiveSheet.UsedRange.Offset(1).SpecialCells(2, 2)
If Not .exists(it.Value) Then
Tx = it.Value
Tx = Left(IIf(Len(Tx) 
mfg
AW: zufällig überschreiben
29.05.2020 18:45:09
Peer
Hallo Fennek.
Vielen Dank für deine schnelle Antwort und deiner erstaunlichen Arbeit.
Aber leider erfüllt dies nicht ganz meine Vorstellungen, da ich nachvollziehbare Werte benötige, und auch Datum und Zahlen mit einbeziehen muss.
Bis jetzt ist meine Überlegung, eine "Dummy"-Tabelle zu erstellen und die Werte der "Dummy"-Tabelle in die Original-Tabelle mit einem Makro zu kopieren.
LG
Peer
Anzeige
AW: zufällig überschreiben
29.05.2020 20:15:31
Matthias
Moin!
Ich glaube das beste in deinem Fall ist, wenn du dir eine eigene Liste bastelst. Die muss ja nicht unbedingt 300 Namen beinhalten. Wenn du dir 20 aussuchst, reicht das idR, um den Code zu testen. Der sollte ja eh bei 20 oder 300 gleich laufen. Vorteil bei einer selbst (nicht per Makro) erstellten Liste wäre, dass du die Daten auf alle Fälle so hast, wie du sie brauchst. Beim Code kann ja wieder was schief gehen (Mailadresse anders). Die Liste kannst du ja in einer Mappe zwischenspeichern und vor dem Posten einsetzen. Zudem geht glaube ich, geht die Liste schneller als ein Makro dafür zu programmieren. :-)
VG
PS: Der Hinweis von Hans an dich kam von mir. Nicht das du dich wunderst, warum das nicht hier kam. Ging aus verschiedenen Gründen nur so. War keine böse Absicht.
Anzeige
AW: zufällig überschreiben
29.05.2020 20:35:11
Peer
Hallo Matthias.
Alles gut un du hast (und Hans) recht. Ich denke, ich kann dir vertrauen.
Ich bin gerade dabei eine Liste zu erstellen und dann mit

Public Sub Dummy()
Dim wb As Workbook
Set wb = ActiveWorkbook
wb.Sheets("Teilnehmer").Range("A2:P30").Value = wb.Sheets("Dummy").Range("A2:P30").Value
End Sub
die andere Tabelle zu kopieren.
LG
Peer
AW: zufällig überschreiben
29.05.2020 20:34:33
fcs
Hallo Peer,
hier ein einfaches Makro, um verschiedene Zellbereiche mit Zufallsdaten zu füllen.
LG
Franz
Sub Dummdaten()
Dim wks As Worksheet
Dim Zelle As Range
Set wks = ActiveSheet
Application.Calculation = xlCalculationManual
With wks
'Name
For Each Zelle In .Range("A3:A10")
Zelle.Value = "Name" & Format(CLng(Rnd() * 30), "00")
Next
'Vorname
For Each Zelle In .Range("B3:B10")
Zelle.Value = "VorName" & Format(CLng(Rnd() * 10), "00")
Next
'Datumswerte
For Each Zelle In .Range("C3:C10")
Zelle.Value = VBA.DateSerial(2020, 5, 1) + CLng(Rnd() * 30)
Next
'Mitgliedsnummern
For Each Zelle In .Range("E3:E10")
Zelle.Value = 999999 + CLng(Rnd() * 90000000)
Next
'Ganze Zahlen
For Each Zelle In .Range("F3:F10")
Zelle.Value = 0 + CLng(Rnd() * 100)
Next
'Dezimalzahlen - 2 Nachkommastellen
For Each Zelle In .Range("G3:G10")
Zelle.Value = CLng(Rnd() * 1000000) / 100
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: zufällig überschreiben
30.05.2020 11:19:30
Peer
Hallo fcs.
Das ist der Wahnsinn, was hier alles für gute Leute sind und was hier mit VBA alles gezaubert wird.
Ein großes Lob an dich und vielen Dank für deine Idee und Hilfe.
Ich werde deine Idee gern "zwischenspeichern" und auch für Zukünftiges verwenden. Auch Fennek's Idee gehört dazu.
Nochmals vielen Dank.
Gruß
Peer
AW: zufällig überschreiben
30.05.2020 12:30:24
Peer
Hallo.
Ich habe doch ein wenig mit deinem Code gespielt.
Ich habe jeder Spalte der Tabelle ein Sub zugeordnet, damit ich die Werte getrennt generieren lassen kann.
Dabei habe ich den Datumswert angepasst, damit die Werte ein bisschen realistisch sind.

Private Sub btn_Geb_Zufall_Click()
Dim wks As Worksheet
Dim Zelle As Range
Set wks = ActiveSheet
Application.Calculation = xlCalculationManual
With wks
'Datumswerte
For Each Zelle In .Range("H2:H30")
Zelle.Value = VBA.DateSerial(1950, 1, 1) + CLng(Rnd() * 20000)
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Dann dachte ich über die Namen nach und mir kam die Idee, bei der erzeugten Zufallszahl in jeden "Name" die selbe Zufallszahl bei "Vorname" vorzuhängen, damit "Name" und "Vorname" zusammenhängend erkennbar sind.
Dabei habe ich etwas gebastelt, das aber noch nicht ganz so funktioniert, wie geplant.

Private Sub btn_NameZufall_Click()
Dim wks As Worksheet
Dim Zelle As Range
Dim i As Integer, untWert As Integer, obWert As Integer
Set wks = ActiveSheet
untWert = 1     'Format(1, "00")
obWert = 30     'Format(30, "00")
Application.Calculation = xlCalculationManual
Randomize Timer
i = Int(Format(obWert, "00") - Format(untWert, "00") + 1) * Rnd + untWert
With wks
'        'Randomize Timer
'        i = Int(obWert - untWert + 1) * Rnd + untWert
''        'Name
For Each Zelle In .Range("B33:B60")
Zelle.Value = "Name" & i    'Format(CLng(Rnd() * 30), "00")
Next
For Each Zelle In .Range("C33:C60")
'Zelle.Value = Format(CLng(Rnd() * 30), "00") & "Vorname"
Zelle.Value = i & "Vorname"
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Erst habe ich i in der With-Anweisung probiert und dann außerhalb, aber immer wird nur eine Zahl erzeugt. Dann habe ich auch Randomize Time auskommentiert, und auch hier wurde nur eine Zahl erzeugt.
Jedesmal war die Zahl anders, als funktioniert zumindest der "Zufall".
Auch das Format der Zufallszahl klappt nicht.
Da ich hier noch Anfänger bin, glaube ich, dass meine Gedanken und meine Ausführungen unterschiedlich arbeiten. ;-)
Wie ist es richtig?
Vielen Dank für die Unterstützung.
LG
Peer
Anzeige
AW: zufällig überschreiben
30.05.2020 13:00:15
Peer
Hallo.
Ich habe doch ein wenig mit deinem Code gespielt.
Ich habe jeder Spalte der Tabelle ein Sub zugeordnet, damit ich die Werte getrennt generieren lassen kann.
Dabei habe ich den Datumswert angepasst, damit die Werte ein bisschen realistisch sind.

Private Sub btn_Geb_Zufall_Click()
Dim wks As Worksheet
Dim Zelle As Range
Set wks = ActiveSheet
Application.Calculation = xlCalculationManual
With wks
'Datumswerte
For Each Zelle In .Range("H2:H30")
Zelle.Value = VBA.DateSerial(1950, 1, 1) + CLng(Rnd() * 20000)
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Dann dachte ich über die Namen nach und mir kam die Idee, bei der erzeugten Zufallszahl in jeden "Name" die selbe Zufallszahl bei "Vorname" vorzuhängen, damit "Name" und "Vorname" zusammenhängend erkennbar sind.
Dabei habe ich etwas gebastelt, das aber noch nicht ganz so funktioniert, wie geplant.

Private Sub btn_NameZufall_Click()
Dim wks As Worksheet
Dim Zelle As Range
Dim i As Integer, untWert As Integer, obWert As Integer
Set wks = ActiveSheet
untWert = 1     'Format(1, "00")
obWert = 30     'Format(30, "00")
Application.Calculation = xlCalculationManual
Randomize Timer
i = Int(Format(obWert, "00") - Format(untWert, "00") + 1) * Rnd + untWert
With wks
'        'Randomize Timer
'        i = Int(obWert - untWert + 1) * Rnd + untWert
''        'Name
For Each Zelle In .Range("B33:B60")
Zelle.Value = "Name" & i    'Format(CLng(Rnd() * 30), "00")
Next
For Each Zelle In .Range("C33:C60")
'Zelle.Value = Format(CLng(Rnd() * 30), "00") & "Vorname"
Zelle.Value = i & "Vorname"
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Erst habe ich i in der With-Anweisung probiert und dann außerhalb, aber immer wird nur eine Zahl erzeugt. Dann habe ich auch Randomize Time auskommentiert, und auch hier wurde nur eine Zahl erzeugt.
Jedesmal war die Zahl anders, als funktioniert zumindest der "Zufall".
Auch das Format der Zufallszahl klappt nicht.
Da ich hier noch Anfänger bin, glaube ich, dass meine Gedanken und meine Ausführungen unterschiedlich arbeiten. ;-)
Wie ist es richtig?
Vielen Dank für die Unterstützung.
LG
Peer
Anzeige
AW: zufällig überschreiben
30.05.2020 20:45:02
fcs
Hallo Peer,
mit folgenden Anpassungen klappt es.
Identische Namen Vornamen können sich wiederholen!
Webb du keine WIederholungen möchtest, dann z.B.
i = Zelle.Row - 32
LG
Franz
Private Sub btn_NameZufall_Click()
Dim wks As Worksheet
Dim Zelle As Range
Dim i As Integer, untWert As Integer, obWert As Integer
Set wks = ActiveSheet
untWert = 1     'Format(1, "00")
obWert = 30     'Format(30, "00")
Application.Calculation = xlCalculationManual
With wks
Randomize Timer
For Each Zelle In .Range("B33:B60")
i = Int((obWert - untWert + 1) * Rnd + untWert)
'           Name
Zelle.Value = "Name" & Format(i, "00")
'           Vorname in rechter Nachbarspalte
Zelle.Offset(0, 1).Value = Format(i, "00") & "Vorname"
Next
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: zufällig überschreiben
31.05.2020 11:14:22
Peer
Hallo Franz.
Entschuldige die späte Antwort.
An Offset habe ich gar nicht gedacht. Danke.
Identische Namen Vornamen können sich wiederholen!
Webb du keine WIederholungen möchtest, dann z.B.
i = Zelle.Row - 32

Was meinst du damit?
Statt

i = Int(obWert - untWert + 1) * Rnd + untWert
lieber

i = Zelle.Row - 32
.
Kann man dies nicht auch mit Ändern von obWert und dem Range("B33:B60") erreichen? Es sollte halt der obWert nicht kleiner dem Range sein.
Nochmals vielen Dank für deine Hilfe.
Einen schönen Sonntag.
Gruß
Peer
Anzeige
AW: zufällig überschreiben
31.05.2020 19:05:39
fcs
Hallo Peer,
mit
i = Int((obWert - untWert + 1) * Rnd + untWert)

werden Zufallszahlen im Bereich &gt= unterer Wert und &lt= oberer Wert generiert.
Dabei kann es zu Wiederholungen von Zahlen kommen. Das kannst du fast verhindern, wenn du bei nur ca. 30 Zeilen eine große Differenz zwischen oberem und unteren Wert verwendest z.B 1 und 9999. Dann ist die Wahrscheinlichkeit von Wiederholungen gering.
Wenn du Dummy-Namen ohne Wiederholungen generieren möchtest, dann ist der einfachste Weg die Verwendung der Zeilen-Nummer.
Mit etwas mehr Aufwand im Makro kann man auch eindeutige Zufallszahlen generieren.
LG
Franz
Private Sub btn_NameZufall_Click()
Dim wks As Worksheet
Dim Zelle As Range
Dim iRnd As Integer, untWert As Integer, obWert As Integer
Dim arrRnd() As Integer, i As Integer
Dim bolEindeutig As Boolean
bolEindeutig = True 'False setzen wenn Wiederholungen zulässig
Set wks = ActiveSheet
Application.Calculation = xlCalculationManual
With wks
Randomize Timer
With .Range("B33:B60")
untWert = 1
obWert = IIf(bolEindeutig, .Cells.Count, 30)
'Zufallszahlen generieren
ReDim arrRnd(1 To .Cells.Count)
Do
iRnd = Int((obWert - untWert + 1) * Rnd + untWert)
For i = 1 To UBound(arrRnd)
If arrRnd(i) = 0 Then
arrRnd(i) = iRnd
Exit For
Else
If bolEindeutig = True And arrRnd(i) = iRnd Then
Exit For
End If
End If
Next
If i = UBound(arrRnd) Then Exit Do
Loop
'Zufallszahlen eintragen
i = 0
For Each Zelle In .Cells
i = i + 1
'Name
Zelle.Value = "Name" & Format(arrRnd(i), "00")
'           Vorname in rechter Nachbarspalte
Zelle.Offset(0, 1).Value = Format(arrRnd(i), "00") & "Vorname"
Next
End With
End With
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: zufällig überschreiben
31.05.2020 19:25:20
Peer
Hallo Franz.
Wenig Aufwand? Vielleicht für dich. ;-)
Hier wäre ich erstmal überfordert gewesen. Beim Durchlesen konnte ich einigermaßen folgen.
Ich bin mal so frei und nehme deinen Code einfach per Paste & Copy in mein Projekt.
Vielen Dank nochmals.
LG
Peer

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige