[EXCEL] Zellen mit Daten füllen - 60% Daten 1 und 40% Daten 2 - Möglich?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Moin zusammen,

ich würde gerne, das eine Datenbereich an Zellen mit Zufallswerten gefüllt wird. Ich habe zwei Texte, die zu 60% und 40% verteilt in einer Spalte stehen sollen.

Sagen wir mal im Datenbereich A1:A100 als Beispiel. Dort soll entweder der Text "Gerade" oder "Ungerade" stehen. Dieser Datenbereich soll aber zu 60% mit "Gerade" und 40% mit "Ungerade" gefüllt werden. Allerdings soll die Anordnung zufällig passieren. Und dies soll auch nur beim ersten mal öffnen der Excel passieren. Damit meine ich nicht, dass das immer beim öffnen passieren soll, sondern nur, wenn die Excel zum aller ersten mal geöffnet wurde. Denn da wo dann "Gerade" oder "Ungerade" steht, werden nach und nach Werte eingetragen.

Nun möchte ich aber nicht, dass diese Werte wieder überschrieben werden oder das sich die Anordnung von "Gerade" und "Ungerade" ändert. Weiß jemand, wie ich das umsetzten kann?

Ich bin da leider ein wenig Ratlos und finde dazu nichts..

MfG und Vielen Dank!
 
Beispielsweise so: Generiere dir 100 Zufallszahlen zwischen 0 und 1. Wenn sie über 0,4 liegen dann "Gerade", ansonsten "Ungerade". Das Dann kopierst du den Inhalt der Zellen (nicht die Formeln!) in eine neue Spalte. Dadurch verändert sich der Bezug auch bei einem erneuten Öffnen oder einer Neuberechnung der Datei nicht.
 
Mit Formeln wird es deshalb schwer, weil beim Neuberechnen - das passiert z.B. beim Ändern irgendeiner Zelle - sich natürlich auch deine Zufallswerte ändern.

Bleibt ein Makro - allerdings gibt es hier wohl auch keine zuverlässige Methode, dass diess nicht irgendwann noch einmal gestartet wird.

Bleibt als Lösung: du da nur eine einmalige Zufallsliste willst, bastel sie dir manuell - bspw. mit der Funktion Zufallsbereich von 1 bis 10 (>4 = Gerade, <=4 = Ungerade). Die Ergebnisse musst du dir dann kopieren und als Werte einfügen (damit die Formel verloren geht).
 
Zuletzt bearbeitet:
Gute Idee ihr beiden. Danke Dafür schon einmal. Aber mein Ziel ist, dass in jeder Excel die ich öffne, die Werte unterschiedlich sind. Und das wären Sie ja nicht, wenn ich die Excel kopiere bzw. als Download bereitstelle... Das ist dass Problem...
 
Wie zufällig sollen sie denn sein? Reicht auch Pseudozufall? Du könntest dir auf einem extra Tabellenblatt eine Matrix erstellen, A1:AZ100 beispielsweise. Darin sind die Zufallswerte enthalten. Beim Öffnen der Datei musst du eine Zahl eingeben die die Spalte auswählt. Es könnten sogar beliebige Zahlen zugelassen werden wenn du mit Modulodivision arbeitest.

Ergänzung: Kann man mit Excel auch mit der Systemzeit arbeiten? Dann könnte die Auswahl an dieser festgemacht werden. Möglicherweise ist ein kleines Makro aber eleganter -- wenn es deine Sicherheitseinstellungen zulassen.
 
Zuletzt bearbeitet: (Ergänzung)
Naja machbar ist das. Allerdings mit VBA, da das keine Tabellekalkulationsaufgabe oder Datenbanksache ist sondern eine reine Programmierungssache die mir aber - ohne jetzt konkret druf einzugehen- auch nicht sonderlich anspruchsvoll ist. Es geht ja schlichtweg darum einen Zufalls-String aus einer vorgegebenen Auswahl auszuwählen und diesen dann entsprechend zu verteilen. Ist doch ne schöne Aufgabe um sich an VBA ran zu tasten. Viel Erfolg!
 
Irgendwelche Vorkentnisse in der Programmierung vorhanden?

Sprich definieren von Variablen, Ablauf/Aufruf/Einbindung von Funktionen sind Dir ein Begriff oder nicht?

Wenn nicht, solltest Du einmal ganz vorne Anfangen. Zu verstehen wie Deklarationen funktionieren, ist Vorraussetzung für VBA.

https://www.microsoft-press.de/url.asp?cnt=mspress_vb2010

Dein Ansatz wäre beispielsweise der Aufruf einer InputBox. Hier werden die zwei Strings eingegeben und dann per mathematischer Zufallsoperation [Google] verteilt.
Guter Code würde einen String per Zufallsoperation verteilen (bspw. in einer 6er Schleife). Dann werden aus der vorher definierten Range einfach die leeren Zellen mit String2 befällt. So spart man sich die Einbindung des Zufallgenerators für beide Strings. Durch die 6er Schleife, stimmt dann auch automatisch das Verhältnis.


Die andere Lösung wäre Zufallsgeneratoren für beide Strings die jeweils in 6er und 4er Schleifen laufen.
 
Zuletzt bearbeitet:
Und wie löst du die Sache mit dem einmaligen Ausführen?

Da müsste man sich wohl einer Hilfszelle bedienen: beim Öffnen wird geprüft, ob in dieser Zelle bspw. der Wert 1 steht. Wenn nein: schreibe den Wert 1 hinein und führe das "Zufallsmakro" aus. Falls der Wert 1 schon vorhanden ist, führe das Makro nicht aus.

Das setzt natürlich voraus, dass a) nach dem ersten Öffnen gespeichert wird, b) Makros überhaupt ausgeführt werden und c) die Zelle nicht manuell manipuliert werden kann.
 
1. Bei Ausführung des Makro wird das aktuelle Datum & Zeit gespeichert. In einer Zelle, oder auch der Dateiname lässt sich über Item.FileName abprüfen bzw. ansprechen.
Wie Du sagtest, könnte man auch einfach einen Dummy-Wert als Flag in irgendeine Zelle schreiben. Sobald dieser Wert gefunden wird, geht das Makro zu End Sub.

2. Er hat doch oben selbst gefragt wie man mit VBA lösen könnte?

3. Ganz einfach. Soweit ich das Problem verstehe, geht es darum immer das Verhältnis von String1 und String2 zu wahren.
Wenn also schon Werte eingetragen und gespeichert wurden, könnte man den Generator einfach die Zellen in Cell.Range, deren Wert noch String1 und String2 entsprechen, jedes Mal neu auswürfeln lassen. Und somit das Verhältnis sicherstellen. Oder per Count einfach überprüfen ob das Verhältnis immer noch 60/40 ist. Da gibt’s mMn zig Lösungswege.

Ich wollte ihm ein paar Ideen und Schlagwörter geben, nicht das Coding bis ins letzte Detail ausarbeiten ;)
 
Zuletzt bearbeitet:
Klar, warum nicht? Er kann doch in A1:A100 die oben besprochenen Zufallswerte haben. Durch ein Makro werden diese bspw. nach B1:B100 kopiert. Dann kann er immer mit den (festen) Werten rechnen. Erst ein Neuaufruf des Makros generiert ihm neue Werte. Dazu braucht er nichmal VBA. Der einfache Rekorder reicht.
 
Zurück
Oben