15.11.2023, 18:21 (Dieser Beitrag wurde zuletzt bearbeitet: 15.11.2023, 18:43 von HKindler.)
Hi,
wenn du keine Anpassungen machen willst, musst du halt die kompliziertere Formel nehmen, die ich zuerst gepostet habe. Also die mit LET(). Und weitere Anpassungen sind prinzipiell nötig, wenn du, wie ursprünglich gewünscht, "nur" eine Zeilennummer haben willst, da sich in der Beispieldatei manche Artikel-Blöcke überlappen oder sogar bei identischen Blöcken unterschiedliche Bezeichnungen haben. Daher solltest du das mal dringend bereinigen. Der FILTER()-Formel ist das alles egal, da sie einfach jede Möglichkeit ausspuckt.
für welche Lösung du dich entscheidest ist dir freigestellt. Den Fehler habe ich gefunden. Im Beispiel das ich bearbeitet hatte gab es am Ende keine Angaben mit xxx/140 u.ä. Ändere bitte nur den For j Teil wie unten, damit läuft der Code.
mfg Gast 123
Code:
For j = 1 To 5 AZahl = Left(rFind.Cells(j, 1), InStr(rFind, "-") - 1) EZahl = Mid(rFind.Cells(j, 1), InStr(rFind, "-") + 1) If InStr(EZahl, "/") Then EZahl = Left(EZahl, InStr(EZahl, "/") - 1) If Not IsNumeric(Left(AZahl, 1)) Then _ AZahl = Mid(AZahl, 2) If Not IsNumeric(Left(EZahl, 1)) Then _ EZahl = Mid(EZahl, 2) 'korrekte Artikel Nr prüfen For i = AZahl To EZahl If i = CInt(Mid(Eingabe, 2)) Then 'rFind.Cells(j, 1).Interior.ColorIndex = 6 Suchen = rFind.Cells(j, 1) Range("A17:K" & lz1).AutoFilter Field:=1, Criteria1:=Suchen Exit Sub End If Next i Next j
ich habe mich entschlossen mein makro noch einmal zu überarbeiten. Jetzt gefällt es mir besser. Du kannst mit zwei Button alle Zeilen Ausblenden oder Einblenden. Dann kommt die Idee von J.K.H. Wenn alle Zeilen ausgeblendet sind werden bei Eingabe in A1 nur die Trefferzeilen eingeblendet! Du kannst jetzt neu eine 5 stellige oder 3 stellige Eingabe machen, z.B. A15 oder A1527 Entsprechen wird nur 1 Zeile oder alle Zeilen beginnend mit A15 eingeblendet!
Jezt bin ich gespannt ob diese Version Praxisgerecht für schnelles Arbeiten ist??
16.11.2023, 05:12 (Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2023, 05:40 von AndreLieske.)
Hallo Helmut, wo kommen deine Formeln rein? diese habe ich in L18: =LET(x;TEXTTEILEN(A18;"-");WENN(SPALTEN(x)=2;x;SPALTENWAHL(x;1;1))) und bis an das Ende kopiert diese habe ich in L16: =XVERGLEICH(L16;$M$18:$M$661;1;2) worin kommt diese Formel: =FILTER(A18:K661;(L18:L661<=L16)*(M18:M661>=L16)) Hallo Gast 123, habe ich angepasst. Wenn Wert in A3 leer ist, wird das Macro Markierung_löschen nicht ausgeführt. Wenn ich es manuell Starte gibt es eine Fehlermeldung
Sub Markierung_löschen() Range("A2:A" & lz1).Interior.ColorIndex = xlNone End Sub
16.11.2023, 09:41 (Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2023, 09:48 von HKindler.)
Hi,
die XVergleich() brauchst du nur, wenn du die erste (vermutlich, könnte aber auch eine andere sein) Zeilennummer haben willst. Und in dieser Form (letzter Parameter 2 statt 1) muss deine Liste sortiert sein. Warum letzter Parameter 2? Weil die Formel dann wesentlich schneller arbeitet. Bei z.B. 64.000 Einträgen bist du spätestens nach 16 Versuchen am Ziel, während du bei einer unsortierten Liste im Mittel 32.000 Versuche benötigst. Und beim Erstellen der Formel bin ich noch davon ausgegangen, dass es jeden Nummernbereich nur ein einziges mal gibt und die Liste sortiert ist.
Wo du die Filterformel hinschreibst ist egal. Es muss allerdings genügend Platz nach rechts (insgesamt 11 Spalten) und nach unten (insgesamt so viele Zeilen wie Treffer da sind) sein, sonst bekommst du einen #ÜBERLAUF!-Fehler. Wenn die Nummer nicht vorkommt, bekommst du #KALK!, es sei denn, du gibst am Ende vor der schließenden Klammer noch z.B. ;"nicht gefunden!" ein. Dann wird dir dieser Text angezeigt
die dummen kleinen Flüchtigkeitsfehler, wenn man am Code was ändert und ihn nicht mehr prüft! Versehentlich habe ich die Variable lz1 gelöscht. Ohne die klappt es nicht. S. Code unten.
Das ist aber die alte Beispieldatei mit farblich markieren. Es gibt eine neue die ich für praxisgerechter halte. Bei 646 Zeilen dürfte es schwer sein nach der Markierung zu scrollen!! Deshalb die neue Beispieldatei. IND PL 2024.xls (s. meine Antwort davor)
Bei dieser Datei kannst du per Button alle Zeilen Ein- und Ausblenden. Das Ausblenden hat seinen Sinn. Im ausgeblendeten Zustand werden nur die Artikel wieder eingeblendet, die du in der Zelle A1 angibst. Es werden beliebig viele Artikel angezeigt. Gibst du z.B. A18 ein, werden alle Artikel mit A18xx angezeigt. Könnte diese Methode praxisgerechter sein?? Das musst du entscheiden.
Danke an J.K.H. für seine Idee es so zu machen. Die habe ich nur weiterentwickelt. (Teamarbeit)
mfg Gast 123
Code:
Sub Markierung_löschen() lz1 = Cells(Rows.Count, 1).End(xlUp).Row Range("A2:A" & lz1).Interior.ColorIndex = xlNone End Sub
17.11.2023, 07:54 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2023, 07:54 von AndreLieske.)
Gast 123,
habe mich entschieden, deine Version ""ED2024 F2" zu nehmen. Einen kleinen Schönheitsfehler gibt es noch.
Ich habe in Spalte A als Hintergrundfarbe "#F2F2F2" die wird gelöscht ( A2 bis A17 ) Kann die wieder angezeigt werden?
Das wäre Perfekt?
Habe doch noch was gefunden in Zeile 443 & 444, dort sind die Artikelnummer doppelt, sie unterscheiden sich in: Zeile 443 V3473-V3473/300 Zeile 444 V3473-V3473/300BB das sind zwei unterschiedliche Artikel und haben unterschiedliche Preise Ist es möglich beide auszugeben?
es freut mich das dir mein Programm gefällt, ohne die Arbeit der Kollegen abzuwerten. Hier ein bereinigter Code, mit zwei Erweiterungen die evtl. für dich von Vorteil sind.
Die Zeile mit Innenfarbe löschen habe ich gelöscht, weil wir mit Autofilter arbeiten! Ohne Markierung! V3473 wird jetzt doppelt angezeigt. Dabei fiel mir noch ein Fehler auf beim Artikel - V3801/290BB Dort gibt es ein / Zeichen, aber keine doppelte Zahl durch - Zeichen. Das habe ich direkt korrigiert.
Du kannst die Artikel jetzt auch mit 2 Zahlen eingeben, z.B. A38, und bekommst alle A38xx angezeigt. Du kannst auch nach "/145" filtern, dann bekommst du die komplette 145 Serie angezeigt.
Sollte in der Praxis noch ein Fehler auftauchen beheben wir ihn. Jetzt warte ich mal deine Tests ab.
mfg Gast 123
Code:
Sub Artikel_suchen() Dim rFind As Range, i, j, lz1 As Long Application.ScreenUpdating = False ActiveSheet.AutoFilterMode = False
Eingabe = Range("E4").Value lz1 = Cells(Rows.Count, 1).End(xlUp).Row If Eingabe = Empty Then Exit Sub
'Nur / Zeichen mit Zahl If Left(Eingabe, 1) = "/" Then Range("A17:K" & lz1).AutoFilter Field:=1, Criteria1:="*" & Eingabe & "*": Exit Sub End If
'Suche nach voller Artikel Nr. (ohne -) Set rFind = Range("A2:A" & lz1).Find(What:=Eingabe, After:=[a2], LookIn:=xlFormulas, LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False) If Not rFind Is Nothing Then 'ohne - Zeichen) Range("A17:K" & lz1).AutoFilter Field:=1, Criteria1:=Eingabe: Exit Sub End If
'Suche nach Kombi Artikel Nr. (mit -) 'letzte Stelle zum suchen abschneiden Suchen = Left(Eingabe, Len(Eingabe) - 1) If Len(Eingabe) = 3 Then Suchen = Eingabe If rFind Is Nothing Then _ Set rFind = Range("A2:A" & lz1).Find(What:=Suchen, After:=[a2], LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then 'Ausnahme: / Zeichen ohne - Zeichen! If InStr(rFind, "-") = 0 And InStr(rFind, "/") Then Range("A17:K" & lz1).AutoFilter Field:=1, Criteria1:=Eingabe & "*": Exit Sub ElseIf Len(Eingabe) = 3 Then Range("A17:K" & lz1).AutoFilter Field:=1, Criteria1:=Eingabe & "*": Exit Sub End If 'zehn Zellen nach unten durchsuchen Suchen = Empty For j = 1 To 5 AZahl = Left(rFind.Cells(j, 1), InStr(rFind, "-") - 1) EZahl = Mid(rFind.Cells(j, 1), InStr(rFind, "-") + 1) If InStr(EZahl, "/") Then EZahl = Left(EZahl, InStr(EZahl, "/") - 1) If Not IsNumeric(Left(AZahl, 1)) Then _ AZahl = Mid(AZahl, 2) If Not IsNumeric(Left(EZahl, 1)) Then _ EZahl = Mid(EZahl, 2) 'korrekte Artikel Nr prüfen For i = AZahl To EZahl If i = CInt(Mid(Eingabe, 2)) Then 'rFind.Cells(j, 1).Interior.ColorIndex = 6 'Suchen = rFind.Cells(j, 1) Range("A17:K" & lz1).AutoFilter Field:=1, Criteria1:=Eingabe & "*" Exit Sub End If Next i Next j Else MsgBox Eingabe & " Artikel Nr. nicht gefunden!" End If Exit Sub
Fehler: MsgBox AZahl & -" / " & EZahl & vbLf & "Anfangs oder Endzahl Fehler!" End Sub