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

Makro langsam

Makro langsam
07.02.2013 21:40:13
Benjamin
Hallo
ich habe hier im Forum nachfolgendes Makro (von Mustafa) gefunden, welches ich versucht habe auf meine Bedürfnisse anzupassen.
Ich brauche die Zufallszahl nicht für 10 Spalten, sondern für ca. 100 und ich brauche statt 100 Zufallszahlen pro Spalte min. 10.000.
Wenn ich das Makro so abändere, dauert das ganze ewig! (oder funktioniert gar nicht).
Gibt es eine Performantere Möglichkeit ca. 100 Spalten a min 10.000 Zufallszahlen zwischen 0 und 1 (prozentuelle Verteilung muss eingebbar sein).
Viele Grüsse
Ben

Sub Prozentual2()
Dim IntX As Integer, IntY As Integer, IntProzent As Integer
Dim IntZeile As Integer, IntSpalte As Integer
Randomize
IntZeile = 3                        'Augabe ab Zeile 3
For IntSpalte = 1 To 10             'Abfrage der Spalten A - J
IntProzent = Cells(1, IntSpalte)    'Übernahme der Prozentwerte aus Zeile 1 der Spalten A - J
Range(Cells(IntZeile, IntSpalte), Cells(IntZeile + 99, IntSpalte)) = 0
For IntX = 1 To 100/(100*IntProzent)
IntY = Int((100 + IntZeile) * Rnd() + IntZeile)
If IntY  IntZeile + 99 Then
IntX = IntX - 1
ElseIf Cells(IntY, IntSpalte) = 1 Then
IntX = IntX - 1
Else
Cells(IntY, IntSpalte) = 1
End If
Next
Next
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro langsam
07.02.2013 23:23:04
Daniel
Hi
probiers mal damit:
die Anzahl der Zeilen und Spalten kannst du bei den Konstanten eingeben.
der Prozentuale Anteil der 1er steht in Zeile 1, ob als ganzahl von 1-100 oder als Prozentwert von 0-1 ist egal.
Sub Test()
Const ZeilenAnzahl = 10000
Const SpaltenAnzahl = 100
Const ZeileAb = 3
Const ZeileProzent = 1
Dim Faktor As Long
Dim Spalte As Long
Dim AnzahlEins As Long
'--- Prüfen, ob prozentuale Verteilung als Ganzzahl bis 100 oder Prozentwert vorliegt
If WorksheetFunction.Max(Cells(ZeileProzent, 1).Resize(SpaltenAnzahl)) 
gruß Daniel

Anzeige
AW: Makro langsam
08.02.2013 00:27:18
Benjamin
wow dass ist super, danke

AW: Makro langsam
08.02.2013 00:11:50
Franc
hmm das von Daniel funzt bei mir nicht
meine variante braucht bei mir max 40 sek aber ist auch nicht der schnellste Rechner
Sub zufall()
Dim dSpalten As Double, dZeilen As Double, Prozent0
Dim dZeileVersatz As Double, dSpalteVersatz As Double
Dim dNiedrig As Double, strZahl As String, strErsetzen As String
Dim dAnz0 As Double, dAnz1 As Double, x As Double, y As Double
dZeilen = 10000
dSpalten = 100
'wieviel Prozent soll aus 0 bestehen - Kommawerte möglich
Prozent0 = 30
dZeileVersatz = 3
dSpalteVersatz = 0
dAnz0 = Int(dZeilen * dSpalten * Prozent0 / 100)
dAnz1 = (dZeilen * dSpalten) - dAnz0
Application.ScreenUpdating = False
Randomize
'Bereich leeren
Range(Cells(1 + dZeileVersatz, 1 + dSpalteVersatz), Cells(dZeilen + dZeileVersatz, dSpalten +  _
dSpalteVersatz)).ClearContents
'niedrigen Wert bestimmen
If dAnz0 

Anzeige
AW: Makro langsam
08.02.2013 10:14:05
Peter
Hallo Ben,
wie wäre es denn, wenn die komplette Berechnung der Zufallszahlen erst in VBA abläuft (Zahlen in ein Array schreiben) und Du dann dieses Array in einem Schwung in die Tabelle kopierst ...
Dann sparst Du Dir die einzelnen und zeitraubenden Schreibzugriffe.
Gruß
Peter

AW: Makro langsam
08.02.2013 11:06:40
Nimzo
Hallo Zusamen
@Peter, hört sich super an, aber ich kenne mich mit VBA kaum aus und bastle eher als das ich wüsste was ich tue. Daher denke ich könnten arrays etwas überfordernd sein, oder?
@Daniel. Deine Lösung ist für mich die Beste. Hat aber einen Schönheitsfehler. Wenn der Prozentsatz zu klein, bzw. die Anzahl der Durchläufe zu gering, kommt ein Fehler, da die Variable anzahleins immer 0 ergibt.
@Franc, vielen Dank für Deine Lösung. Sie funktioniert prima. Allerdings ist sie nicht ganz so schnell wie die von Daniel.
Viele Grüsse und vielen Dank für all die Hilfe
Ben

Anzeige
AW: Makro langsam
08.02.2013 11:22:20
Daniel
Hi
naja, ich hab auf den Code hier ja kein Patent, also man darf das natürlich schon ergänzen und an seine Bedürfnisse anpassen.
So ne kleine if-Abfrage sollte man schon selber hinbekommen:
Sub Test()
Const ZeilenAnzahl = 10000
Const SpaltenAnzahl = 100
Const ZeileAb = 3
Const ZeileProzent = 1
Dim Faktor As Long
Dim Spalte As Long
Dim AnzahlEins As Long
'--- Prüfen, ob prozentuale Verteilung als Ganzzahl bis 100 oder Prozentwert vorliegt
If WorksheetFunction.Max(Cells(ZeileProzent, 1).Resize(SpaltenAnzahl)) If Anzahl > 0 Then
.Resize(AnzahlEins, 1) = 1
.Resize(ZeilenAnzahl, 1).Offset(0, 1).Formula = "=Rand()"
.Resize(ZeilenAnzahl, 2).Sort key1:=.Offset(0, 1), order1:=xlAscending, Header:=xlNo
End If
End With
Next
Cells(ZeileAb, Spalte).Resize(ZeilenAnzahl).ClearContents 'zufallszahlen wieder löschen
End Sub
Gruß Daniel

Anzeige
AW: Makro langsam
08.02.2013 11:23:19
Daniel
mein natürlich "AnzahlEins" statt "Anzahl"

AW: Makro langsam
08.02.2013 11:34:15
Benjamin
ok, das war wirklich einfach, sorry! und danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige