Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 892|回复: 8

[已解决]分表复制到总表,其中总表已有部分数据

[复制链接]
发表于 2021-12-24 08:28 | 显示全部楼层 |阅读模式
需要将工作表“表1”中的数据复制到工作表“总表”中。其中,在“总表”工作表中已经有部分数据。
最佳答案
2021-12-24 11:16

Sub test()
Dim Arr, Brr, T$, xD, i&
Set xD = CreateObject("Scripting.Dictionary")
Arr = Sheets(1).[a1].CurrentRegion
For i = 2 To UBound(Arr)
    T = Arr(i, 1) & "|" & CDate(Arr(i, 2)) & "|" & Arr(i, 3): xD(T) = i
Next
Brr = Sheets(2).[a1].CurrentRegion
For i = 2 To UBound(Brr)
    T = Brr(i, 1) & "|" & TimeValue(Brr(i, 2)) & "|" & Brr(i, 3)
    If Not xD.Exists(T) Then
        N = N + 1: For J = 1 To 3: Brr(N, J) = Brr(i, J): Next
    End If
Next
Sheets(1).Range("a" & UBound(Arr) + 1).Resize(N, 3) = Brr
End Sub

测试.zip

24.23 KB, 下载次数: 18

发表于 2021-12-24 09:31 | 显示全部楼层
1.使用高级筛选就可以了,很简单。不会可以百度一下高级筛选去重的方法

回复

使用道具 举报

发表于 2021-12-24 10:01 | 显示全部楼层
本帖最后由 zjdh 于 2021-12-24 11:03 编辑

2张表中日期和时间的表达方式不同,不能高级筛选方法解决。
回复

使用道具 举报

发表于 2021-12-24 10:49 | 显示全部楼层
本帖最后由 zjdh 于 2021-12-24 17:49 编辑

Sub TEST()
    ARR = Sheets("总表").UsedRange
    BRR = Sheets("表1").UsedRange.Offset(1)
    ReDim CRR(1 To UBound(BRR), 1 To 3)
    For J = 1 To UBound(BRR) - 1
        For I = 2 To UBound(ARR)
            B = ARR(I, 2) = TimeValue(BRR(J, 2))
            If ARR(I, 1) & B & ARR(I, 3) = BRR(J, 1) * 1 & B & BRR(J, 3) Then GoTo 10
        Next
        N = N + 1
        For K = 1 To 3
            CRR(N, K) = BRR(J, K)
        Next
10  Next
    Sheets("总表").Range("A65536").End(3)(2).Resize(N, 3) = CRR
End Sub

评分

参与人数 1学分 +2 收起 理由
mohaolisp + 2

查看全部评分

回复

使用道具 举报

发表于 2021-12-24 11:16 | 显示全部楼层    本楼为最佳答案   

Sub test()
Dim Arr, Brr, T$, xD, i&
Set xD = CreateObject("Scripting.Dictionary")
Arr = Sheets(1).[a1].CurrentRegion
For i = 2 To UBound(Arr)
    T = Arr(i, 1) & "|" & CDate(Arr(i, 2)) & "|" & Arr(i, 3): xD(T) = i
Next
Brr = Sheets(2).[a1].CurrentRegion
For i = 2 To UBound(Brr)
    T = Brr(i, 1) & "|" & TimeValue(Brr(i, 2)) & "|" & Brr(i, 3)
    If Not xD.Exists(T) Then
        N = N + 1: For J = 1 To 3: Brr(N, J) = Brr(i, J): Next
    End If
Next
Sheets(1).Range("a" & UBound(Arr) + 1).Resize(N, 3) = Brr
End Sub

评分

参与人数 1学分 +2 收起 理由
mohaolisp + 2

查看全部评分

回复

使用道具 举报

发表于 2021-12-24 11:25 | 显示全部楼层
zjdh 发表于 2021-12-24 10:49
Sub TEST()
    ARR = Sheets("总表").UsedRange
    BRR = Sheets("表1").UsedRange.Offset(1)


Sheets("总表").Range("A65536").End(3)(1).Resize(N, 3) = CRR
>> 老師您好,貼上數據時好像少算1列?? 謝謝


回复

使用道具 举报

发表于 2021-12-24 13:51 | 显示全部楼层
他的“表1”只有3列啊!
回复

使用道具 举报

发表于 2021-12-24 14:27 | 显示全部楼层
zjdh 发表于 2021-12-24 13:51
他的“表1”只有3列啊!

'Sheets(1).Range("A65536").End(3)(1).Resize(n, 3) = CRR
Sheets(1).Range("a" & [a65536].End(3).Row + 1).Resize(n, 3) = CRR
>> 後學覺得應該如上,請老師再確認一下,謝謝




1.JPG
回复

使用道具 举报

发表于 2021-12-24 17:50 | 显示全部楼层
噢,应该是:
Sheets("总表").Range("A65536").End(3)(2).Resize(N, 3) = CRR
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 05:59 , Processed in 0.538248 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表