Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1328to1332
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

Zahlen fast zufällig erzeugen

Zahlen fast zufällig erzeugen
05.09.2013 12:45:07
zeinz
hallo miteinander,
gibt es eine möglichkeit zahlen oder buchstaben "fast zufällig" zu verteilen.
bsp: ich habe eine tabelle von 15zeilen x 26 spalten - also 390 zellen!
nun möchte ich die zahlen 0-9 darin zufällig verteilen, aber mit einer bedingung:
die häufigkeit der zahlen ist fest.
33x0
31x1
35x2
34x3
43x4
36x5
41x6
44x7
39x8
54x9
danke
zeinz

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen fast zufällig erzeugen
05.09.2013 13:33:32
Rudi
Hallo,
endlich mal was anderes.
Sub zeinz()
Dim arr, i As Integer, x As Integer, y As Integer, rr As Range
arr = Array(33, 31, 35, 34, 43, 36, 41, 44, 39, 54)
Set rr = Range("a1:z15")
Application.ScreenUpdating = False
rr.Clear
Do While i  ""
y = Int(Rnd * 390) + 1
Loop
rr(y) = x
i = i + 1
End If
Loop
End Sub

Gruß
Rudi

AW: Zahlen fast zufällig erzeugen
05.09.2013 13:38:44
zeinz
hallo rudi,
besten dank für die antwort!!!
du hast du extra für mich kreiert ;-)
nun sind meine kenntnisse leider nicht die besten, aber ich weiß schon einmal, dass dies ein makro ist.
kannst du eventuell noch schnell erklären, wo ich das einfüge und dann aufrufe?
gibt es eine art zählfunktion, wo ich hinterher alle ziffern gemäß ihrer häufigkeit auslesen kann?
zeinz

Anzeige
AW: Zahlen fast zufällig erzeugen
05.09.2013 13:57:23
Rudi
Hallo,
wo ich das einfüge und dann aufrufe?
Alt+F11; im linken Fenster Rechtsklick auf deine Mappe, Einfügen-Modul und reinkopieren.
gibt es eine art zählfunktion
ZÄHLENWENN()
Gruß
Rudi

hab es hinbekommen ;-) - aber...
05.09.2013 14:50:27
zeinz
hallo rudi,
hab es jetzt geschafft. Danke!
wie muss ich das makro umgestalten, wenn ich im bereich a1:j15 - also 150 zellen, folgende verteilung möchte:
0-11
1-18
2-13
3-22
4-12
5-15
6-19
7-16
8-10
9-14
danke im voraus

AW: hab es hinbekommen ;-) - aber...
05.09.2013 15:58:14
Rudi
Hallo,
ganz einfach.
arr = Array(11, 18, 13, 22, 12, 15, 19, 16, 10, 14)
Set rr = Range("a1:j15")
und die 390 (3x) in 150 ändern.
Gruß
Rudi

Anzeige
DANKE
05.09.2013 16:07:40
zeinz
hi rudi,
besten dank! jetzt bin ich bestens gewappnet.
vielen dank nochmals ;-)

AW: an MCO
05.09.2013 13:46:52
zeinz
hallo MCO,
danke für deine mühe und die bereitgestellte tabelle ;-)
leider kann ich die erzeugung der zahlen nicht nachvollziehen oder nachahmen, da keine formel drin steht!
wahrscheinlich hast du das auch über ein makro gemacht?
zeinz

AW: an MCO
06.09.2013 06:17:16
Marc
Guten Morgen zeinz!
Ja, ein Makro schreibt die Formel für Zufallszahlen in den Bereich, dann werden die Werte als Zahlen eingefügt. Anschließend werden die (rechts) gezählten Werte angepasst. (d.h. du kannst die Anzahl der Zahlen auch dort ändern)
Du kannst die Makros über ALT+F11 sehen, wie von Rudi beschrieben.
Schrittweise kommst du durchs Makro wenn du F8 drückst. Der Schritt, der anliegt wird dann gelb hervorgehoben.
Gruß, MCO

Anzeige
AW: Zahlen fast zufällig erzeugen
05.09.2013 16:08:22
fcs
Hallo zeinz,
nachdem ich auch schon an einer Makro-Lösung gearbeitet hatte will ich sie dir auch nicht vorenthalten.
Das Prinzip ist ähnlich dem von Rudi, evtl. etwas komplizierter im Aufbau.
Ich verwende aber eine Hauptroutine in der die Vorgaben an eine Subroutine übergeben werden.
So kannst du problemlos verschiedene Varianten ausprobieren, indem du mehrere Hauptroutinne mit unterschiedlichen Parametern erstellst.
Gruß
Franz
Sub Zufall_0_9_15_x_10()
Call prcZufall_Zahlen_0_9(StartZelle:=ActiveSheet.Range("A20"), Zeilen:=15, _
Spalten:=10, Anz_0:=11, Anz_1:=18, Anz_2:=13, Anz_3:=22, Anz_4:=12, _
Anz_5:=15, Anz_6:=19, Anz_7:=16, Anz_8:=10, Anz_9:=14)
End Sub
Sub Zufall_0_9_15_x_26()
Call prcZufall_Zahlen_0_9(StartZelle:=ActiveSheet.Range("A2"), Zeilen:=15, _
Spalten:=26, Anz_0:=33, Anz_1:=31, Anz_2:=35, Anz_3:=34, Anz_4:=43, _
Anz_5:=36, Anz_6:=41, Anz_7:=44, Anz_8:=39, Anz_9:=54)
End Sub
Sub prcZufall_Zahlen_0_9(StartZelle As Range, Zeilen As Long, _
Spalten As Long, Anz_0%, Anz_1%, Anz_2%, Anz_3%, Anz_4&, Anz_5%, Anz_6%, _
Anz_7%, Anz_8%, Anz_9&, Optional lngLoopsMax As Long = 10000)
'lngLoopsMax gibt die max. Anzahl Do-Loop-Schleifen vor (Notausgang)
'typischer Weise sind 2000 bis 3000 Schleifen erforderlich um alle Zellen zu Füllen
Dim Zeile As Long, Spalte As Long, lngZahl As Long
Dim Zahlen() As Long, Zufallszahl As Long, ZufallsZelle As Long
Dim rngZahlen As Range
Dim AnzZellen As Long, lngCount As Long, StatusCalc As Long
Dim AnzahlZahl(0 To 9, 1 To 2) As Long
'max. Anzahl der Zahlen 1 bis 9 in Array einlesen
AnzahlZahl(0, 1) = Anz_0
AnzahlZahl(1, 1) = Anz_1
AnzahlZahl(2, 1) = Anz_2
AnzahlZahl(3, 1) = Anz_3
AnzahlZahl(4, 1) = Anz_4
AnzahlZahl(5, 1) = Anz_5
AnzahlZahl(6, 1) = Anz_6
AnzahlZahl(7, 1) = Anz_7
AnzahlZahl(8, 1) = Anz_8
AnzahlZahl(9, 1) = Anz_9
AnzZellen = Zeilen * Spalten
ReDim Zahlen(1 To AnzZellen, 1 To 5)
'Prüfen, ob die Summe der Anzahlen kleiner ist als die zu belegendne Zellen
For lngZahl = 0 To 9
Zufallszahl = Zufallszahl + AnzahlZahl(lngZahl, 1)
Next
If Zufallszahl  lngLoopsMax Then 'Notausgang!
MsgBox "Nach " & lngLoopsMax & " Schleifen wurde noch nicht in alle " _
& "Zellen eine Zufallszahl eingetragen!"
Exit Do
End If
Loop
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
End With
End Sub

Anzeige
AK: Nur Info für Interessenten
09.09.2013 01:32:19
Luc:-?
Dieses interessante Problem, da stimme ich Rudi zu, hatte ich am Bsp eines Zensurenspiegels zwar schon prinzipiell in der letzten Version (1.5) der UDF VectAr berücksichtigt, aber die zufällige Verteilung der per Häufigkeit festgelegten Werte fehlte noch. Das könnte auch für eine solche Verteilung benötigende Folgerechnungen interessant sein, weshalb ich das wohl auch noch für Berechnungen, nicht nur Werte-Wiedergaben der UDF berücksichtigen werde.
1. Bsp für Zensurenspiegel ohne Darstellung, aber mit Folgeberechnungen (Situation: Klausur in 3 Klassen):
 ABCDEFGHIJK
76Zensuren123456MedianDurchschnSummeAnzahl
77KlasseZensurenspiegel    
7810a258321336421
7910b49501022,24219
8010c3772012,52,65220
81Zellformeln:H78:H80: {=MTRANS(VectAr(1^ZEILE($1:$3)*B76:G76;;"#°median";;B78:G80))}J78[:J80]: {=MTRANS(VectAr(1^ZEILE($1:$3)*B76:G76;;"#°9";;B78:G80))}
82 I78[:I80]: {=MTRANS(RUNDEN(VectAr(1^ZEILE($1:$3)*B76:G76;;"#°1";;B78:G80);1))}K78[:K80]: {=MTRANS(VectAr(1^ZEILE($1:$3)*B76:G76;;"#°count";;B78:G80))}
Hier wurde keine Zufallsverteilung zugrundegelegt, weil das für die Fmln im blau-grünen Bereich nicht erforderlich war.
2. Bsp lt Arbeitsstand für das vorliegende Problem (neueste Version 1.6):
 ABCDEFGHIJKLMNOP
3033x0696686517523779
3131x1542913604060966
3235x2272532607946601
3334x3629238097470781
3443x4399425985591963
3536x5277447728388329
3641x6386094079270132
3744x7949555154588098
3839x8997564565454299
3954x9172982009037646
40390260235601386838
41390782328899477992
42WAHR155345396659210
43WAHR153139329261839
44WAHR429689921247611
45WAHR488177747767890
46WAHR186504537970404
47WAHR031090655465231
48WAHR292194915291726
49WAHR476140164364747
50WAHR478459982327830
51WAHR947883587616089
52 689347744880585
53 049345894363949
54 570014088149577
55ZellFormeln:696413503712687
56B30:P55: {=VectAr(--VSplit(A30:A39;"x");1;"§§";2;--INDEX(VSplit(A30:A39;"x");0;1);15)}
57A40: {=VectAr(--VSplit(A30:A39;"x");1;"#°count";2;--INDEX(VSplit(A30:A39;"x");0;1))}
58A41:=SUMME(INDEX(VSplit(A30:A39;"x";1);;1))
59A42:A51: {=ZÄHLENWENN(B30:P55;--RECHTS(A30:A39))=INDEX(VSplit(A30:A39;"x";1);;1)}
Die Fml in B30:B55 erzeugt normalerweise einen horizontalen Vektor. Da sich der bei der Anzahl der Werte auch transformiert nur ungünstig darstellen lässt, habe ich vorgesehen, aus einem einzelnen Vektor eine reguläre Matrix aufbauen zu können. Dazu wird Arg6 (in Deutung lt Arg2) benutzt. Das war/ist erforderlich, weil in Fmln, die den Ergebnisvektor der Fkt INDEX übergeben, durch INDEX eine wiederholte Neuberechnung der Zufallszahlen erfolgt, was zu Verteilungsfehlern führt. Möglicherweise verheddert sich hier das für die Zufallsverteilung benutzte Scripting.Dictionary. Will nicht hoffen, dass das bei mehreren solchen Aufgaben auch passiert!
Nebenbei, bei genauer FmlBetrachtung ist zu bemerken, dass die HauptFml direkt von Daten in der im Ausgangsbeitrag dargestellten Form ausgeht. Um diese aufzubereiten, wird die erst kürzlich hier von mir vorgestellte, relativ einfache UDF VSplit verwendet.
Bei Wunsch nach näheren Infos bitte melden! Allerdings ist der ganze PgmCode mittlerweile schon zu umfangreich, um ihn (lt meinen Kriterien) hier einzustellen. Ausschnitte wären aber möglich.
Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige