Excel精英培训网

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

[已解决]提取不同工作表满足条件的行代码求指点

[复制链接]
发表于 2014-9-7 17:17 | 显示全部楼层 |阅读模式
本帖最后由 千年约定 于 2014-9-7 17:37 编辑

要提取不同工作表满足条件的行到“汇总”工作表,请指点一下代码错在哪里,详见附件。
最佳答案
2014-9-7 17:32
本帖最后由 xdragon 于 2014-9-7 17:36 编辑
  1. Sub 提取()
  2.     Dim sh As Worksheet, i2&, num&
  3.     For Each sh In Sheets(Array("土", "前", "建", "基", "开"))
  4.         num = sh.Range("I65536").End(xlUp).Row
  5.         For i2 = 2 To num
  6.             If Sheets(sh.Name).Cells(i2, "i").Value <> "0" And Sheets(sh.Name).Cells(i2, "i").Value <> "" Then
  7.                 Sheets(sh.Name).Rows(i2).Copy
  8.                 Sheets("汇总").Cells(Sheets("汇总").Cells(Rows.Count, "i").End(xlUp).Row + 1, 1).PasteSpecial
  9.             End If
  10.         Next i2
  11.     Next sh
  12. End Sub
复制代码
在你原代码的基础上改的,错误的地方有:
1、sh为工作表对象,所以sheets(sh)这样表示不对,sh.name才是工作表的名称属性
2、对num的赋值过程中,不是activesheet而是每个sh的单元格对象,range("D65536")改为了i列
3、最后你要粘贴到的是汇总表的最后一个非空单元格的下一行,而你的判断依据是I列非空做判断,所以,可以不用point变量。
4、sheets(sh).row(i2).select 如果不是活动的工作表是无法用select的。

提取不同工作表满足条件的行.zip

22.28 KB, 下载次数: 11

发表于 2014-9-7 17:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xdragon 于 2014-9-7 17:36 编辑
  1. Sub 提取()
  2.     Dim sh As Worksheet, i2&, num&
  3.     For Each sh In Sheets(Array("土", "前", "建", "基", "开"))
  4.         num = sh.Range("I65536").End(xlUp).Row
  5.         For i2 = 2 To num
  6.             If Sheets(sh.Name).Cells(i2, "i").Value <> "0" And Sheets(sh.Name).Cells(i2, "i").Value <> "" Then
  7.                 Sheets(sh.Name).Rows(i2).Copy
  8.                 Sheets("汇总").Cells(Sheets("汇总").Cells(Rows.Count, "i").End(xlUp).Row + 1, 1).PasteSpecial
  9.             End If
  10.         Next i2
  11.     Next sh
  12. End Sub
复制代码
在你原代码的基础上改的,错误的地方有:
1、sh为工作表对象,所以sheets(sh)这样表示不对,sh.name才是工作表的名称属性
2、对num的赋值过程中,不是activesheet而是每个sh的单元格对象,range("D65536")改为了i列
3、最后你要粘贴到的是汇总表的最后一个非空单元格的下一行,而你的判断依据是I列非空做判断,所以,可以不用point变量。
4、sheets(sh).row(i2).select 如果不是活动的工作表是无法用select的。
回复

使用道具 举报

发表于 2014-9-7 17:46 | 显示全部楼层
咱就是去喝了点水,就慢了点:

提取不同工作表满足条件的行.zip (22.58 KB, 下载次数: 5)

评分

参与人数 1 +3 收起 理由
千年约定 + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-9-7 18:48 | 显示全部楼层
既然有
For Each sh In Sheets(Array("土", "前", "建", "基", "开"))
何必
If Sheets(sh.Name).Cells(i2, "i").Value <> "0" And Sheets(sh.Name).Cells(i2, "i").Value <> "" Then
这样就可以啦
If sh.Cells(i2, "i").Value <> "0" And sh.Cells(i2, "i").Value <> "" Then
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 18:47 , Processed in 0.265826 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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