2016-05-16 34 views
0

我有兩個表工會兩個Excel表一個更好的辦法

ABC
名姓地址

ABCD
ID地址名姓

我需要工會表和匹配列,所以
table1,colA = table2,colC
表1,COLC =表2,COLB

我用這個代碼,它工作正常,但對於大數據是緩慢

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

您的問題敘述不匹配到你的代碼。你的代碼會將〜decl〜sheet中的選定列的數據寫入〜on_ sheet中的現有數據之後的〜onl〜sheet中,而不匹配列值。使用示例數據表示清晰地表達您的目標,並希望從程序代碼中獲得輸出。 – skkakkar

回答

0

你可以複製和粘貼,而不是通過循環的整個範圍行。例如,從A列在「申報」表複製到C列在「ONL」片,是這樣的:

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

嘗試使用數組:

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 
相關問題