Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
884to888
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
884to888
884to888
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Selektive Auswahl im Drop-Down Feld

Selektive Auswahl im Drop-Down Feld
09.07.2007 11:33:03
Martin
Hallo, ich habe ein Problem.
Und zwar ich habe Namen, und einen Nummernbereich und hier muß eine Zuordnung stattfinden.
Ich habe ca 5000 Namen und einen Nummernbereich von 0-10000 jetzt soll das in der Excel Tabelle wie folgt aussehen:
Name -------------------------------------- Nummernplatz (als Drop-Down feld)
Hans Meier ------------------------------- 15
Stefan Muster ---------------------------- 28
Marlies Knüppel -------------------------- 4
Holger Test -------------------------------- 21
Das ist ja sowei ganz einfach, nur was ist wenn ich beim 1000 Namen bin und nicht weis ob ich die 15 schon vergeben habe? Daher die Frage ob ich das lösen kann, aus meiner Zellvergabe mit dem Nummernbereich 0-10.000 die bereits selektierten (ausgewählten) Nummern auszugrenzen, so dass diese im Drop-Down Feld dann nicht mehr auftauchen, da sie schon für einen anderen Namen vergeben sind.
Oder kann ich dieses evtl. auch anders Lösen? Muß nicht unbedingt ein Drop-Down Feld sein.
Wäre nett wenn mir einer helfen könnte.
Schöne Grüße
Martin
PS: VBS hab ich keinen Plan, wenn es nur darüber geht, dann brauch ich etwas mehr hilfe

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

Betreff
Datum
Anwender
Anzeige
AW: Selektive Auswahl im Drop-Down Feld
09.07.2007 13:01:09
{Boris}
Hi Martin,
bei einem solch großen Datenbereich verbietet sich eine Formellösung (viel zu langsam).
Stattdessen VBA.
Du hast 2 Tabellen - Tabelle1 und Tabelle2.
In Tabelle2 (Hilfstabelle) erzeugst Du in Spalte A die Zahlen von 0 bis 10000. Dem gesamten Bereich (Tabelle2!A1:A10001) gibst Du den Namen Nummern.
In Tabelle1, Spalte A gibst Du die Namen ein. Die gesamte Spalte B versorgst Du mit Daten-Gültigkeit-Liste-Zulassen: Nummern
Jetzt wechsel in die VBA-Umgebung (mit Alt+F11). Links im Projektexplorer Doppelklick auf Tabelle1.
In das rechte Fenster kopierst Du diesen Code und schließt den VBA-Editor wieder.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And IsNumeric(Target) Then
With Tabelle2
.Rows(.Columns(1).Find(Target).Row).Delete
End With
End If
End Sub


Bei jeder neuen Nummernauswahl wird die Nummer aus dem Bereich Tabelle2!A1:A10001 gelöscht. Der Name Nummern passt sich dadurch immer an (Ausnahme: erster und letzter Eintrag).
Grüße Boris

Anzeige
AW: Selektive Auswahl im Drop-Down Feld
09.07.2007 14:32:01
Martin
Hy,
danke das hat mir schon mal gut weitergeholfen, leider fehlt noch etwas.
Wenn ich jetzt dem Hans Meier beispielsweise ein den Nummernplatz lösche, dann sollte diese Nummer wieder zur Verfügung stehen... Nach obiger VBS löscht es die Nummern aber fügt Sie nicht mehr ein, nach drücken von "Entf"...
Hintergrund, ich muß für unsere Telefonanlage das machen, weil es leider keinen CSV Compiler gibt, und diese Nummern sind für die Kurzwahlen gedacht, welche logischerweise nur 1x vergeben werden können. Wenn ich jetzt ein falsches CSV Einspiele, dann schmirrt mir die Anlage erstmal ab.
Bekomme ich das auch noch hin, das die erste und letzte Nummer auch noch aus der Liste verschwinden können, wenn Sie einem Namen schon zugefügt wurden?

Anzeige
Boris?
09.07.2007 16:13:00
Martin
Boris?
Kannst Du mir hier noch helfen?
Oder jemand anderes?
Schöne Grüße
Martin

AW: Boris?
09.07.2007 16:42:49
{Boris}
Hi Martin,
probier mal das: Tabelle2!A1 ist LEER. Ab A2 erzeugst Du die Zahlen von 1 bis 10000 (also bis A10001). Du vergibst den Namen Nummern für den Bereich Tabelle2!$A$1:$A$10002.
Jetzt diesen Code in das Blatt "Tabelle1" (ist nicht sonderlich elegant):

Option Explicit
Public oldValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, lRow As Long
With Target
If .Column = 2 And .Count = 1 Then
If .Value = "" And IsNumeric(oldValue) Then
Set C = Tabelle2.Range("A:A").Find(oldValue, lookat:=xlWhole)
If C Is Nothing Then
On Error Resume Next
lRow = WorksheetFunction.Match(oldValue, Tabelle2.Columns(1))
If Err.Number  0 Then lRow = 1: Err.Clear
On Error GoTo 0
Tabelle2.Rows(lRow + 1).Insert
Tabelle2.Range("A" & lRow + 1) = oldValue
End If
Else
Tabelle2.Rows(Tabelle2.Columns(1).Find(.Value).Row).Delete
End If
End If
End With
oldValue = Target(1)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Target(1)
End Sub


Grüße Boris

Anzeige
AW: Boris?
09.07.2007 17:17:34
Martin
Danke Boris,
jetzt gehts so wie ich es möchte, nur einen kleinen Hacken hat das ganze noch.
Ist jetzt nicht wichtig, das wichtigste ist ja jetzt getan.
Wenn ich jetzt die Spalte mit meinen Kurzwahlen habe, und diese Mal alle auf einen Schlag löschen möchte, also von Zeile 0-5000 auswähle und dann "Entf" drücke, dann kommt laufzeitfehler 13 "Typen unverträglich.
Beim Debuggen makiert er mir dann die Zeile:
If .Value = "" And IsNumeric(oldValue) Then
Naja, wie gesagt, ich kann damit leben, aber nur für den Fall, ein anderer sucht nach der gleichen Idee und bleibt an diesem Punkt hängen. Wäre zwar auch schön, wenn das bei mir irgendwann auch funzen würde, aber ich kann zumindest jetzt mal weiterarbeiten!!!!
Schöne Grüße
Martin

Anzeige
AW: Boris?
09.07.2007 18:10:00
{Boris}
Hi Martin,
also die von Dir genannte Zeile sollte eigentlich nicht angemeckert werden - aber was soll´s. Kleine Modifizierung des bisherigen Codes:

Option Explicit
Public oldValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, lRow As Long
With Target
If .Column = 2 And .Count = 1 Then
If .Value = "" And IsNumeric(oldValue) Then
Set C = Tabelle2.Range("A:A").Find(oldValue, lookat:=xlWhole)
If C Is Nothing Then
On Error Resume Next
lRow = WorksheetFunction.Match(oldValue, Tabelle2.Columns(1))
If Err.Number  0 Then lRow = 1: Err.Clear
On Error GoTo 0
Tabelle2.Rows(lRow + 1).Insert
Tabelle2.Range("A" & lRow + 1) = oldValue
End If
Else
If IsNumeric(.Value) Then Tabelle2.Rows(Tabelle2.Columns(1).Find(.Value).Row).Delete
End If
End If
End With
oldValue = Target(1)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Target(1)
End Sub


Und jetzt noch ein Code, der den Ursprungszustand wiederherstellt (Voraussetzung ist, dass es den Namen Nummern bereits gibt) - Code gehört in ein allgemeines Modul:


Option Explicit
Sub Ursprung_wiederherstellen()
If MsgBox("Wirklich den Ursprung wiederherstellen?", vbYesNo, "Nachfrage") = vbYes Then
With Tabelle2
ThisWorkbook.Names("Nummern").RefersTo = .Range("A1:A10002")
.Range("A:A").Clear
.Range("A2:A10001").Formula = "=ROW()-1"
.Range("A2:A10001").Value = .Range("A2:A10001").Value
Tabelle1.Range("B2:B10000").ClearContents
End With
End If
End Sub


Grüße Boris

Anzeige
Boris - Doch noch ein Fehler - Bitte lesen
09.07.2007 18:04:57
Martin
Es gibt doch noch einen Fehler...
Kannst Du mir mal deine E-Mail geben? Damit ich Dir mal das XLS zukommen lassen kann.
Irgendwie spinnt es jetzt total rum...
schick mir eine mail an:
martin.aumiller@muenchen-ist-toll.de
vielen Dank ich antworte dir dann heute abend!
Schöne Grüße
Martin

Mail ist raus ___oT
09.07.2007 18:12:14
{Boris}

226 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige