Microsoft Excel

Herbers Excel/VBA-Archiv

Zufallsgenerator

Betrifft: Zufallsgenerator von: Max
Geschrieben am: 14.11.2007 00:04:56

Hallo zusammen!

Ich hatte schon einmal bezüglich diese Problems geschrieben. Komm aber einfach nicht weiter:

Ich bräuchte einen Zufallsgenerator (Makro), der folgendes erzeugt:

Ich habe eine ExcelTabelle mit Auftragsnummern in Spalte A und jeweils eine Artikelnummer. Nun möchte ich mit hilfe eines Makros jeweils 50 zufällige Auftragsnummern pro Artikel in eine andere Exceltabelle schreiben lassen. Diese neue Exceltabelle sollte dann in Spalte A die 50 Auftragsnummer vom Produkt "001", in Spalte B die 50 Auftragsnummer vom Produkt "002", etc. (es gibt 20 Produkte und ca.
10.000 Auftragsnummer)

Es wäre super wenn mir hierbei jemand helfen kann.

Viele Grüße,
Max

  

Betrifft: AW: Zufallsgenerator von: Niki
Geschrieben am: 14.11.2007 00:29:59

Hallo

Dürfen Auftragsnummern doppelt an verscheidenen Produkte vergeben werden?
Z.B. Produkt 001 Auftragnr.43:458567
z.B. Produkt 015 Auftragnr.28:458567
Steht ansonsten noch was in dem ersten Tabellenblatt?

Niki


  

Betrifft: AW: Zufallsgenerator von: Oberschlumpf
Geschrieben am: 14.11.2007 00:30:03

Hi Max

Auch super wär es, wenn du uns per Upload eine Bsp-Datei mit ausreichend (so viel wie nötig/so wenig wie möglich) zur Verfügung stellst ;-)

Ciao
Thorsten


  

Betrifft: AW: Zufallsgenerator von: Tino
Geschrieben am: 14.11.2007 01:45:34

Hallo,
meinst du so, es wird aber nicht auf doppelte geachtet und es wird davon ausgegangen, dass in der ersten Spalte in Tabelle1 die Überschrift ist.

Sub MeineZufall()
Dim a As Byte, b As Byte
Dim zahl As Long
Dim Zufalldurch As Byte
Dim Tab1 As Worksheet, Tab2 As Worksheet
Application.DisplayAlerts = False
Set Tab1 = Sheets("Tabelle1")
Set Tab2 = Sheets("Tabelle2")
For a = 1 To 9
    
    For b = 1 To 50
        
        For Zufalldurch = 1 To Round(Int((50 - 1 + 1) * Rnd + 1), 0)
        zahl = Round(Int((Tab1.Cells(65000, a).End(xlUp).Row - 2 + 1) * Rnd + 2), 0)
        Next Zufalldurch
        
        Tab2.Cells(b+1, a) = Tab1.Cells(zahl, a)

    Next b
Next a
Set Tab1 = Nothing
Set Tab2 = Nothing
Application.DisplayAlerts = True
End Sub



Gruss
Tino


  

Betrifft: AW: Zufallsgenerator von: Tino
Geschrieben am: 14.11.2007 01:54:49

Hallo,
hab es vergessen umzustellen.
mach aus der Zeile For a = 1 To 9 dieses For a = 1 To 20

wegen den 20 Produktgruppen.

Gruss
Tino


  

Betrifft: AW: Zufallsgenerator von: Niki
Geschrieben am: 14.11.2007 01:45:03

Hallo

probier es mal mit folgendem Code:

Const auftragsnummern = 10000 ' hier kannst du einstellen wieviel auftragsnummern zurverfügung stehen
Const produkte = 20 'max. soviel stellen wie bei stellen_prod eingestellt
Const stellen_prod = 3 'wie die Produktnr. angezeigt wird z.B. 3 = XXX oder 4 = XXXX
Const auf_pro = 50 'wieviele Auftragsnummern pro Produkt vergeben werden sollen
Const Quellsheet = "Tabelle1" 'Auf diesem Sheet stehen deine Auftragsnummern die vergeben werden können
Const Zielsheet = "Tabelle2" 'Auf diesem Sheet stehen am Ende deine Produkte mit Auftragsnummern

Sub Zufall_Auftragsnummern()
   For d = 1 To stellen_prod
      füll = füll + "0"
   Next
   c = auftragsnummern
   [a:a].Select
   Selection.Copy
   [b:b].Select
   ActiveSheet.Paste
   Randomize
   Worksheets(Zielsheet).Activate
   Sheets(Zielsheet).[1:1].Select
   Selection.NumberFormat = "@"
   With Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
   End With
   Worksheets(Quellsheet).Activate
   Sheets(Zielsheet).Range("a1").Value = "Produkt"
   For a = 1 To auf_pro
      Sheets(Zielsheet).Cells(a + 1, 1).Value = "Auftragsnr. " & a
   Next
   [a:a].EntireColumn.AutoFit
   For produkt = 1 To produkte
      Sheets(Zielsheet).Cells(1, produkt + 1).Value = Left(füll, stellen_prod - Len(produkt))  + _
 LTrim(Str(produkt))
      For auftragsnr = 1 To auf_pro
         b = Fix(Rnd * c) + 1
         Sheets(Zielsheet).Cells(auftragsnr + 1, produkt + 1).Value = Cells(b, 2).Value
         Cells(b, 2).Select
         Selection.Delete Shift:=xlUp
         c = c - 1
      Next
   Next
   Worksheets(Zielsheet).Activate
End Sub




!!!!!Achtung!!!!!
geht davon aus das Spalte "B" auf Quellsheet frei ist.
Ansonsten Zeile [b:b].Select so abändern das eine frei Spalte benannt wird z.B. [c:c].Select

Niki


  

Betrifft: AW: Zufallsgenerator von: Niki
Geschrieben am: 14.11.2007 02:19:33

noch was vergessen vergibt jede Auftragsnr. nur einmal.

Niki


 

Beiträge aus den Excel-Beispielen zum Thema "Zufallsgenerator"