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

Datenüberprüfung aus Liste

Datenüberprüfung aus Liste
02.12.2014 10:51:36
Peter
Hallo zusammen,
Mir bereitet die abhängige Datenüberprüfung Kopfzerbrechen.
Die vereinfachte/exemlparische Situation:
Ich habe eine Tabelle mit 2 Spalten. In die erst (A:A) gebe ich einmalig vorkommende Bezeichnungen ein und weise diesen in der zweiten Spalte (B:B) eine Kategorie zu. Die Kategorien beziehe ich aus einer dynamischen (benannten) Liste. Soweit so gut.
Problem:
Nun möchte ich in einer weiteren Liste (auf einem anderen Tabellenblatt) eine Datenüberprüfung implementieren, die abhängig von der dort in Spalte (A:A) gewählten Kategorie (aus der benannten Liste) in Spalte (B:B) ein Dropdown anbietet, welches nur die Werte aus der ersten Tabelle ausgibt denen die entprechende Kategorie zugewiesen wurde. Mir scheint, dass es sich dabei um kein ungewöhliches Anliegen handeln dürfte.
Die Möglichkeit die abhängige Datenüberprüfung per Indirekt() zu lösen ist mir bekannt, aber nicht zielführend, da ich für jede Kategorie eine neue Tabelle (mit Name versehen) anlegen müsste. In meinem konkreten Fall gibt es aber zum Einen zu viele Kategorien und zum Anderen können ständig neue Kategorien hinzukommen.
Frage:
Welche Formel muss ich für die Datenüberprüfung benutzen, damit die Quelltabelle nach den Kategorien durchsucht wird und die zugehörigen Bezeichnungen zur Auswahl angeboten werden?
Ich habe bereits einige Kombinationen von Aggregat, Index, Vergleich, usw. versucht, komme aber zu keinem Ergebnis.
Falls dieses Problem schon einmal besprochen wurde und ich es hier nicht finden konnte, bitte ich um einen Link.
Beste Grüße,
Peter

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenüberprüfung aus Liste
02.12.2014 10:55:24
SF
Hola,
leg dir eine Hilfsspalte an, in der du alle zur Kategorie gehörenden Werte ausgibst:
http://www.excelformeln.de/formeln.html?welcher=224
Auf diese erstellte Liste, beziehst du dein Dropdown.
Gruß,
steve1da

AW: Datenüberprüfung aus Liste
02.12.2014 11:44:02
Peter
Vielen Dank für die schnelle Antwort,
Es ist schön zu wissen, dass man die Array-Formel vermeiden kann :)
Leider löst das mein Problem nicht, denn dann müsste ich ja entweder für jede Kategorie eine solche Hilfsspalte anlegen, bennen und in der Datenüberprüfung mit Indirekt() arbeiten (auf diesen Pfaden bin ich schon gewandert) oder ich müsste das Suchkriterium per VBA (Selection_Change - Wert Links von Selection) dynamisch bestimmen. Das scheint mir aber auch völlig übertrieben.
Ich suche daher nach einer entprechenden Formel für die Datenüberprüfung. Sinngemäß so: Datenüberprüfung - Liste - Formel: alle Einträge aus (Tabelle1!A:A) deren Kategorie (Tabelle1!B:B) der Wert der Zelle neben der Datenüberprüfung (Tabelle2!A...) ist.
In einer Pivot-Tabelle werden die Daten ja z.B. auch automatisch so gefiltert, wenn ich als Zeilenbeschriftungen "Bezeichnung" und "Kategorie" wähle. Dem muss man doch auch mit der Datenüberprüfung, ohne Hilfsspalten beikommen. Oder sehe ich das falsch?
Beste Grüße,
Peter

Anzeige
AW: Datenüberprüfung aus Liste
02.12.2014 11:58:57
SF
Hola,
nur um sicher zu gehen. Du wählst eine Kategorie per Dropdown, und möchtest zu dieser in einem weiteren Dropdown nur die Werte erhalten, die der gewählten Kategorie zugeordnet sind?
Gruß,
steve1da

AW: Datenüberprüfung aus Liste
02.12.2014 12:12:19
Peter
Hallo Steve,
Ja, genau.
Danke für deine Bemühungen.
Beste Grüße,
Peter

AW: Datenüberprüfung aus Liste
02.12.2014 12:15:36
SF
Hola,
dann ist mein Weg doch richtig.
Das "x" in meinem Link wäre in deinem Fall der Wert aus dem Dropdown - und daraus erstellst du dir die Liste in der Hilfsspalte - auf diese Liste wendest du das 2. Dropdown an.
Du kannst auch gerne eine Beispieldatei hochladen ;)
Gruß,
steve1da

Anzeige
AW: Datenüberprüfung aus Liste
02.12.2014 13:09:22
Peter
Hallo Steve,
dein Weg ist bestimmt nicht falsch, aber ich habe ein Problem damit.
Ich habe mal ein einfaches Beispiel zur Verdeutlichung gebaut und angehangen: https://www.herber.de/bbs/user/94149.xls
In Tabelle 1 befinden sich meine Kategorien (Spalte H). Im Original sind das mehr und sie können ergänzt werden. In Spalte A kann ich Bezeichnungen eingeben und diesen eine Kategorie (Spalte B) zuweisen. Dein Vorschlag war es, in einer Hilfsspalte nach Kategorie zu filtern. Das mache ich in Spalte E und F mit Array :)
In Tabelle 2 möchte ich nun zu einer Kategorie die gefilterten Bezeichnungen per Dropdown auswählen können OHNE dabei den Suchbegriff in Tabelle1 (E1) ändern zu müssen. Und genau da liegt das Problem.
Wie soll das Dropdown in Spalte B "wissen" welche Kategorie links daneben steht?
Beste Grüße,
Peter

Anzeige
AW: Datenüberprüfung aus Liste
02.12.2014 13:43:11
Rudi
Hallo,
da kommst du wohl um VBA nicht herum.
Gruß
Rudi

nachgefragt ...
02.12.2014 14:41:50
neopa
Hallo Peter,
... wieviele Kategorien sind es denn ca. bzw. max? Und wieviele "Artikel" je Kategorien max?
Wenn es sich nicht um eine Massendatenverarbeitung handelt, wäre nämlich eine VBA-freie Lösung durchaus möglich.
Gruß Werner
.. , - ...

AW: nachgefragt ...
03.12.2014 09:52:41
Peter
Hallo Werner,
Genau kann ich das noch nicht abschätzen, aber es dürften circa 50 Kategorien mit je ca 50 "Artikeln" werden.
Ich bin gespannt auf den VBA-freien Vorschlag, denn die VBA-Variante frisst unglaublich Performance.
Beste Grüße,
Peter

Anzeige
VBA langsam?
03.12.2014 11:12:17
Rudi
Hallo,
denn die VBA-Variante frisst unglaublich Performance.
wer sagt das?
In ein Modul:
Option Explicit
Public objKategorie As Object
Sub InitKategorie()
Dim rngC As Range, arrTmp, i As Long
Set objKategorie = CreateObject("Scripting.dictionary")
With Sheets(1)
arrTmp = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 2)
End With
For i = 1 To UBound(arrTmp)
If objKategorie.exists(arrTmp(i, 2)) Then
objKategorie(arrTmp(i, 2)) = _
objKategorie(arrTmp(i, 2)) & "," & arrTmp(i, 1)
Else
objKategorie(arrTmp(i, 2)) = arrTmp(i, 1)
End If
Next
End Sub

In Tabelle2:
Option Explicit
Private Sub Worksheet_Activate()
InitKategorie
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 2 Then
If Target.Offset(, -1)  "" Then
If objKategorie Is Nothing Then InitKategorie
With Target.Validation
.Delete
.Add _
Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=objKategorie(Target.Offset(, -1).Value)
.IgnoreBlank = True
.InCellDropdown = True
End With
End If
End If
End If
End Sub

Geht mit 5500 Artikeln in 50 Kategorien rasend schnell. Das merkst du gar nicht.
Gruß
Rudi

Anzeige
AW: VBA langsam?
03.12.2014 17:09:12
Peter
Vielen Dank Rudi!
Das funktioniert im Beispiel bestens. Leider bekomme ich die Funktionalität von meinem stark vereinfachten Beispiel nicht in meine tatsächliche Mappe übertragen. Da ich deinen Code nicht zu 100% nachvollziehen kann wäre es riesig, wenn du mir ihn nochmal anpassen könntest.
Zum Modul: Wie würden der Code lauten, wenn die Quelldaten nicht in Spalte 1(A) und 2(B), sondern in 2(B) und 4(D) stehen?
Zur Tabelle: Wie würden der Code lauten, wenn die Ergebnisse nicht in Spalte 1(A) und 2(B), sondern in 25(Y) und 26(Z) stehen?
Es gibt dann zwar noch weitere Varianten, aber wenn ich diesen Unterschied verstehe, kann ich mir weitere Anpassungen sicher ableiten.
Beste Grüße,
Peter

Anzeige
AW: VBA langsam?
03.12.2014 22:00:56
Rudi
Hallo,
@1:
Sub InitKategorie()
Dim rngC As Range, arrTmp, i As Long
Set objKategorie = CreateObject("Scripting.dictionary")
With Sheets(1)
arrTmp = .Range(.Cells(2, 2), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
End With
For i = 1 To UBound(arrTmp)
If objKategorie.exists(arrTmp(i, 3)) Then
objKategorie(arrTmp(i, 3)) = _
objKategorie(arrTmp(i, 3)) & "," & arrTmp(i, 1)
Else
objKategorie(arrTmp(i, 3)) = arrTmp(i, 1)
End If
Next
End Sub

@2:
If Target.Column = 26 Then
Gruß
Rudi
Gruß
Rudi

Anzeige
AW: VBA langsam?
04.12.2014 09:50:48
Peter
Hallo Rudi,
VBA wirft mir den Laufzeitfehler 1004 aus. Daher habe ich versuchsweise meine Beispieldatei so angepasst, dass sie den Bedingungen (relevante Zellbereiche) meiner Originalmappe entspricht. Auch hier wird der Laufzeitfehler gemeldet: https://www.herber.de/bbs/user/94181.xls
Der Debugger markiert im Original und im Beispiel folgenden Bereich:
.Add _
Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=objKategorie(Target.Offset(, -1).Value)
Falls du dir nocheinmal die Mühe machen könntest deinen Code am Beispiel zu überprüfen, würdest du mir sehr helfen.
Beste Grüße,
Peter

Anzeige
AW: VBA langsam?
04.12.2014 11:40:03
Rudi
Hallo,
kleiner Fehler, große Wirkung.
Sub InitKategorie()
Dim rngC As Range, arrTmp, i As Long
Set objKategorie = CreateObject("Scripting.dictionary")
With Sheets(1)
arrTmp = .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)).Resize(, 3)
End With
For i = 1 To UBound(arrTmp)
If objKategorie.exists(arrTmp(i, 3)) Then
objKategorie(arrTmp(i, 3)) = _
objKategorie(arrTmp(i, 3)) & "," & arrTmp(i, 1)
Else
objKategorie(arrTmp(i, 3)) = arrTmp(i, 1)
End If
Next
End Sub

Gruß
Rudi

AW: VBA langsam?
04.12.2014 12:01:47
Peter
Großartig, Rudi!
Jetzt läuft's edel.
Vielen Dank an dich und auch an Steve für eure Bemühungen!
Ich wünsche euch noch einen schönen Tag, meiner ist es jetzt :)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige