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

nochmal dynamische Datenüberprüfung

nochmal dynamische Datenüberprüfung
29.05.2017 17:50:50
Der
der alte Beitrag
https://www.herber.de/forum/messages/1560574.html
Ich hatte es mal so versucht, wie Hajo es vorgeschlagen hatte
Duch die Arrayformel aber extreme Laufzeit.
Ich bin jetzt schon Weiter.. Habe also schon eine bereinigte KennListe
Um es genau dazustellen hole ich mal ganz weit aus und versuche es möglichst genau zu beschreiben.


Über Gültigkeiten, möchte ich die Kennliste im Dropdown angezeigt bekommen, reduziert um die Einträge, die in der Spalte schon vorhanden sind. Also voll dynamisch.
Ich habs über eine Schleife versucht, die neue Anzeigeliste zusammenzubauen.
Die Ausgangs Kennliste:
KennListe
 A
1Kennungen
220000
320030
420040
520050
620060
720220
820230
920240
1020250
1120260
1220270
1320280
1420290
1520300

Hier sind mögliche Nummern vorhanden. Die Liste hat ja Lücken, ist aber aufsteigend sortiert. Hat ca. 1000 Einträge.
Wenn ich jetzt in

Erfassung
 DEF
1 Kennung 
2 20030 
3 20000 
4 20040 
5   
6 20060 
7   
8   
9   
10 20050 
11   

eine Zelle in Spalte E anwähle, dann läuft dieses Ereignismakro und arbeitet die KennListe ab, Es wird verglichen, ob der jeweilige Kennlisteneintrag schon hier in der Spalte vorhanden ist, wenn nicht, dann Liste= Liste & DerEintarg & ", " usw.
Es sollen die
20030
20000
20040
usw.
nicht mehr vorgeschlagen werden.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Call Var_Bel 'Variablen Belegung 
    
    If Target.Row = 1 Then Exit Sub
    If Not Intersect(Columns(5), Target) Is Nothing Then
       '*** Nur, wenn nur eine Zelle ausgewählt ist 
        If Target.Count = 1 Then
            Call MachListe(Target)
        End If
    End If

End Sub

Private Sub MachListe(Zelle As Range)

    Lr05 = Tb05.Cells(Tb05.Rows.Count, 1).End(xlUp).Row
    Set RNG = Tb05.Cells(2, 1).Resize(Lr05, 1)

    'Liste erzeugen 
    Dim Z
    Liste = ""
    
    For Each Z In RNG
        If (WorksheetFunction.CountIf(Range("E:E"), Z.Value) = 0) Or Z = Zelle Then
            Liste = Liste & Z.Value & ","
        End If
    Next
     
    '*** Datenüberprüfung setzen 
     If Liste <> "" Then
         With Zelle.Validation
             .Delete
             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                 Operator:=xlBetween, Formula1:=Liste
             .IgnoreBlank = False
             .InCellDropdown = True
             .ShowInput = True
             .ShowError = True
         End With
     End If
End Sub
in einem Modul
Option Explicit
'*** Variable zur gemeinsamen Nutzung deklinieren 

Public Tb02 As Worksheet, Tb05 As Worksheet
Public Lr02 As Double, Lr05 As Double
Public RNG As Range, Liste As String

Public Belegt As Boolean 'Set nur 1x ausführen 

Sub Var_Bel()
    If Belegt = False Then
        Set Tb02 = ThisWorkbook.Sheets("Erfassung")
        Set Tb05 = ThisWorkbook.Sheets("KennListe")
        Belegt = True
    End If
End Sub
Das klappt auch ganz gut, braucht natürlich auch Rechenzeit,
JETZT aber!!!!
2 Probleme
A)
Die Anzahl der Listeinträge scheint begrenzt. Ab einer, mir noch nicht bekannten Anzahl, kommt es zu eine Fehlermeldung beim setzen der Gültigkeit.
B)
Wenn ich so die Gültigkeit in Zellen gesetzt habe und die Datei speichere und wieder öffne, dann erscheinen diese Meldungen.
Userbild
Drücke ich Ja
Userbild
und dann auf den LOG-Datei Link
Userbild
Hat jemand eine vielleicht ganz andere Lösung zu dem Problem oder/und eien Idee, wie ich B) abstellen kann?
Die Datei
mit Makros
https://www.herber.de/bbs/user/113871.xlsm
ohne Makros für, diejenigen, die sowas nicht aus dem Web laden
https://www.herber.de/bbs/user/113872.xlsx
Danke und Gruß Uwe

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: warum ein neuer thread? ... und ...
29.05.2017 19:22:23
...
Hallo Uwe,
... so bekommen es Deine bisherigen Helfer möglicherweise Deine neuen Angaben nicht mit.
Aus VBA-Lösungen halte ich mich heraus. Eine reine Formellösung ist zwar möglich aber schon fast etwas grenzwertig (Auswertungsgeschwindigkeit).
Für die von mir nachfolgend aufgezeigte Formellösung schreibst Du in Deiner "Kennliste" z.B. Spalte H eine Hilfsspaltenformel und zwar in H2:
=WENNFEHLER(AGGREGAT(15;6;A$2:A$999/(ZÄHLENWENN(Erfassung!E$2:E$99;A$2:A$999)=0)/(A$2:A$999>0); ZEILE(A1));"") 
Diese Formel bis Zeile 999 nach unten kopieren.
Im Namensmanager definierst Du nun folgende Formel:
=KennListe!$H$2:INDEX(KennListe!$H:$H;ANZAHL(KennListe!$H:$H)) zum Namen z.B.: Kennung oder wie auch immer.
Diese benannte Formel kannst Du nun in der Datengültigkeit für Erfassung!E2:E### einsetzen, sie wertet dynamisch Deine Erfassung wie gewünscht aus.
Gruß Werner
.. , - ...
Anzeige
AW: Leider Laufzeitproblem
30.05.2017 14:31:16
Der
Hallo Werner
Das klappt prima. Hab ich in meiner Orginaldatei auch so eingebaut.
Habe aber gerade erfahren, das der Eingabebereich bis zu 10.000 Zeilen groß wird.
Da wird das mit der Laufzeit bei der Formel nicht mehr akzeptabel.
(Nebenbei, klappt dann auch die VBA Lösung nicht mehr)
Nochmal zusammengefasst
Aus einer Liste zulässiger Nummern, dürfen die, die bereits "Vergeben" wurden nicht mehr vorgeschlagen werden.
Wird ein Eintrag wieder gelöscht, ist die Nr. wieder verfügbar.
Hat sonst noch jemand eine Idee ( evtl was ganz Anderes )
Danke und Gruß Uwe
Anzeige
AW: nachgefragt ...
30.05.2017 15:33:32
...
Hallo Uwe,
... wie viele Kennungen sollen denn in in Deinem Erfassungsdatenblatt max erfasst werden?
Gruß Werner
.. , - ...
AW: nachgefragt ...
30.05.2017 16:53:17
Der
Hallo Werner
Es gibt wirklich 10.000 Nummern
Ich teile das schon in 10 Nummernkreise die ich per VBA in der Listbereich reinschicke,
Je nach User. Der kann dann aus nur je 1000 Nr. wählen,
Aber es muss immer die gesamte Eingabespalte gecheckt werden, (also bis zu 10.000) ob schon irgendwo bereits benutz.
Die Vorschlagsliste im Dopdown wird also immer kürzer, je mehr Einträge ich vorgenommen habe.
Danke und Gruß Uwe
AW: dann evtl. mit einer weiteren Hilfsspalte ...
30.05.2017 17:13:11
...
Hallo Uwe,
... um eine schnellere Formellösung zu ermöglichen.
In KennListe!I2: =WENN(ZÄHLENWENN(Erfassung!E:E;A2);"";ZEILE()) und Formel nach unten kopieren
und ersetze meine bisherigen Formelvorschlag in KennListe!H2 wie folgt:
=WENN(ZEILE(H1)>ANZAHL(I:I);"";INDEX(A:A;KKLEINSTE(I:I;ZEILE(H1))))
und nach unten kopieren. alles andere wie zuvor.
Teste mal.
Gruß Werner
.. , - ...
Anzeige
AW: dann evtl. mit einer weiteren Hilfsspalte ...
31.05.2017 08:16:10
Der
Hallo Werner
Da das ganze sich doch mehr aufgebläht hat als ursprünglich mal gedacht, habe ich mit meinem Chef eine andere Lösung besprochen.
Beim Eintrag in der Eingabespalte lösche ich die entsprechende Zeile in der Kennliste
und sperre die entsprechende Eingabezelle, indem ich ihr in der Datenüberprüfung ihren eigenen Wert als einzige Option zuweise.
Eine einmal eingetrage Nummer kann also nie wieder geändert werden; damit ist die Dynamik wesentlich einfacher hinzubekommen.
Das natürlich über das change Ereignis mit VBA
Ich danke dir für deine exzellente Hilfe, habe mir deine Vorschläge für ein ggf. anderes Projekt abgespeichert.
Danke und Gruß Uwe
Anzeige
AW: danke für Deine Information owT
31.05.2017 08:47:02
...
Gruß Werner
.. , - ...
AW: nochmal dynamische Datenüberprüfung
01.06.2017 06:57:20
Oberschlumpf
Hi Uwe
vielleicht bin ich ja zu spät.
Aber im alten Thread bat ich dich um eine Bsp-Datei, die leider nie von dir kam.
Nun hab ich trotzdem mal, anhand deiner gezeigten Bsp-Tabelle im alten Thread, einen VBA-Code entwickelt.
(ich "bastel" normal keine Dateien nach, die in Beiträgen nur gezeigt werden, aber nicht per Upload zur Verfügung gestellt werden)
Hier:
https://www.herber.de/bbs/user/113938.xlsm
Erklärungen sind in der Datei.
Hilfts denn?
Ciao
Thorsten
AW: nochmal dynamische Datenüberprüfung
01.06.2017 11:46:49
Der
Hallo Thorsten
Das sieht gut aus. Ich schrieb ja schon, mit arrays hab ich noch so meine Probleme.
Deine Lösung geht wesentlich schneller.
Aber auch hier kommt es nach ca 1170 Einträgen bei der Zuweisung der Datenüberprüfung zu einem Fehler.
Ich denke die max Anzahl Einträge oder Zeichen wird überschritten. Das hab ich noch nicht rausgefunden.
Bitte nicht mehr weiter suchen. Wie geschrieben habe ich es anders gelöst.
Danke und Grüße Uwe
Anzeige
AW: nochmal dynamische Datenüberprüfung
01.06.2017 18:56:06
Oberschlumpf
Hi Uwe
Alles klar.
Ich suche für mich weiter - und ich glaub, ich hab etwas gefunden :-)
Aber ich muss das noch testen.
Bisher erhalte auch ich n Fehler.
Den kann man aber vielleicht umgehen, indem man Bereichsnamen dynamisch einsetzt.
Wenn das klappt, ist auch die Hilfsspalte nicht mehr erforderlich.
Wie gesagt, ich werde noch n bisschen für mich weiterbasteln.
Ciao
Thorsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige