Excel精英培训网

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

[已解决]关于一个合并工作表代码的问题

[复制链接]
发表于 2016-12-18 14:24 | 显示全部楼层 |阅读模式
本帖最后由 c5h8o4nna 于 2016-12-18 14:41 编辑

做了个合并excel下工作表代码,不知道为什么会执行了两次,求解答{:021:}
只有三个工作表,每个工作表只有10条数据,合并之后应该只会有30条数据,但是合并之后变成60条数据,重复了一次,不知道为什么{:021:}
Sub rrr()
    Dim sh As Worksheet
    For Each sh In Sheets
        sh.UsedRange.Copy Worksheets("aaa").Cells(65535, 1).End(3).Offset(1, 0)
    Next
End Sub

最佳答案
2016-12-18 14:50
Sub 合并()
    Dim i
    Worksheets("aaa").Cells.Clear
    For i = 1 To Worksheets.Count - 1
       Worksheets(i).UsedRange.Copy Worksheets("aaa").Range("A65535").End(3).Offset(1, 0)
    Next
End Sub

aaa.rar

17.08 KB, 下载次数: 5

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-12-18 14:50 | 显示全部楼层    本楼为最佳答案   
Sub 合并()
    Dim i
    Worksheets("aaa").Cells.Clear
    For i = 1 To Worksheets.Count - 1
       Worksheets(i).UsedRange.Copy Worksheets("aaa").Range("A65535").End(3).Offset(1, 0)
    Next
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-12-18 15:11 | 显示全部楼层
爱疯 发表于 2016-12-18 14:50
Sub 合并()
    Dim i
    Worksheets("aaa").Cells.Clear

刚刚我也知道为什么了,因为它把aaa这个工作表也复制了,所以就是重复了一次
你这个worksheets.count-1就是不要把最后那个aaa遍历,
但是我把aaa放到最前面也可以,代码不用改{:011:}
但是我又突发奇想,如果我要把除了aaa之外的其它工作表遍历一次的话那要又怎么写呢?
回复

使用道具 举报

发表于 2016-12-18 15:19 | 显示全部楼层
“但是我把aaa放到最前面也可以,代码不用改”
这样会出错的!



Sub 合并()
    Dim i%, str$   
    str = "aaa"
    Sheets(str).Select
    Cells.Clear   
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> str Then Sheets(i).UsedRange.Copy [A65535].End(xlUp).Offset(1, 0)
    Next
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-12-18 15:32 | 显示全部楼层
爱疯 发表于 2016-12-18 15:19
“但是我把aaa放到最前面也可以,代码不用改”
这样会出错的!

用了IF为什么可以不用endif呢?因为then那里没用分开写吗?
回复

使用道具 举报

 楼主| 发表于 2016-12-18 15:36 | 显示全部楼层
爱疯 发表于 2016-12-18 15:19
“但是我把aaa放到最前面也可以,代码不用改”
这样会出错的!

这样我就不懂了,为什么Worksheets.Count - 1就可以呢?而Worksheets.Count 就不可以?
回复

使用道具 举报

发表于 2016-12-18 16:17 | 显示全部楼层
c5h8o4nna 发表于 2016-12-18 15:32
用了IF为什么可以不用endif呢?因为then那里没用分开写吗?

if 条件 then
    执行语句
end if


也可以写成下面的形式




if 条件 then 执行语句


回复

使用道具 举报

发表于 2016-12-18 16:25 | 显示全部楼层
c5h8o4nna 发表于 2016-12-18 15:36
这样我就不懂了,为什么Worksheets.Count - 1就可以呢?而Worksheets.Count 就不可以?

为什么Worksheets.Count 就不可以?
在本例中,Worksheets.Count = 4
for i=1 to Worksheets.Count,意味着要从1循环到4,
即每个表都执行指定操作:复制本表的使用区域,到aaa工作表。

真的是需要每个工作表都执行吗?显然,应该是除了"aaa"以外的工作表。
所以不该是4,应该是3,即Worksheets.Count-1



回复

使用道具 举报

 楼主| 发表于 2016-12-18 16:39 | 显示全部楼层
爱疯 发表于 2016-12-18 16:25
为什么Worksheets.Count 就不可以?
在本例中,Worksheets.Count = 4
for i=1 to Worksheets.Count,意 ...

嗯,上面的我懂了if    then那里我也懂了
worksheets.count-1我也明白,但是为什么排除的是aaa还不会是其它工作表呢?
呃,这个问题是不是我太过于钻牛角尖呢?{:301:}


回复

使用道具 举报

发表于 2016-12-18 16:49 | 显示全部楼层
本帖最后由 爱疯 于 2016-12-18 16:51 编辑

比如,你是搬运工,你要去4家(sheet1,sheet2,sheet3,aaa)

第1天,你把sheet1家里的东西,搬到aaa家;
第2天,你把sheet2家里的东西,搬到aaa家;
第3天,你把sheet3家里的东西,搬到aaa家;

经过这3天,aaa家已有了那3家的东西
第4天,你还需要把aaa家的东西,搬到aaa家吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 08:46 , Processed in 0.572954 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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