Stückliste kürzen

Moderator: ModerationP

Stückliste kürzen

Beitragvon Voodoo176 » 04. Okt 2017, 14:26

Hallo zusammen,

ich habe folgendes Problem … ich muss öfters mal Stücklisten vergleichen welche extrem groß sind. Dazu hätte ich gerne ein Makro welches mir überflüssige Zeilen löscht.

Aufteilung der Spalten:
A = Level
B = Artikelnummer
C = Beschreibung
D = …

Jetzt will ich das mir das Makro in der Beschreibung den Textbaustein ABC ….. sucht. Wenn eine Beschreibung mit ABC…. am Anfang gefunden wurde dann merke dir das Level in Spalte A (Zahlenwert) und lösch alle Zeilen und dich selbst bis ein Level kommt welches den gleichen Wert hat.

z.B.

1 123456 Blech
2 123457 ABC-Grundkörper
3 789456 Blech_2
3 785241 Blech_3
4 123458 Schraube
2 123457 Unterlagscheibe


Soll:

1 123456 Blech
2 123457 Unterlagscheibe


Vielen Dank
Voodoo176
Voodoo176
 

Re: Stückliste kürzen

Beitragvon juvee » 04. Okt 2017, 15:28

Hi,

meinst du so?

Code: Alles auswählen
Sub abc()
Dim c As Range, i As Long
Dim firstaddress As String, strErg As String

With Worksheets("Tabelle2")
  Set c = .Columns(3).Find(what:="ABC", LookIn:=xlValues, lookat:=xlPart)
   If Not c Is Nothing Then
    firstaddress = c.Address
     
     Do
       i = c.Row + 1
       While .Cells(i, 1) <> c.Offset(0, -2)
         i = i + 1
        Wend
        strErg = strErg & "," & c.Row & ":" & i - 1
     
     Set c = .Columns(3).FindNext(c)
   Loop While Not c Is Nothing And c.Address <> firstaddress
  End If


For i = UBound(Split(Mid(strErg, 2), ",")) To 0 Step -1
.Rows(Split(Mid(strErg, 2), ",")(i)).Delete
Next
End With
End Sub


VG Juvee
juvee
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1468
Registriert: 05. Jun 2014, 12:48

Re: Stückliste kürzen

Beitragvon Voodoo176 » 05. Okt 2017, 06:31

Hi,

danke dir es funktioniert :mrgreen:
Voodoo176
 

Re: Stückliste kürzen

Beitragvon Voodoo176 » 05. Okt 2017, 07:30

Hallo zusammen,

also nach dem ersten richtigen Test habe ich leider ein Fehler festgestellt. Wenn der zu löschende Bereich zu groß ist löscht er mir zu viel weg :( Konnte leider noch keine Ursache dafür finden.

Gruß
Voodoo176
Voodoo176
 

Re: Stückliste kürzen

Beitragvon slowboarder » 05. Okt 2017, 07:52

Hi

probier mal das.
hier erst mal die manuelle Version, wenn's funktioniert kann man das auch problemlos in ein Makro umschreiben:

1. füge in Zeile 2 ab Spalte D folgende Formeln ein (können a uch andere Spalten am Tabellenende sein, dann verschieben sich die Spaltenbezüge ab Spalte D entsprechen. Ziehe die Formeln bis ans Tabellenende

D2: =LINKS(C2;3)="ABC"
E2: =WENN(D2;A2:A2;E1)
F2: =WENN(D2;WAHR;WENN(F1;E2<>A2;FALSCH))
G2: =WENN(F2;0;ZEILE())

2. schreibe in die Zelle G1 (überschriftenzeile) die 0

3. führe mit der ganzen Tabelle die Funktion DATEN - DATENTOOLS - DUPLIAKTE ENTFERNEN aus, mit der Spalte G als Kriterium und der Option "keine Überschrift"

4. lösche die Spalten D-G wieder

das hat folgende Vorteile:
1. kannst du nach einfügen der Formeln nochmal prüfen, ob das auch richtig arbeitet (alle Zeilen, die gelöscht werden, haben die 0, alle anderen ihre Zeilennummer)
2. geht das anschließende Löschen der Zeilen mit Duplikateentfernen auch bei großen Datenmengen sehr schnell.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 23583
Registriert: 18. Apr 2009, 13:33

Re: Stückliste kürzen

Beitragvon Voodoo176 » 05. Okt 2017, 10:39

Hallo slowboarder,

hat mit dem kleinen Test funktioniert :D
kannst du das noch bitte in ein Makro übersetzen :?:

Dank

Gruß
Voodoo176
 

Re: Stückliste kürzen

Beitragvon Voodoo176 » 05. Okt 2017, 11:35

Hallo zusammen,

also ich stoße auch hier auf Fehler aber jetzt habe ich wenigstens gesehen wo die her kommen. Denke mal dass das auch das Problem beim Makro von Juvee ist.
Und zwar kommt "ABC" auch öfters in einem anderen "ABC" vor welches aber ein tieferes Level hat. Da kommt er durcheinander

Beispiel von oben:

1 123456 Blech
2 123457 ABC-Grundkörper
3 789456 Blech_2
3 785241 ABC-Blech_3
4 123458 Schraube
2 123457 Unterlagscheibe


Soll:

1 123456 Blech
2 123457 Unterlagscheibe


Das zweite "ABC" soll unberücksichtigt bleiben. Es soll das erste ABC suchen und dann nur noch in den Spalte LEVEL suchen bis wieder sie gleiche Zahl kommt egal was dann in Beschreibung steht.

Sorry war mir auch nicht so klar :shock:
Voodoo176
 

Re: Stückliste kürzen

Beitragvon juvee » 05. Okt 2017, 11:42

Hi,

dann kommentiere diese Zeile aus oder lösche sie

Set c = .Columns(3).FindNext(c)


Es wird dann aber auch lediglich das erste "ABC" behandelt

VG Juvee
juvee
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1468
Registriert: 05. Jun 2014, 12:48

Re: Stückliste kürzen

Beitragvon slowboarder » 05. Okt 2017, 14:44

Hi

ich hab das Formelwerk nochmal an deine neue Anforderung angepasst und überarbeitet.
sieht jetzt so aus:

D2: =WENN(ISTZAHL(D1);WENN(UND($A2<=D1;LINKS($C2;3)<>"ABC");"xxx";D1);WENN(LINKS($C2;3)="ABC";$A2;"xxx"))
E2: =ZEILE()*ISTTEXT(D2)

solltest du die Formeln in andere Spalten schreiben, müssen die relativen Spaltenbezüge entsprechend angepasst werden.

dann wie bisher in die Zeilen 1 der Spalte E ebenfalls die 0 schreiben und DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN ausführen, mit "keine Überschrift" und der Spalte E als Kriterium

sieht als Makro dann so aus.
Anforderungen an die Datei:
- Zeile 1 ist Überschrift, ab Zeile 2 stehen Daten.
- Spalte A-C wie beschreiben, der Code fügt die Formeln automatisch am Dateiende an.

Code: Alles auswählen
Sub ZeilenLöschen()
With ActiveSheet.UsedRange
    With .Columns(.Columns.Count + 1).Resize(, 2)
        With .Offset(1, 0).Resize(.Rows.Count - 1)
            .Columns(1).FormulaR1C1 = "=IF(ISNUMBER(R[-1]C),IF(AND(RC1<=R[-1]C,LEFT(RC3,3)<>""ABC""),""xxx"",R[-1]C),IF(LEFT(RC3,3)=""ABC"",RC1,""xxx""))"
            .Columns(2).FormulaR1C1 = "=ROW()*ISTEXT(RC[-1])"
        End With
        .Cells(1, 2).Value = 0
        .EntireRow.RemoveDuplicates .Column + 1, xlNo
        .ClearContents
    End With
End With
End Sub



wenn die Markierung noch nicht ganz passt, kannst du ggf das makro auch selbst entsprechen anpassen.
stoppe hierzu den Code nach dem Einfügen der beiden Formeln.
Überarbeite dann in der Tabelle die beiden Formeln, bis die richtigen Zellen markiert werden (gelöscht wird, wenn in der ersten Zelle eine Zahl steht)
Wenn die Formel dann passt, wechselst du in den VBA-Editor, lässt dir die Formel im Direktfenster mit
?Replace(Selection.FormulaR1C1, """", """""")
anzeigen und kopierst sie in den Code.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 23583
Registriert: 18. Apr 2009, 13:33


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Dsoffice, GastBiber, mumpel, snb und 17 Gäste