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

Stücklisten Lösung für Thomas von Piet

Stücklisten Lösung für Thomas von Piet
25.04.2021 15:55:44
Piet
Hallo Thomas und Kollegen
dies ist meine letzte Lösung für diesen Thread. Weil mein PC defekt ist konnte ich sie nicht hochladen.
Kann auf eine Antwort zur Zeit nicht antworten. Morgen geht der PC in Reparatur, dies ist der Laptop von einem Gast.
Thomas ist in anderen Threads, ihn bitte auf das neue Beispiel hinweisen. Danke an die Kollegen ...
Excel Stücklisten vergleichen - Thomas 16.04.2021 08:07:22
https://www.herber.de/bbs/user/145776.xlsm
mfg Piet

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Stücklisten Lösung für Thomas von Piet
26.04.2021 13:36:06
Piet
Hallo Piet,
vielen vielen Dank für deine Mühen. Das mit dem defekten PC ist natürlich sehr Ärgerlich, hoffentlich sind keine Daten verloren gegangen.
Ich habe deine Lösung getestet, allerdings kommt es noch zu einem Laufzeitfehler 1004: "Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen".
Das Programm bleibt dabei im Abschnitt "Set rFindC = Range(BlockC).Find(What:=ZelleJ, After:=Range(BlockC).Cells(1, 1), _" etc. hängen. Wenn ich im Debugmodus mit dem Curser auf "BlockC" gehe ist kein Inhalt vorhanden, weshalb hier auch die Fehlermeldung erscheint.
Gruß Thomas
Anzeige
AW: Stücklisten Lösung für Thomas von Piet
28.04.2021 11:04:36
Piet
Habe das Problem für die Fehlermeldung gefunden. Der letzte Abschnitt der Stückliste wurde nicht in die Arrays geladen und es war die Spaltenangabe an manchen Stellen falsch, wodurch nicht die Spalte J ins Arry2 geladen wurde sondern nochmals die Spalte C, wodurch Spalte C mit Spalte C verglichen werden würde. Vielen Dank nochmal für die Unterstützung, alleine hätte ich das so nicht hinbekommen!
Hier die geänderte Version:

Sub Stücklisten_vergleichen_neu()
Dim lzA As Long, lzH As Long
Dim Adr As String, Edr As String
Dim ZelleC As Range, ZelleJ As Range
Dim rFindC As Range, rFindJ As Range
Dim BlockC As String, BlockJ As String
Dim k As Integer  'Anzahl "+C.."
Dim Arry1(50, 2) As Variant   'Spalte C
Dim Arry2(50, 2) As Variant   'Spalte I
Dim a As Integer, j As Integer
Dim n1 As Integer, n2 As Integer
'On Error GoTo Fehler
With ThisWorkbook.Worksheets("Auswertung")
lzA = .Cells(Rows.Count, 1).End(xlUp).Row 'Anzahl Zeilen in Spalte A ermitteln
lzH = .Cells(Rows.Count, 8).End(xlUp).Row 'Anzahl Zeilen in Spalte H ermitteln
Application.ScreenUpdating = False
'Stückliste 1: Range Adressen ermitteln
Adr = "C7":  n1 = 1  'Adresse in Array laden
For a = 4 To lzA
If InStr(.Cells(a, 2), "+C" & n1 + 1) Then
Edr = Cells(a - 1, 3).Address(0, 0)
Arry1(n1, 1) = CStr(Adr & ":" & Edr) 'Abschnitt in Array laden
Arry1(n1, 2) = "+C" & n1:  n1 = n1 + 1 'Name Zentrale (z.B. +C1) in Array laden, n1 um 1 erhöhen
Adr = Cells(a + 1, 3).Address(0, 0)
End If
Next a
'letzter Block in der Stückliste
Edr = Cells(lzA, 3).Address(0, 0)
Arry1(n1, 1) = CStr(Adr & ":" & Edr)
Arry1(n1, 2) = "+C" & n1:
'Stückliste 2: Range Adressen ermitteln
Adr = "J7":  n2 = 1  'Adresse in Array laden
For j = 4 To lzH
If InStr(.Cells(j, 9), "+C" & n2 + 1) Then
Edr = Cells(j - 1, 10).Address(0, 0)
Arry2(n2, 1) = CStr(Adr & ":" & Edr)
Arry2(n2, 2) = "+C" & n2:  n2 = n2 + 1
Adr = Cells(j + 1, 10).Address(0, 0)
End If
Next j
'letzter Block in der Stückliste
Edr = Cells(lzH, 10).Address(0, 0)
Arry2(n2, 1) = CStr(Adr & ":" & Edr)
Arry2(n2, 2) = "+C" & n2:
'Abbruch wenn n1  n2 ist   (Anzahl ^C in beiden Listen)
If n1  n2 Then MsgBox "Anzahl '+C' unterschiedlich - Abbruch": Exit Sub
'Stückliste 2: "+C2" auswerten und Zellen löschen
'übereinstimmende Zeilen löschen, OHNE Delete!!
For k = 1 To n1
BlockC = Arry1(k, 1)   'Range Adresse C laden
BlockJ = Arry2(k, 1)   'Range Adresse J laden
'Spalte J mit Spalte C vergleichen
For Each ZelleJ In Range(BlockJ)
Set rFindC = Range(BlockC).Find(What:=ZelleJ, After:=Range(BlockC).Cells(1, 1), _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If Not rFindC Is Nothing Then
If ZelleJ.Offset(0, -1) = rFindC.Offset(0, -1) Then
Cells(ZelleJ.Row, 8).Resize(1, 6) = Empty  'Zeile H löschen
Cells(rFindC.Row, 1).Resize(1, 6) = Empty  'Zeile A löschen
Else
ZelleJ.Interior.ColorIndex = 7
End If
Else  'rfind Is Nothing
ZelleJ.Interior.ColorIndex = 7
End If
Next ZelleJ
'Spalte C mit Spalte J vergleichen
For Each ZelleC In Range(BlockC)
Set rFindJ = Range(BlockJ).Find(What:=ZelleC, After:=Range(BlockJ).Cells(1, 1), _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If Not rFindJ Is Nothing Then
If ZelleC.Offset(0, -1) = rFindJ.Offset(0, -1) Then
Cells(ZelleC.Row, 1).Resize(1, 6) = Empty  'Zeile H löschen
Cells(rFindJ.Row, 8).Resize(1, 6) = Empty  'Zeile A löschen
Else
ZelleC.Interior.ColorIndex = 7
End If
Else  'rfind Is Nothing
ZelleC.Interior.ColorIndex = 7
End If
Next ZelleC
Next k    'Stückliste Auswertung Ende
'Löchroutinen mit Rückwaerts Step
For j = lzA To 5 Step -1
If InStr(Cells(j, 2), "+C") Then  '"+C" überspringen
ElseIf Cells(j, 3).Value = Empty Then
Cells(j, 1).Resize(1, 6).Delete shift:=xlUp
End If
Next j
For j = lzH To 5 Step -1
If InStr(Cells(j, 9), "+C") Then  '"+C" überspringen
ElseIf Cells(j, 10).Value = Empty Then
Cells(j, 8).Resize(1, 6).Delete shift:=xlUp
End If
Next j
End With
Exit Sub
Fehler:  MsgBox "unerwarteter Fehler aufgetreten"
End Sub

Anzeige
AW: Stücklisten Lösung für Thomas von Piet
30.04.2021 18:08:14
Piet
Hallo Thomas
freut mich wenn das Makro jetzt klappt. Kann bis End Mai keine Antwort mehr geben, weil mein PC dann erst repariert werden kann. Fehlende Ersatztrile müssen bestellt werden.
Mfg Piet

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige