第1个回答 2009-12-09
按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, i
i = 0
For 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
Next
End With
Next
End Sub
第2个回答 2009-12-10
我这个VBA要求sheet31必须在最后一个工作表位置
导入的数据A列、B列、C列放在sheet31的A列、B列、C列,
导入的数据I列、J列、K列放在sheet31的I列、J列、K列,
如果有其它要求可以HI我一下
运行宏之前,先设置菜单[工具]-[宏]-[安全性]为“低”
ALT+F11,在左侧窗口右键,插入-模块
将以下代码粘贴在右边空白区域
然后运行宏
菜单[工具]-[宏]-[宏],找到对话框中的abc,点执行按钮
基本上可以符合你的要求了
Sub abc()
Application.ScreenUpdating = False
Sheets("sheet31").Activate
Sheets("sheet31").Cells = ""
a = Sheets.Count - 1
t = 1
With Sheets("sheet31")
For pp = 1 To a
For dd = 5 To 30
If 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 + 1
End If
Next
Next
t = 1
For pp = 1 To a
For dd = 5 To 30
If 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 + 1
End If
Next
Next
End With
Application.ScreenUpdating = True
End Sub