Excel Macro: Worksheets abgleichen

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/excel-macro-worksheets-abgleichen_222280/page_1 - zur Vollversion wechseln!


Lobo schrieb am 14.02.2011 um 09:40

Hab hier ein kleines Problem und steh bisschen auf der Leitung.
Meine Excel/VB-Macro Kenntnisse halten sich auch sehr in Grenzen. Vielleicht könnt ihr mir ja helfen:

Hab 2 Worksheets, A und B

Spalte A ist bei beiden mit teilweise gleichen Daten befüllt.
In Worksheet A sind aber zusätzliche Einträge vorhanden.

Jetzt müssten beide Worksheets abgeglichen werden, dahingehend dass Reihen bei denen Spalte A nicht in beiden Worksheets vorkommt aus Worksheet A gelöscht werden.

Beispiel:
WS A:
1
2
3
4

WS B:
1
3
4

==> Ergebnis:
WS A:
1
3
4

hoffe ich habe das halbwegs brauchbar erklären können.

Notfalls könnte das Ergebniss auch in einen neuen Worksheet gespeichert werden.

Verwendet wird Excel 2010

TIA


Timmää schrieb am 14.02.2011 um 09:46

hast schon einen ansatz, bzw irgendwas versucht?

wenn ja wo hängst, was funktioniert nicht?


Lobo schrieb am 14.02.2011 um 09:59

probiert hab ich folgendes:

Code:
Public Sub delOLD()
    Dim i As Long
    Dim iLastRow As Long, xLastRow As Long
    Dim ws As Worksheet, ws1 As Worksheet
     
    Set ws = Sheets("foo") ' Imported Data
    Set ws1 = Sheets("bar") '  Deleted Data
     
     'ws1.Visible = xlSheetVisible
     ' xLastRow = ws1.Range("A500").End(xlUp).Row
    xLastRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
    
    With ws
        iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = iLastRow To 1 Step -1
            For x = xLastRow To 1 Step -1
                If .Cells(i, "A").Value <> ws1.Cells(x, "A").Value Then
                    .Rows(i).Delete
                End If
            Next x
        Next i
    End With
     
     'ws1.Visible = xlSheetHidden
     'hddr
     
End Sub

hab den code in einem anderen Forum gefunden und probiert etwas abzuändern

das "if" passt noch wohl so noch nicht (was mir ja eigentlich auch bewusst ist... )

Momentan löscht er im Endeffekt einfach einen Worksheet :D


Timmää schrieb am 14.02.2011 um 10:14

bist dir sicher das das cells() mit dem "A" funktioniert?
ich kenn das nur mit zahlen

sonst gib mal bei jeder iteration die beiden strings aus und schaus dir an


Lobo schrieb am 14.02.2011 um 10:20

cells(i,"A") funkt, habs grad probiert :)

gibts irgendeinen Shortcut der Scripts brutal abwürgt wenn sie aktiv sind... auf den Stop-Button lässt er mich ned klicken -.-

edit: ah, habs ctrl+break


Timmää schrieb am 14.02.2011 um 10:24

[Strg] - [Pause] könnte funktionieren


Lobo schrieb am 14.02.2011 um 12:57

so, habs jetzt etwas anders gemacht (mit neuem WS)

Code:
Public Sub delOLD()
    Dim i As Long
    Dim iLastRow As Long, xLastRow As Long
    Dim ws As Worksheet, ws1 As Worksheet
    Dim newWs As Worksheet
    Set newWs = Sheets("new")
    Set ws = Sheets("a") ' Imported Data
    Set ws1 = Sheets("b") '  Deleted Data
    newWs.Cells.Clear
    
    xLastRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
    
    With ws
        iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = iLastRow To 1 Step -1
            For x = xLastRow To 1 Step -1
            
                If .Cells(i, "A").Value = ws1.Cells(x, "A").Value Then
                    .Cells(i, "A").EntireRow.Copy newWs.Cells(i, "A")
                End If
            Next x
        Next i
    End With
     
     
End Sub

sollte eigentlich stimmen was rauskommt... muss danach nurnoch sortieren, um die leeren Zeilen los zu werden, aber das is mir wurscht ;)


Ringding schrieb am 14.02.2011 um 14:56

Zitat von Timmää
[Strg] - [Pause] könnte funktionieren

Ich glaube eher F12.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026