怎么在Excel中把各工作表中的特定数据提取到一个工作表中
比如总共有100个sheet,在每个sheet中,当B12=0.1时,提取C12的值到sheet101中。这个应该怎么编写宏呢?...
比如总共有100个sheet,在每个sheet中,当B12=0.1时,提取C12的值到sheet101中。
这个应该怎么编写宏呢? 展开
这个应该怎么编写宏呢? 展开
2个回答
壹寰(深圳)科技文化有限公司
2021-03-27 广告
2021-03-27 广告
不同公司提供的方案也不一样。以上内容如果还觉得不够全面,也可以沟通下壹寰(深圳)科技文化有限公司。91数据恢复是壹寰(深圳)科技文化有限公司旗下专业数据恢复品牌,91数据恢复专注于勒索病毒数据恢复、勒索病毒数据修复、数据库修复、数据库解密恢...
点击进入详情页
本回答由壹寰(深圳)科技文化有限公司提供
展开全部
Sub Macro1()
Sheets("Sheet101").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = "sheet1"
Selection.AutoFill Destination:=Range("A2:A101"), Type:=xlFillDefault
Range("B2").Select
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-1]&""!B12"")"
Selection.AutoFill Destination:=Range("B2:B101"), Type:=xlFillDefault
Range("C2").Select
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]&""!C12"")"
Selection.AutoFill Destination:=Range("C2:C101"), Type:=xlFillDefault
Range("A1:C101").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd
Selection.ClearContents
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub
Sheets("Sheet101").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = "sheet1"
Selection.AutoFill Destination:=Range("A2:A101"), Type:=xlFillDefault
Range("B2").Select
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-1]&""!B12"")"
Selection.AutoFill Destination:=Range("B2:B101"), Type:=xlFillDefault
Range("C2").Select
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]&""!C12"")"
Selection.AutoFill Destination:=Range("C2:C101"), Type:=xlFillDefault
Range("A1:C101").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd
Selection.ClearContents
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub
追问
你好,谢谢你的回答,但是我最近才接触这些内容,不大理解各部分程式的意思,能不能大概解释一下?
另外,如果不确定是哪一行的值等于0.1的,想把所有B列为0.1的时候的C列值提取出来的话,又应该怎么编写呢?
谢谢!
追答
' 首先定义一个宏
Sub Macro1()
' 选择Sheet101
Sheets("Sheet101").Select
' 选择A2单元格
Range("A2").Select
' 输入sheet1
ActiveCell.FormulaR1C1 = "sheet1"
' 向下填充,产生Sheet2、sheet3...sheet100序列
Selection.AutoFill Destination:=Range("A2:A101"), Type:=xlFillDefault
' 选择B2
Range("B2").Select
' 输入=indiect(A2&"!B12"),indirect函数可将输入的文本变为单元格引用
' &为字符连接符,用来将前后两个字符串连接为一个字符串,这样()中的结果为sheet1!B12。
' VBA中只能用R1C1样式输入单元格引用,因此用RC[-1]代替了A2
' 另在字符串中,不能直接输入单引号,而要输入两个""
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-1]&""!B12"")"
' 将B2中的内容按默认方式填充到B2 :B101
Selection.AutoFill Destination:=Range("B2:B101"), Type:=xlFillDefault
' 选择C2单元格
Range("C2").Select
' 输入=indirect(A2&"!C12"),详细的说明前面已经说过了
ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]&""!C12"")"
' 向下填充C2:C101
Selection.AutoFill Destination:=Range("C2:C101"), Type:=xlFillDefault
' 选择A1:C101,即选中所有数据,包括第1行的空行
Range("A1:C101").Select
' 设置为自动筛选,前面之所以从A2开始输入,也是要预留一行以便于进行筛选
Selection.AutoFilter
' 自定义筛选条件为第2列(即B列)0,不过这里出错了,应该为0.1,自己改吧
Selection.AutoFilter Field:=2, Criteria1:="0", Operator:=xlAnd
' 删除所选内容,也就是把B列中0.1的整行数据都删除了
Selection.ClearContents
' 最后这一行内容比较多,要用 _来换行,作用是根据A列进行从低到高的排序
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
' 宏定义结束
End Sub
以上应该解释得比较清楚了,至于要判断的不是B12单元格,而是所有行,思路如下:
用循环语句依次对各工作表进行以下操作:
在第一行插入一个空行,进行自动筛选,筛选条件是B列数据=0.1
复制
选中sheet101,粘贴
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询