【问题标题】:A better way to union two excel tables合并两个excel表的更好方法
【发布时间】:2016-05-16 09:20:56
【问题描述】:

我有两张桌子

A B C
姓名姓氏地址

A B C D
身份证地址姓名姓氏

我需要合并表格并匹配列,所以
表 1,colA = 表 2,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

【问题讨论】:

  • 您的问题旁白与您的代码不匹配。您的代码将在 ~onl~ 表上的现有数据之后将 ~decl~ 表的选定列的数据写入 ~onl~ 表,而不匹配列值。请通过示例数据表示和希望从程序代码中获得的输出清楚地说明您的目标。

标签: excel vba


【解决方案1】:

您可以复制和粘贴整个范围,而不是遍历行。例如,要从“decl”表中的 A 列复制到“onl”表中的 C 列,如下所示:

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

【讨论】:

    【解决方案2】:

    尝试使用数组:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多