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

来源:百度知道 编辑:UC知道 时间:2024/06/07 07:43:55
内有30的sheet,名字已经重命名为汉字,如“98年”“99年”“00年”……,个工作表格式相同,要求,如何在新建的第31个sheet中,提取前面30个sheet中的数据,提却要求,判断每一个sheet中C5-C30与K5-K30两列中的非空单元格,然后将非空单元格前面的两个单元格与该非空单元格一并提取到sheet31中。例如:sheet1中,“C7=3”“K10=5”,则将A7,B7,C7放到新的sheet31中A1,B1,C1中,将I10,J10,K10放入sheet31中的A2,B2,C2,依次判断SHEET2-30.
在线等,回答符合追加50
如果C5-C30中有非空值,例如C7=10,C9=8,那么要提取的是C7,B7,A7,C9,B9,A7,如果为空,则不提取。不只但提取第一个,而是只要有非空的就提

几个问题:
1、你的表1~表30中的C5-C30与K5-K30两列中的非空单元格,数据是52个单元格。而返回于表31的A1~C1和A2~C2,其他数据返回到哪里呢?
如C7=3,则返回A7,B7,C7到表31的A1,B1,C1中
那C8非空、C9非空、……的,其之前的单元格B8、A8;B9、A9、……要返回到哪里呢?
同样K11非空、K12非空、……呢?
还是,只判断“C7”和“K10”?
2、表1的数据还没有确定地方返回,表2~表30的数据要返回到哪里去呢?
26*2*30=1560个单元格,里面还有之前4列(A、B、I、J)单元格。
这样就=26*6*30=4680个单元格,要怎么分布?
3、“如果为空,则不提取。不只但提取第一个”。只“提取”哪第一个?
能否说具体一点?

按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)