EXCEL跨工作表取满足条件的特定数据

[复制链接]
查看11 | 回复3 | 2009-12-8 23:35:19 | 显示全部楼层 |阅读模式
按ALT+F11,打开VBA编辑器,菜单"插入"-模块",将以下宏代码复制到代码区,关闭VBA编辑器,转到你新建的第31个表,按ALT+F8,运行"提取数据"的宏.有两个问题:1,工作表名是从哪一年开始?,代码中从1980-2009,你自己修改,工作表名称必须是如“98年”“99年”“00年”形式,并且是连续的年份,否则会报错.2,当C7和K7都非空时,提取的是A7,B7,C7,而不是I7,J7,K7代码如下:Sub 提取数据()Dim n, m, ii = 0For n = 1980 To 2009 '年份,自己修改With Sheets(Right(n, 2) & "年")
For m = 5 To 30
If .Cells(m, 3)"" Then '检查C列是否为非空
i = i + 1
Cells(i, 1) = .Cells(m, 1)
Cells(i, 2) = .Cells(m, 2)
Cells(i, 3) = .Cells(m, 3)
ElseIf .Cells(m, 11)"" Then '检查K列是否为非空
i = i + 1
Cells(i, 1) = .Cells(m, 9)
Cells(i, 2) = .Cells(m, 10)
Cells(i, 3) = .Cells(m, 11)
End If
NextEnd WithNextEnd Sub
回复

使用道具 举报

千问 | 2009-12-8 23:35:19 | 显示全部楼层
我这个VBA要求sheet31必须在最后一个工作表位置导入的数据A列、B列、C列放在sheet31的A列、B列、C列,导入的数据I列、J列、K列放在sheet31的I列、J列、K列,如果有其它要求可以HI我一下运行宏之前,先设置菜单[工具]-[宏]-[安全性]为“低”ALT+F11,在左侧窗口右键,插入-模块将以下代码粘贴在右边空白区域然后运行宏菜单[工具]-[宏]-[宏],找到对话框中的abc,点执行按钮基本上可以符合你的要求了Sub abc()Application.ScreenUpdating = FalseSheets("sheet31").ActivateSheets("sheet31").Cells = ""a = Sheets.Count - 1t = 1With Sheets("sheet31")For pp = 1 To aFor dd = 5 To 30If Sheets(pp).Cells(dd, 3)"" Then.Cells(t, 1) = Sheets(pp).Cells(dd, 1).Cells(t, 2) = Sheets(pp).Cells(dd, 2).Cells(t, 3) = Sheets(pp).Cells(dd, 3)t = t + 1End IfNextNextt = 1For pp = 1 To aFor dd = 5 To 30If Sheets(pp).Cells(dd, 11)"" Then.Cells(t, 9) = Sheets(pp).Cells(dd, 9).Cells(t, 10) = Sheets(pp).Cells(dd, 10).Cells(t, 11) = Sheets(pp).Cells(dd, 11)t = t + 1End IfNextNextEnd WithApplication.ScreenUpdating = TrueEnd Sub
回复

使用道具 举报

千问 | 2009-12-8 23:35:19 | 显示全部楼层
给我1000分都没用,因为看不懂提问。占位等待高手。
回复

使用道具 举报

千问 | 2009-12-8 23:35:19 | 显示全部楼层
你是想提第一个非空单元格前面数据,还是所有非空单元格前面都要?也就是说你的C5-C30中间如果有空值要不要提?
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行