Sub Igel_abgleich()
Dim DD As Object: Set DD = CreateObject("Scripting.Dictionary")
Dim Ar, Key As String
With Sheets("Peripherie")
Ar = .Cells(1).CurrentRegion
For i = 2 To UBound(Ar)
DD(Ar(i, 2) & " " & Ar(i, 3) & " " & Ar(i, 4)) = Ar(i, 9)
Next i
' For Each k In DD.keys
' Debug.Print k, DD(k)
' Next k
End With
With Sheets("CSV-Export")
Ar = .Cells(1).CurrentRegion
For i = 2 To UBound(Ar)
Key = Ar(i, 3) & "/" & Format(Val(Ar(i, 4)), "00") & " " & Ar(i, 1) & " " & Ar(i, 2)
Debug.Print Key, DD(Key)
If DD.exists(Key) Then
If Ar(i, 5) <> DD(Key) Then
lr = lr + 1
With Sheets("unregelmässigkeiten")
.Cells(lr, 1) = Key
.Cells(lr, 2) = DD(Key)
End With
End If
End If
Next i
End With
End Sub
PS: Umlaute im Sheet.Namen ????
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • Igelbauer
Hi Fen,
Leider klappt das noch nicht.
geänderte Texte hat es nicht nach Peripherie übertragen.
Dafür habe ich in "unregelmässigkeiten" eine (ich glaube) vollständige Liste der Einträge in der CSV.
Ich tüftel selbst noch ein bisschen, auch an Klaus-Dieters Code. Und in einer halben Stunde hab ich Feierabend.
Dein Code läuft so schnell wie ein Zauberspruch.
Klaus-Dieters Code ist für mich Halblaien leichter nachzuvollziehen.
Mal sehen - ich meld mich morgen wieder.
Und vielen Dank schon mal für die Mühe
P.S. Verzeih mir das "ä" - dahingekritzelte Beispieldatei
Moin Leute,
Hab mir jetzt mal die beiden Codes von FEN und Klaus-Dieter in Ruhe angeschaut, getestet,angepasst....
Laufen noch lange nicht so wie sie sollen. Habe aber heute viel anderes zu tun.
Klar ist, dass ich wohl meine Anfrage gestern miserabel formuliert hatte, weil ihr sie beide nicht verstanden habt.
Danke trotzdem für den Versuch einem Halbblinden zu helfen.
Die Sache muss jetzt mal ein paar Tage ruhen, vielleicht kommen noch Detailfragen, aber heute nicht mehr.
Hi snb,
Hab jetzt nach der Mittagspause nochmal schnell rein geschaut.
Danke auch an Dich für den Versuch mir zu helfen. Ich hatte aber schon mal erwähnt, dass eine Formellösung für diese Sache nicht in Frage kommt.
Der Ablauf ist folgender: In der BMA wird etwas geändert - Ich ziehe mir einen CSV-Export raus und kopiere das Tabellenblatt in meine grosse BMA-Datei - dann gleiche ich alle Änderungen ab und lösche das CSV-Tabellenblatt wieder.
Die BMA-Datei enthält ALLE Informationen über eine Brandmeldeanlage mit z.Zt. ca. 6500 Meldern. In ihr enthalten ist auch noch ein recht grosser Altbestand, den ich sowieso ganz anders abgleichen muss. Die Pflege dieser Datei ist recht aufwändig und an vielen Stellen versuche ich mir die Arbeit durch das eine oder andere Makro zu erleichtern.
Leider war der Spruch mit dem Halbblinden kein Scherz, sondern eine Übertreibung.
Über 50% Sehkraft wäre ich überglücklich. Das arbeiten am Rechner mit Bildschirmlupe macht nicht wirklich Spass.
Deswegen frag ich schon mal hier um Hilfe, bin aber nicht böse, wenn es nicht fruchtet.
Ich kämpft mich schon irgendwie durch.
So, genug geplaudert.
Nochmal Danke an alle die ihren Kopf für mich angestrengt haben.
05.05.2021, 08:37 (Dieser Beitrag wurde zuletzt bearbeitet: 05.05.2021, 08:41 von Igelbauer.)
Moin,
ich nochmal.
Habe den Code von K-D als Grundlage genommen und kräftig modifiziert.
Dabei ist mir endgültig klar geworden wie schlecht meine Beschreibung war.
Will euch das Ergebnis aber nicht vorenthalten.
Code:
Option Explicit
Sub uebertrag()
Dim lngZeile As Long
Dim strSuch As String
Dim zelle As Range
Dim i As Long
i = 1
'Suchbegriff festlegen
For lngZeile = 2 To Sheets("CSV-Export").Range("A1").End(xlDown).Row
If Sheets("CSV-Export").Cells(lngZeile, 3) <> "" Then
If Sheets("CSV-Export").Cells(lngZeile, 4) = "" Then
strSuch = Sheets("CSV-Export").Cells(lngZeile, 3) & "/00"
ElseIf Len(Sheets("CSV-Export").Cells(lngZeile, 4)) = 2 Then
strSuch = Sheets("CSV-Export").Cells(lngZeile, 3) & "/"
Else
strSuch = Sheets("CSV-Export").Cells(lngZeile, 3) & "/0" & Sheets("CSV-Export").Cells(lngZeile, 4)
End If
Else: GoTo weiter
End If
'suchen
With Peripherie.Range("B2:B15000")
Set zelle = .Find(strSuch, LookIn:=xlValues) '.Select
If zelle Is Nothing Then
Sheets("unklar").Cells(i, 1) = Sheets("CSV-Export").Cells(lngZeile, 1)
Sheets("unklar").Cells(i, 2) = Sheets("CSV-Export").Cells(lngZeile, 2)
Sheets("unklar").Cells(i, 3) = Sheets("CSV-Export").Cells(lngZeile, 3)
Sheets("unklar").Cells(i, 4) = Sheets("CSV-Export").Cells(lngZeile, 4)
Sheets("unklar").Cells(i, 5) = Sheets("CSV-Export").Cells(lngZeile, 5)
i = i + 1
GoTo weiter
End If
'Abgleich Objekt,Abschnitt
If Sheets("CSV-Export").Cells(lngZeile, 1) = Peripherie.Cells(zelle.Row, 3) And _
Sheets("CSV-Export").Cells(lngZeile, 2) = Peripherie.Cells(zelle.Row, 4) Then
Else
Sheets("unklar").Cells(i, 1) = Sheets("CSV-Export").Cells(lngZeile, 1)
Sheets("unklar").Cells(i, 2) = Sheets("CSV-Export").Cells(lngZeile, 2)
Sheets("unklar").Cells(i, 3) = Sheets("CSV-Export").Cells(lngZeile, 3)
Sheets("unklar").Cells(i, 4) = Sheets("CSV-Export").Cells(lngZeile, 4)
Sheets("unklar").Cells(i, 5) = Sheets("CSV-Export").Cells(lngZeile, 5)
i = i + 1
GoTo weiter
End If
'kein Einzeltext
If Sheets("CSV-Export").Cells(lngZeile, 5) = "" Then
Peripherie.Cells(zelle.Row, 9) = Peripherie.Cells(zelle.Row - 1, 9)
'Übertragen
Else
Peripherie.Cells(zelle.Row, 9) = Sheets("CSV-Export").Cells(lngZeile, 5)
End If
End With
weiter:
Next lngZeile
End Sub
so funktioniert er jetzt und braucht ca. 12 Sek. zum durchlaufen. Kann ich mit leben.
Mit Fenneks Code bin ich gar nicht klar gekommen - bin halt kein Profi.
Trotzdem nochmal danke fürs grübeln