2016-05-16 11 views
0

ich zwei Tabellen habenEine bessere Möglichkeit zur Vereinigung zwei Excel-Tabellen

ABC
Namenstagesst Adresse

und

ABCD
id Adresse Namenstagesst

ich zur Vereinigung müssen die Tabellen und passend die Spalten, so
Tabelle1, colA = Tabelle2, Spalte
tabelle1, table2 COLC =, colB
etc

Ich benutze diesen Code, der

Sub unionrep() 

Dim lastRow As Long 

Sheets("decl").Select 
With ActiveSheet 
    lastRow = .Cells(.Rows.Count, "b").End(xlUp).Row 
End With 

With Sheets("onl") 
    tlastRow = .Cells(.Rows.Count, "b").End(xlUp).Row 
End With 

For i = 1 To lastRow 
Sheets("onl").Range("a" & tlastRow + i + 1).Value = Range("a" & i).Value 
Sheets("onl").Range("b" & tlastRow + i + 1).Value = Trim(Range("b" & i).Value) 
Sheets("onl").Range("c" & tlastRow + i + 1).Value = "*" & Range("c" & i).Value 
Sheets("onl").Range("d" & tlastRow + i + 1).Value = Range("g" & i).Value 
Sheets("onl").Range("e" & tlastRow + i + 1).Value = Range("d" & i).Value 
Sheets("onl").Range("f" & tlastRow + i + 1).Value = "" 
Sheets("onl").Range("g" & tlastRow + i + 1).Value = "" 
Sheets("onl").Range("h" & tlastRow + i + 1).Value = "" 
Sheets("onl").Range("i" & tlastRow + i + 1).Value = Range("e" & i).Value 
Sheets("onl").Range("j" & tlastRow + i + 1).Value = Range("i" & i).Value 
Sheets("onl").Range("k" & tlastRow + i + 1).Value = Range("f" & i).Value 

Next 

Sheets("onl").Select 
End Sub 
+0

Ihre Frage Erzählung ist nicht passend zu deinem Code. Ihr Code schreibt Daten ausgewählter Spalten von ~ decl ~ Blatt in ~ onl ~ sheet nach den vorhandenen Daten auf ~ onl ~ sheet ohne Übereinstimmung der Spaltenwerte. Stellen Sie Ihr Ziel klar dar, indem Sie eine Beispieldatenpräsentation und -ausgabe wünschen, die Sie aus dem Programmcode erhalten möchten. – skkakkar

Antwort

0

langsam in Ordnung, aber für große Datenmengen funktioniert, ist Sie könnten die gesamten Bereiche statt Schleife durch das Kopieren und Einfügen Reihen. Zum Beispiel aus der Spalte A in der "Decl" Blatt Spalte C in der "onl" Blatt zu kopieren, so etwas wie:

Sheets("decl").Range(Cells(1, 1), Cells(lastRow, 1)).Copy 
Sheets("onl").Range("C" & tlastRow + 1).PasteSpecial 
0

Versuchen Sie es mit Arrays:

Sub unionrep() 

    Dim lastRow    As Long 
    Dim vDataIn, vDataOut 

    With Sheets("decl") 
     lastRow = .Cells(.Rows.Count, "b").End(xlUp).Row 
     vDataIn = .Range("A1:I" & lastRow).Value 
    End With 

    ReDim vDataOut(1 To lastRow, 1 To 11) 

    With Sheets("onl") 
     tlastRow = .Cells(.Rows.Count, "b").End(xlUp).Row + 1 
    End With 

    For i = 1 To lastRow 
     vDataOut(i, 1) = vDataIn(i, 1) 
     vDataOut(i, 2) = Trim(vDataIn(i, 2)) 
     vDataOut(i, 3) = "*" & vDataIn(i, 3) 
     vDataOut(i, 4) = vDataIn(i, 7) 
     vDataOut(i, 5) = vDataIn(i, 4) 
     vDataOut(i, 9) = vDataIn(i, 5) 
     vDataOut(i, 10) = vDataIn(i, 9) 
     vDataOut(i, 11) = vDataIn(i, 6) 

    Next 
    Sheets("onl").Range("a" & tlastRow).Resize(UBound(vDataOut, 1), UBound(vDataOut, 2)).Value = vDataOut 
    Sheets("onl").Select 
End Sub 
Verwandte Themen