randomisation

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 9.0 (Office 2000)
nach unten

Betrifft: randomisation
von: Diana
Geschrieben am: 23.05.2002 - 09:47:37

Guten Morgen!

Ich moechte gern ein Arbeitsblatt einrichten, bei dem ich folgende Eingaben mache:

Anzahl Pflanzen gesamt: z.B. 30
Anzahl Reihen: z.B. 3
Anzahl Pfl. 1. Termin: z.B. 7
Anzahl Pfl. 2. Termin: z.B. 6

Nun sollte Excel folgende Prozedur ablaufen lassen (gern in VBA):

in eine Spalte alle Pflanzen schreiben (dabei bekommen alle Pflanzen vom ersten Termin eine '1', vom 2. Termin eine '2' und die restlichen ein 'x'

1
1
1
1
1
1
1
2
2
2
2
2
2
x
x
x
x
usw. bis die gesamtanzahl Pflanzn notiert ist

Jetzt soll er diese 'Pflanzen' zufaellig auf ein 'virtuelles' Beet verteilen. Dieses Beet hat die angegebene Anzahl Reihen (hier: 3). Demnach muesste Excel in diesem Beispiel 3 Spalten mit 10 Zeilen fuellen.

Ich kenne mich mit VBA nur gering aus. Daher wuerde ich mich freuen, wenn mir jemand damit helfen kann. Wenn meine beschriebene Prozedur zu umstaendlich ist, und ich das Ziel (eine zufaellig verteilte Anordnung von Pflanzen auf einem Raster) auch leichter erreichen kann, nehme ich gern Vorschlaege an.

Vielen Dank
Diana

nach oben   nach unten

Re: randomisation
von: Andreas
Geschrieben am: 23.05.2002 - 10:35:25

Hallo Diana,

hier meine VBA-Lösung:

Sub AnPflanzen()
Dim intAnzPflGes%, intAnzPfl1%, intAnzPfl2%
Dim intAnzReihen%, i%, j%, strAusgabe$
Dim int1%, int2%, intX%, intZufall%

'Daten einlesen
intAnzPflGes = Range("B1").Value
intAnzReihen = Range("B2").Value
intAnzPfl1 = Range("B3").Value
intAnzPfl2 = Range("B4").Value
'Prüfen
If intAnzPfl1 + intAnzPfl2 > intAnzPflGes Then
    MsgBox "Die Anzahl der Pflanzen ist nicht korrekt!"
    Exit Sub
End If
If Int(intAnzPflGes / intAnzReihen) <> intAnzPflGes / intAnzReihen Then
    MsgBox "Die Pflanzen lassen sich nicht einheitlich auf die Reihen verteilen!"
    Exit Sub
End If
Range("C1:Z1000").ClearContents 'evtl. alte Berechnungen löschen
'Alle Pflanzen sortiert in Spalte C
For i = 1 To intAnzPflGes
    Select Case i
        Case To intAnzPfl1: strAusgabe = "1"
        Case intAnzPfl1 + 1 To intAnzPfl1 + intAnzPfl2: strAusgabe = "2"
        Case Else: strAusgabe = "x"
    End Select
    Cells(i, 3).Value = strAusgabe
Next i
Randomize
int1 = intAnzPfl1: int2 = intAnzPfl2: intX = intAnzPflGes - int1 - int2
'zufällige Beetverteilung Spalte D bis Spalte ...
For i = 1 To intAnzReihen
    For j = 1 To intAnzPflGes / intAnzReihen
        intZufall = Int((int1 + int2 + intX) * Rnd) + 1
        Select Case intZufall
            Case Is <= int1:
                int1 = int1 - 1
                strAusgabe = "1"
            Case Is > int1 + int2:
                intX = intX - 1
                strAusgabe = "x"
            Case Else
                int2 = int2 - 1
                strAusgabe = "2"
        End Select
        Cells(j, i + 3).Value = strAusgabe
    Next j
Next i
End Sub

Annahme:
Anzahl Pflanzen gesamt: z.B. 30 (Zahl in B1)
Anzahl Reihen: z.B. 3 (Zahl in B2)
Anzahl Pfl. 1. Termin: z.B. 7 (Zahl in B3)
Anzahl Pfl. 2. Termin: z.B. 6 (Zahl in B4)

Ausgabe:
Liste aller Pflanzen in Spalte C
Darauffolgende Spalten sind die Beete auf denen zufällig die Pflanzen verteilt werden!

Hinweis: Das Makro löscht vor jeder Berechnung den Zellbereich C1:Z1000, um evtl. vorherige Berechnungen zu entfernen!

Viel Spaß,
Andreas

nach oben   nach unten

Re: randomisation
von: Diana
Geschrieben am: 23.05.2002 - 11:36:47

Vielen Dank Andreas!

Das ist genau, was ich meinte. Ich dachte schon ich haette es zu umstaendlich erklaert.

Diana


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "COMBOBOX mehrfach auswahl"