Suchen in Spalte A
#31
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#32
Hallo

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
Antworten Top
#33
Hallo

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??

mfg Gast 123


Angehängte Dateien
.xls   IND PL 2024.xls (Größe: 164 KB / Downloads: 5)
Antworten Top
#34
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
Gruss André
Antworten Top
#35
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
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#36
Hallo -Andre

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
Antworten Top
#37
Hallo Gast 123,
ja, war für die alte Version, der Code funktioniert leider bei mir nicht.

Bei der neuen Datei, passiert ausser das aus bzw. einblenden nichts,
es werden keine Daten ausgegeben.
Meldung Artikel nicht vorhanden
Gruss André
Antworten Top
#38
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?


Angehängte Dateien
.xlsm   Forum ED IND PL 2024.xlsm (Größe: 74,43 KB / Downloads: 4)
Gruss André
Antworten Top
#39
Hallo

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
Antworten Top
#40
Warum soviel Aufwand ?


Angehängte Dateien
.xlsb   __PL 2024_snb.xlsb (Größe: 47,85 KB / Downloads: 7)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste