Excel精英培训网

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

[已解决]复制excel中不同sheet指定区域至新excel同名sheet指定区域

[复制链接]
发表于 2021-12-28 10:31 | 显示全部楼层 |阅读模式
想求助大佬一个功能,
目前附件中的测试文件能够实现以指定sheet作为模板然后复制并更名变成新表。想实现的功能是生成新表后,提示我选取另一个excel,然后将其中同名sheet的指定区域内容复制到现在这张表里同名sheet的指定区域。所有表需要复制的内容是基本确定并且一致的。简单说就是把去年excel同名sheet中”本年数据“提取到新表的”去年数据“列中。由于有先后顺序,所以需要VBA在生成新sheet后再做复制工作,所以需要集成到现有VBA中。

求各位大佬帮忙解决一下,非常感谢。附上测试文件,供参考。
最佳答案
2021-12-29 08:35
qq517402438 发表于 2021-12-28 18:34
感谢大神,完全可以实现我想要的效果。还想问一下,由于我以前按Run会以指定的模板生成对应的新sheet。其 ...

請測試看看,謝謝

测试数据.zip

64.83 KB, 下载次数: 2

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-28 13:47 | 显示全部楼层
請測試看看,謝謝

今年数据.zip

51.01 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2021-12-28 18:34 | 显示全部楼层
本帖最后由 qq517402438 于 2021-12-28 23:43 编辑
sam-wang 发表于 2021-12-28 13:47
請測試看看,謝謝

感谢大神,完全可以实现我想要的效果。还想问一下,由于我以前按Run会以指定的模板生成对应的新sheet。其实不仅仅是这些项,后期还会增加很多。而且可能涉及到去年没有这个sheet,今年有,所以对应的地方应该是不填充数字也就是不取数。所以能不能麻烦再修改一下实现的效果是,执行完从去年数据.xlsx的同sheet指定区域仅粘贴数值进对应新生成的sheet,也不改变任何格式。如果去年不存在这个sheet就跳过这一张sheet,麻烦帮忙看看能否实现。非常感谢! 而且现在的VBA执行完会弹出用时的message能不能改成其他类似“已完成”等信息提示
回复

使用道具 举报

 楼主| 发表于 2021-12-28 23:42 | 显示全部楼层
sam-wang 发表于 2021-12-28 13:47
請測試看看,謝謝

还请大佬再帮忙看看,非常感谢
回复

使用道具 举报

发表于 2021-12-29 08:35 | 显示全部楼层    本楼为最佳答案   
qq517402438 发表于 2021-12-28 18:34
感谢大神,完全可以实现我想要的效果。还想问一下,由于我以前按Run会以指定的模板生成对应的新sheet。其 ...

請測試看看,謝謝

今年数据_1229.zip

54.01 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2021-12-29 11:57 | 显示全部楼层
sam-wang 发表于 2021-12-29 08:35
請測試看看,謝謝

已经测试,只有一点问题,我在去年数据中添加了一项火车sheet,再运行就提示我type mismatch,想问下是什么原因呢?另外,如果我有其他不连续的单元格区域复制,我可以在哪一块自己加上呢?非常感谢!

测试数据1129 v1.zip

54.45 KB, 下载次数: 4

回复

使用道具 举报

发表于 2021-12-29 12:29 | 显示全部楼层
qq517402438 发表于 2021-12-29 11:57
已经测试,只有一点问题,我在去年数据中添加了一项火车sheet,再运行就提示我type mismatch,想问下是什 ...

修改如下紅字,先確認sheet有無存在,然後確認項目資料有無存在,謝謝


'4. To comapre and fill in the data of the last year
For i = 3 To Sheets.Count
    T1 = Sheets(i).Name
    If xD.Exists(T1) Then 'check if the sheet of the last year is exists
        With Sheets(i)
            Arr = .Range("b4:d13")
            For i2 = 2 To UBound(Arr)
                T = T1 & "|" & Arr(i2, 1)   '工作表名稱+項目
                If xD.Exists(T) Then
                    Arr(i2, 2) = xD(T)(0)
                    Arr(i2, 3) = xD(T)(1)
                End If
            Next
            .[b4].Resize(UBound(Arr), 3) = Arr
        End With
    End If
Next

1.JPG
回复

使用道具 举报

 楼主| 发表于 2021-12-29 13:38 | 显示全部楼层
sam-wang 发表于 2021-12-29 12:29
修改如下紅字,先確認sheet有無存在,然後確認項目資料有無存在,謝謝

真是非常感谢,还有点小问题,但我自己能够解决了,非常感谢您花时间帮忙!谢谢
回复

使用道具 举报

 楼主| 发表于 2022-1-6 21:24 | 显示全部楼层
sam-wang 发表于 2021-12-29 12:29
修改如下紅字,先確認sheet有無存在,然後確認項目資料有無存在,謝謝

您好啊,想麻烦问一下。现在我想修改一下,因为我可能会复制去年数中某个sheet的不同区域到今年数据的对应区域,所以想问问,能不能麻烦修改一下VBA实现这个功能呢,比如当时是想复制b4:d13区域,现在我需要b4:d13和e10:f20,这几个区域的某一列数字,到今年数同名sheet的指定地方。可以不用匹配标题项目,只是复制过来就行,例如直接复制b4:c10, 到今年的b4:c10。
回复

使用道具 举报

发表于 2022-1-7 14:27 | 显示全部楼层
qq517402438 发表于 2022-1-6 21:24
您好啊,想麻烦问一下。现在我想修改一下,因为我可能会复制去年数中某个sheet的不同区域到今年数据的对 ...

不好意思,怕解讀有誤,請您附上檔案以便測試,感謝
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 05:55 , Processed in 0.266515 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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