Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wert in Gültigkeitsliste zufällig auswählen

Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 08:17:00
Michael
Liebe Profis!
Ich habe ein File mit mehreren Dropdowns via Gültigkeitslisten. Diese Listen sind in einer Extratabelle, deren Bereiche mit "Bereich1" usw. definiert sind. Kann ich jetzt irgendwie per Makro veranlassen, dass ein zufälliger Eintrag der Liste einem Dropdown zugeordnet wird?
Das nächste Problem ist nämlich, dass er trotz dem Haken bei 'leere Zellen ignorieren' immer auch leere Zeilen zur Auswahl lässt.
Ich habe beim Suchen das hier gefunden, kann man das ummodeln?:
&ltpre&gt
Sub ZufallsSatz()
Dim arrS As Variant
Dim arrP As Variant
Dim arrA As Variant
Dim arrG As Variant
Dim sA As String, sB As String, sC As String, sD As String
arrS = Array("Gerhard Schröder ", "Edmund Stoiber ", _
"Guido Westerwelle ", "Otto Schily ")
arrP = Array("schätzt ", "nutzt ", _
"verurteilt ", "genießt ")
arrA = Array("den Zauber ", "die Freuden ", _
"das Prinzip ", "den Rausch ")
arrG = Array("der Macht.", "des Bundestages.", _
"der Bundeshauptstadt.", "der Sinneslust.")
Randomize
sA = arrS(Int((4 * Rnd) + 0))
sB = arrP(Int((4 * Rnd) + 0))
sC = arrA(Int((4 * Rnd) + 0))
sD = arrG(Int((4 * Rnd) + 0))
MsgBox sA & sB & sC & sD
End Sub&lt/pre&gt

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 11:05:29
Klaus-Dieter
Hallo Michael,
"Das nächste Problem ist nämlich, dass er trotz dem Haken bei 'leere Zellen ignorieren' immer auch leere Zeilen zur Auswahl lässt."
Das hast du falsch verstanden. Sieh mal hier Gültigkeit. Da ist das beschrieben.
Viele Grüße Klaus-Dieter

Online-Excel
Richtiger Link
15.01.2007 11:09:20
Klaus-Dieter
Hallo Michael,
da hat was mit dem Link nicht geklappt. Hier der Richtige: Guckst Du: Gültigkeit (1) - Grundlagen
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 11:34:44
fcs
Hallo Michael,
mit folgenden Makros/Funktionen wird entsprechend der selektierten Zelle ein Wert aus der Drop-Down-Auswahl per Zufallsgenerator ausgewählt, wenn die Zelle leer ist.
Den Code fügst du im VBA-Editor unter der Tabelle ein, in der du die Eingaben per Drop-Down machst. Wenn du die Function in mehreren Blättern anwenden möchtest, dann diese in ein Modul einfügen.
Die Spaltennummern/Zeilennummern und den zugehörigen Bereichsnamen für die Drop-Down-Auswahl muss du natürlich ggf. anpassen.
Gruß
Franz

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Column
Case 2 'Spalte B
If Target.Row > 1 And IsEmpty(Target) Then
Target.Value = Zufall(Application.Range("Bereich2"))
End If
Case 3 'Spalte C
If Target.Row > 1 And IsEmpty(Target) Then
Target.Value = Zufall(Application.Range("Bereich3"))
End If
Case Else
'do nothing
End Select
End Sub
Function Zufall(Bereich As Range) As Variant
'Inhalt einer Zelle in Spalte 1 des Bereichs wird zufällig ermittelt
Zufall = Bereich(Rnd * (Bereich.Rows.Count - 1) + 1, 1)
End Function

Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 13:04:25
Michael
Danke für das super Makro, funktioniert einwandfrei. Ich bräuchte nur noch ein paar kleine Modifikationen:
1.) Ich habe jetzt auf Grund der Beschaffenheit meiner Tabelle folgende Select-Zeile für die Zeilen 3, 4 ,6, 8, 11, 12:
Select Case Target.Row
Case 3
If Target.Column = 2 And IsEmpty(Target) Or Target.Column = 4 And IsEmpty(Target) Or Target.Column = 6 And IsEmpty(Target) Or Target.Column = 8 And IsEmpty(Target) Or Target.Column = 10 And IsEmpty(Target) Then
usw.
Ist das durch eine Klammer o.ä. leichter zu lösen?
2.) Ich will nicht grundsätzlich eine Zufallszuordnung, sondern nur ab und zu als 'Vorschlag'. Kann man die Funktion mit einem Button aktivieren/deaktivieren?
3.) Mein grösstes Problem:
Da die Gültigkeitslisten stetig wachsen habe ich als Bereiche die jeweils die Zeilen 2 bis 65535 definiert, weshalb ich jetzt immer sehr viele Leerzeilen im Dropdown habe und als Zufallsfeld oft ein leerer Eintrag kommt. Kann man entweder:
- irgendwie einstellen, dass nur Zellen mit Inhalt für die Gültigkeit beachtet werden
oder
- per Makro den Bereich bei Änderung automatisch an die gefüllten Zellen anpassen lassen?
Ich dachte irgendwie an ein Zählen der gefüllten Zellen und diese Zahl dann als Bereich , zb. Range umzuwandeln. Geht das?
Vielen Dank schon mal für die Hilfe!
Gruss Michael
Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 15:32:50
fcs
Hallo Michael,
zu 1.)
füge jeweils eine weitere Select Case Anweisung für die Spalten ein, dann wird es am übersichtlichsten. Beispiel siehe unten:
zu 2.)
Verwende den Button aus der Symbolleiste "Steuerelemnet Toolbox". Einen entsprechenden Code für den Button findest du unten und wird ebenfalls im Code des Tabellenblatts eingefügt. Dieser setzt den Wert einer Variablen und ändert auch jeweils die Beschriftung des Buttons. Beim Öffnen der Datei ist der Zufallsgenerator immer abgeschaltet. ggf. stimmt dann die Beschriftung des Buttons nicht.
zusätzlich muss du am Anfang des Tabellenblatt-Codes die Variable "ZufallEin" deklarieren wie im Beispiel.
zu 3.)
wenn es ausreicht, dass die Bereiche der Auswahllisten nur beim Öffnen aktualisert werden, dann ist das OK. Ansonsten könnte man das Tabellenblatt mit den Auswahllisten auch so mit Ereignismakro trimmen, dass der Bereich eines Namens angepasst wird, sobald in der Liste weitere Einträge gemacht werden.
Gruß
Franz

Private ZufallEin As Boolean
Private Sub CommandButton1_Click()
If ZufallEin = False Then
ZufallEin = True
Me.CommandButton1.Caption = "Zufall Aus"
Else
ZufallEin = False
Me.CommandButton1.Caption = "Zufall Ein"
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ZufallEin = True Then
Select Case Target.Row
Case 3
Select Case Target.Column
Case 2, 4, 6, 8, 10
If IsEmpty(Target) Then
Target.Value = Zufall(Application.Range("Bereich2"))
End If
Case Else
'do nothing
End Select
' hier die weiteren Case-Anweisungen für Zeilen nach ähnlichem Schema
Case Else
'do nothing
End Select
End If
End Sub

Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 16:01:35
Michael
Danke, funktioniert super mit dem Button. Das mit den Leerzeilen war halt meine Notlösung mit meinen beschränkten Mitteln, wenn es da was eleganteres oder besseres wie ein Ereignismakro gibt würde mich das sehr interessieren. Ausserdem definiert er komischerweise immer abwechselnd alle Felder und dann nur die ersten 5 bis 9, bei jedem Öffnen ändert sich das, also wäre eine korrekte Lösung echt spitze.
Gruss Michael
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 17:24:59
fcs
Hallo Michael,
je nachdem welches Blatt beim Schließen der Datei das aktive Blatt ist, wird bei deinem Makro das richtige Blatt (Essensauswahl) oder ein anderes Blatt als aktives Blatt zur Berechnung der Bereiche für die Namen verwendet.
Hier eine korrigierte Fassung, die deine Probleme bereinigen sollte.
Ähnlich kann übrigens auch ein WorksheetChange-Makro für das Blatt "Essensauswahl" aussehen. Mit einer Select Case Target.Column - Konstruktion lässt du dann jeweils immer den entsprechende Block für die jeweilige Spalte abarbeiten.
Gruß
Franz

Sub workbook_open()
Dim c As Range, wks As Worksheet
Dim wert1 As Integer, wert2 As Integer, wert3 As Integer, wert4 As Integer, wert5 As Integer
wert1 = 1
wert2 = 1
wert3 = 1
wert4 = 1
wert5 = 1
Set wks = Worksheets("Essensauswahl")
For Each c In wks.Range("a2:a65536")
If c.Value = "" Then Exit For Else wert1 = wert1 + 1
Next c
adresse = "=Essensauswahl!R2C1:R" & wert1 & "C1"
ActiveWorkbook.Names.Add Name:="Suppen", RefersToR1C1:=adresse
For Each c In wks.Range("b2:b65536")
If c.Value = "" Then Exit For Else wert2 = wert2 + 1
Next c
adresse = "=Essensauswahl!R2C2:R" & wert2 & "C2"
ActiveWorkbook.Names.Add Name:="Vege", RefersToR1C1:=adresse
For Each c In wks.Range("c2:c65536")
If c.Value = "" Then Exit For Else wert3 = wert3 + 1
Next c
adresse = "=Essensauswahl!R2C3:R" & wert3 & "C3"
ActiveWorkbook.Names.Add Name:="Haupt", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("d2:d65536")
If c.Value = "" Then Exit For Else wert4 = wert4 + 1
Next c
adresse = "=Essensauswahl!R2C4:R" & wert4 & "C4"
ActiveWorkbook.Names.Add Name:="Men", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("e2:e65536")
If c.Value = "" Then Exit For Else wert5 = wert5 + 1
Next c
adresse = "=Essensauswahl!R2C5:R" & wert5 & "C5"
ActiveWorkbook.Names.Add Name:="Beilagen", RefersToR1C1:=adresse
End Sub

Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 17:25:07
fcs
Hallo Michael,
je nachdem welches Blatt beim Schließen der Datei das aktive Blatt ist, wird bei deinem Makro das richtige Blatt (Essensauswahl) oder ein anderes Blatt als aktives Blatt zur Berechnung der Bereiche für die Namen verwendet.
Hier eine korrigierte Fassung, die deine Probleme bereinigen sollte.
Ähnlich kann übrigens auch ein WorksheetChange-Makro für das Blatt "Essensauswahl" aussehen. Mit einer Select Case Target.Column - Konstruktion lässt du dann jeweils immer den entsprechende Block für die jeweilige Spalte abarbeiten.
Gruß
Franz

Sub workbook_open()
Dim c As Range, wks As Worksheet
Dim wert1 As Integer, wert2 As Integer, wert3 As Integer, wert4 As Integer, wert5 As Integer
wert1 = 1
wert2 = 1
wert3 = 1
wert4 = 1
wert5 = 1
Set wks = Worksheets("Essensauswahl")
For Each c In wks.Range("a2:a65536")
If c.Value = "" Then Exit For Else wert1 = wert1 + 1
Next c
adresse = "=Essensauswahl!R2C1:R" & wert1 & "C1"
ActiveWorkbook.Names.Add Name:="Suppen", RefersToR1C1:=adresse
For Each c In wks.Range("b2:b65536")
If c.Value = "" Then Exit For Else wert2 = wert2 + 1
Next c
adresse = "=Essensauswahl!R2C2:R" & wert2 & "C2"
ActiveWorkbook.Names.Add Name:="Vege", RefersToR1C1:=adresse
For Each c In wks.Range("c2:c65536")
If c.Value = "" Then Exit For Else wert3 = wert3 + 1
Next c
adresse = "=Essensauswahl!R2C3:R" & wert3 & "C3"
ActiveWorkbook.Names.Add Name:="Haupt", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("d2:d65536")
If c.Value = "" Then Exit For Else wert4 = wert4 + 1
Next c
adresse = "=Essensauswahl!R2C4:R" & wert4 & "C4"
ActiveWorkbook.Names.Add Name:="Men", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("e2:e65536")
If c.Value = "" Then Exit For Else wert5 = wert5 + 1
Next c
adresse = "=Essensauswahl!R2C5:R" & wert5 & "C5"
ActiveWorkbook.Names.Add Name:="Beilagen", RefersToR1C1:=adresse
End Sub

Anzeige
AW: Wert in Gültigkeitsliste zufällig auswählen
15.01.2007 13:39:30
Michael
Auf meine erste Frage nach den Leerzeilen in der Gültigkeitsliste habe ich mir nun folgende Lösung gebastelt:
&ltpre&gt
Sub workbook_open()
Dim c As Range
Dim wert1 As Integer, wert2 As Integer, wert3 As Integer, wert4 As Integer, wert5 As Integer
wert1 = 1
wert2 = 1
wert3 = 1
wert4 = 1
wert5 = 1
For Each c In ActiveSheet.Range("a2:a65536")
If c.Value = "" Then GoTo weiter Else wert1 = wert1 + 1
Next c
weiter:
adresse = "=Essensauswahl!R2C1:R" & wert1 & "C1"
ActiveWorkbook.Names.Add Name:="Suppen", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("b2:b65536")
If c.Value = "" Then GoTo weiter2 Else wert2 = wert2 + 1
Next c
weiter2:
adresse = "=Essensauswahl!R2C2:R" & wert2 & "C2"
ActiveWorkbook.Names.Add Name:="Vege", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("c2:c65536")
If c.Value = "" Then GoTo weiter3 Else wert3 = wert3 + 1
Next c
weiter3:
adresse = "=Essensauswahl!R2C3:R" & wert3 & "C3"
ActiveWorkbook.Names.Add Name:="Haupt", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("d2:d65536")
If c.Value = "" Then GoTo weiter4 Else wert4 = wert4 + 1
Next c
weiter4:
adresse = "=Essensauswahl!R2C4:R" & wert4 & "C4"
ActiveWorkbook.Names.Add Name:="Men", RefersToR1C1:=adresse
For Each c In ActiveSheet.Range("e2:e65536")
If c.Value = "" Then GoTo weiter5 Else wert5 = wert5 + 1
Next c
weiter5:
adresse = "=Essensauswahl!R2C5:R" & wert5 & "C5"
ActiveWorkbook.Names.Add Name:="Beilagen", RefersToR1C1:=adresse
End Sub&lt/pre&gt
Allerdings müsste ich jetzt noch die Zufallszuordnung deaktivieren können.
Anzeige

256 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige