2016-05-03 10 views
1

Dies könnte für viele von Ihnen einfach sein, aber ich bin neu in VBA; Im Folgenden finden Sie meinen Code zum Hinzufügen mehrerer Excel-Dateiwerte in einem Mastersheet. Während ich dies tue, möchte ich die Werte bezüglich ihres Schlüsselwertes aktualisieren.Aktualisieren von Werten durch Auffinden übereinstimmender Schlüsselwerte

Sub tekSheetMerging() 
Dim masterSheet As Worksheet 

Set masterSheet = sheets("KoMKo") 

'Variable to save the used Range of the master sheet 
Dim usedRangeMaster As Integer 

    Dim ws As Worksheet 

    'loop through each worksheet in current workbook 
    For Each ws In Worksheets 

    'If sheetname contains "data" (UCase casts the Name to upper case letters) 
    If InStr(1, UCase(ws.Name), "DATA", vbTextCompare) > 0 Then 

     'calculate the used range of the master sheet 
     usedRangeMaster = masterSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1 

     'Variable to save the used Range of the sub sheet 
     Dim usedRangeSub As Integer 

     'calculate the used range of the sub sheet 
     usedRangeSub = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row 

     'copy relevant range from the subsheet 
     ws.Range("C1:C" & usedRangeSub).Copy 

     'paste the copied range after the used range in column a 
     masterSheet.Range("A" & usedRangeMaster).PasteSpecial 
    End If 
    Next ws 

    End Sub 

So, jetzt habe ich eine Excel-Tabelle, die einen Schlüsselwert in Spalte A und andere Werte in anderen Spalten in dieser Zeile enthält. Wenn ich einen Schlüssel finde, der ein Duplikat des zuvor hinzugefügten Schlüsselwertes ist, möchte ich diese Zelle und ihre komplette Zeile löschen. Auf diese Weise möchte ich die Werte bezüglich ihres Schlüsselwerts aktualisieren. Wenn ich einen anderen Schlüssel hinzufügen würde, sollte es in der Liste ohne Problem bleiben.

Wie kann ich das tun?

+1

Funktioniert der obige Code oder erhalten Sie einen Fehler? Wenn ja, geben Sie uns bitte den Fehlercode/Nachricht und an welcher Zeile der Fehler auftritt. Wenn der Code ohne Fehler läuft, dann erläutern Sie bitte (1), was das aktuelle Ergebnis des Codes ist und (2) was das erwartete Ergebnis des obigen Codes ist (und wie es sich unterscheidet). Momentan sehe ich nur '.Copy' und' .PasteSpecial' in deinem Code und ich frage mich, wie du das '.Delete' erreichen willst, von dem du in deinem Beitrag sprichst. – Ralph

Antwort

0

Es wäre besser, zuerst die Tasten in den Unterblättern (Quellen) durchzugehen und sie nacheinander mit den Tasten im Master zu vergleichen. Alle Übereinstimmungen sollten vom Master gelöscht werden. Dann kopieren Sie die gesamten Daten vom Unterblatt in den Master.

deshalb Mein Code vor dieser Zeile lautet:

'copy relevant range from the subsheet 
ws.Range("C1:C" & usedRangeSub).Copy 

mit Ihnen meine Variablen ersetzen:

With mastersheet 
    for i = firstrow to lastrow 'first and lastrow of data in subsheet 
     set f = .Range("A:A").Find(ws.Range("A" & i).Value, _ 
       LookIn:=xlValues, LookAt:=xlWhole) 
     If Not f is Nothing then 
      .Range("A" & f.Row).EntireRow.Delete 
     End If 
    next i 
end with 

nicht usedRangeMaster danach zu aktualisieren Vergessen, wie es die aufgrund kürzer sein Löschungen. Kopieren Sie dann Ihre Daten.

Hinweis: Dieser Code setzt voraus, dass Ihr Schlüssel eindeutig ist und Sie niemals Duplikate in Ihrem Master haben werden (was der Fall ist, wenn der Master nur über diesen Code geschrieben wird). Deshalb sucht es nur einmal den Master.

Edit: Ich sehe, dass Freakfeuer Sie bereits mit einigen Links versehen hat? Wie auch immer, lass es mich wissen, wenn es funktioniert.

+0

Es funktioniert für Sie, bitte akzeptieren Sie es als Antwort. Vielen Dank! – Sun

Verwandte Themen