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

Bereits bekannte Zeilen erkennen und ausfüllen

Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 09:46:14
Marv
Hallo Zusammen,
ich kopiere in eine fortlaufende Excelliste jeden Tag neue Fehler. Jeder Fehler ist in den Spalten D bis M beschrieben ( Fehler Id, System usw. ). Je nach Fehler trage ich in die Spalten O bis U Dinge zum weiteren Vorgehen ein.
Da sich viele Fehler wiederholen, würde ich gerne ein Makro programmieren, welches für die neuen Fehler checked, ob es diesen Fehler schon gibt und dann entsprechend ausfüllt, was ich bereits bei einem bestehenden Fehler ausgefüllt habe in O bis U.
Dann müsste ich nur noch für wirklich neue Fehler das Vorgehen ausfüllen. Wichtig: von A-C stehen Daten die bei jedem Fehler anders sind. Daher kann durch das Makro nicht einfach die ganze Zeile überschrieben werden.
Eine Beispieldatei dazu gibt's hier: https://www.herber.de/bbs/user/109654.xlsm
Vielen Dank im Voraus. Ich habe keine Ahnung momentan, wie ich da rangehen soll.
Grüße
Marv

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 10:48:17
baschti007
So Marv =D
Du Kopierst die Werte( nur die Werte )
Fehler0,FehlerOrt0,Fehler1,FehlerOrt1,Fehler2,FehlerOrt2,Fehler3,FehlerOrt3,IFD
Genau in dieser ReihenFolge
Und dann einfach das Makro starten
Gruß Basti
' Verweis auf Microsoft Forms2 Objekt
Sub Suche_Fehler_ID()
On Error GoTo ende
Dim A, B, r, rr, cc
Dim Lastcell As Range
A = ClipToArray()
With ActiveSheet
Set Lastcell = .Cells(.Rows.Count, 21).End(xlUp)
B = .Range(.Cells(1, 4), Lastcell).Value
ReDim Preserve A(UBound(A, 1), UBound(B, 2) - 1)
For r = LBound(A, 1) To UBound(A, 1)
For rr = LBound(B, 1) + 1 To UBound(B, 1)
If CDbl(A(r, 0)) = B(rr, 1) Then
For cc = 12 To UBound(B, 2)
A(r, cc - 1) = B(rr, cc)
Next
End If
Next
Next
.Range(.Cells(Lastcell.Row + 1, 4), .Cells(Lastcell.Row + 1, 4).Resize(UBound(A, 1) + 1,  _
UBound(A, 2) + 1)) = A
End With
ende:
End Sub
Function ClipToArray() As Variant
On Error Resume Next
Dim clip As New MSForms.DataObject
Dim ClipToArrayin
Dim lines As String
clip.GetFromClipboard
lines = clip.GetText
lines = Replace(lines, vbCr, "")
ReDim ClipToArrayin(UBound(Split(lines, vbLf)) - 1, UBound(Split(Split(lines, vbLf)(r), vbTab))) _
For r = LBound(Split(lines, vbLf)) To UBound(Split(lines, vbLf)) - 1
For c = LBound(Split(Split(lines, vbLf)(r), vbTab)) To UBound(Split(Split(lines, vbLf)(r),  _
vbTab))
ClipToArrayin(r, c) = Split(Split(lines, vbLf)(r), vbTab)(c)
Next
Next
ClipToArray = ClipToArrayin
End Function

Anzeige
AW: Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 10:55:26
baschti007
Ups So
Fehler ID vegessen
Fehler ID,Fehler0,FehlerOrt0,Fehler1,FehlerOrt1,Fehler2,FehlerOrt2,Fehler3,FehlerOrt3,IFD
Gruß Basti
AW: Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 10:59:21
baschti007
Du Könntest das noch ändern das er die letzte zelle in Spalte 4 sucht
Set Lastcell = .Cells(.Rows.Count, 4).End(xlUp)
B = .Range(.Cells(1, 4), .Cells(Lastcell.Row, 21)).Value
Gruß Basti
AW: Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 11:11:44
Marv
Hi Basti,
super vielen Dank für die schnelle Antwort.
Dein Makro überprüft jetzt aber nicht nur die FehlerID sondern auch ob Fehler0, FehlerOrt0 usw. passen, da auch bei gleicher FehlerID Unterschiede in den nachfolgenden Zellen auftreten können.
Also es muss wirklich von FehlerID bis IFD alles gleich sein.
Was meinst du mit:
Du Kopierst die Werte( nur die Werte )
Fehler0,FehlerOrt0,Fehler1,FehlerOrt1,Fehler2,FehlerOrt2,Fehler3,FehlerOrt3,IFD
Grüße
Marv
Anzeige
AW: Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 11:53:08
Marv
Hey Basti,
bei mir bricht er auch nach End Sub ab und führt die Function ClipToArray() As Variant nicht mehr durch.
Was läuft da bei mir schief?
Vielen Dank nochmal für deine Rückmeldung.
Grüße
Marv
AW: Bereits bekannte Zeilen erkennen und ausfüllen
23.11.2016 12:32:19
baschti007
Ja wenn er alle Fehler Sachen Prüfen soll dann So
' Verweis auf Microsoft Forms2 Objekt
Sub Suche_Fehler_ID()
On Error GoTo ende
Dim A, B, r, rr, cc
Dim Lastcell As Range
A = ClipToArray()
With ActiveSheet
Set Lastcell = .Cells(.Rows.Count, 4).End(xlUp)
B = .Range(.Cells(1, 4), .Cells(Lastcell.Row, 21)).Value
ReDim Preserve A(UBound(A, 1), UBound(B, 2) - 1)
For r = LBound(A, 1) To UBound(A, 1)
For rr = LBound(B, 1) + 1 To UBound(B, 1)
For c = LBound(A, 2) To 9
If CStr(A(r, c))  CStr(B(rr, c + 1)) Then
GoTo Jump
End If
Next
For cc = 12 To UBound(B, 2)
A(r, cc - 1) = B(rr, cc)
Next
GoTo Jump2
Jump:
Next
Jump2:
Next
.Range(.Cells(Lastcell.Row + 1, 4), .Cells(Lastcell.Row + 1, 4).Resize(UBound(A, 1) + 1,  _
UBound(A, 2) + 1)) = A
End With
ende:
End Sub

Denk Dran das du den Verweis auf Microsoft Forms2 Objekt setzt
Gruß basti
Anzeige
AW: Bereits bekannte Zeilen erkennen und ausfüllen
24.11.2016 11:31:25
Marv
Hi Basti,
du bist der Beste! Funktioniert alles soweit bei mir.
Eine ganz kleine Erweiterung hätte ich noch.
Im Tab Kopieren, hab ich noch 3 Spalten vorne eingefügt (KeyID, ProcessID, KillerID).
Diese sollen zum Schluss einfach stupide mit in das Tab Tabelle1 kopiert werden.
https://www.herber.de/bbs/user/109684.xlsm
Wie müsste ich den Code da anpassen?
Super vielen Dank nochmal für deine Hilfe
Grüße
Marv
Anzeige
AW: Bereits bekannte Zeilen erkennen und ausfüllen
24.11.2016 12:38:43
baschti007
Ja nur die Beiden Arrays den Bereich verschieben =D
Gruß Basti
Sub Suche_Fehler_ID()
On Error GoTo ende
Dim A, B, r, rr, cc
Dim Lastcell As Range
A = ClipToArray()
With ActiveSheet
Set Lastcell = .Cells(.Rows.Count, 4).End(xlUp)
B = .Range(.Cells(1, 1), .Cells(Lastcell.Row, 21)).Value
ReDim Preserve A(UBound(A, 1), UBound(B, 2) - 1)
For r = LBound(A, 1) To UBound(A, 1)
For rr = LBound(B, 1) + 1 To UBound(B, 1)
For c = LBound(A, 2) + 3 To 12
If CStr(A(r, c))  CStr(B(rr, c + 1)) Then
GoTo Jump
End If
Next
For cc = 15 To UBound(B, 2)
A(r, cc - 1) = B(rr, cc)
Next
GoTo Jump2
Jump:
Next
Jump2:
Next
.Cells(Lastcell.Row + 1, 1).Resize(UBound(A, 1) + 1, UBound(A, 2) + 1) = A
End With
ende:
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige