从一个工作簿各个子表中复制数据粘贴到另一个工作簿指定位置中,并对指定列进行排序,这个是我们在日常工作中经常做的,如何减少繁琐的工作步骤,提高效率,一键完成上面的工作。下面介绍通过VBA,如何自动化跨工作簿复制粘贴及排序。
图一
图二
需要将图一工作簿中三个子表含有公式的数据,复制粘贴数值到图二的表1,并对指定列进行降序排序,可以直接点击图二中执行的控件即可完成;以下是VBA脚本的实现。
Sub scopy2()
' 复制粘贴及排序
'复制粘贴
Application.ScreenUpdating = False '禁止屏幕更新数据
Windows("xxx.xlsx").Activate '图一的表名
Sheets("表一").Select
Range("B5:X19").Select
Selection.Copy '复制
Windows("aaaa.xlsm").Activate '图二的表名
Sheets("1").Select
Range("A6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False '粘贴成数值
Windows("xxx.xlsx").Activate '图一的表名
Sheets("表二").Select '
Range("B5:T19").Select
Application.CutCopyMode = False
Selection.Copy
Windows("aaaa.xlsm").Activate '图二的表名
Sheets("1").Select
Range("Y6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("xxx.xlsx").Activate
Sheets("表三").Select
Range("B6:R20").Select
Application.CutCopyMode = False
Selection.Copy
Windows("aaaa.xlsm").Activate
Sheets("1").Select
Range("AS6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'筛选排序
Windows("aaaa.xlsm").Activate
Sheets("1").Select
Range("A6:w20").Select
Selection.AutoFilter '筛选
ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Add2 Key:=Range( _
"b6:b20"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal '筛选并对指定列进行排序
With ActiveWorkbook.Worksheets("1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("I10").Select
Selection.AutoFilter
Range("y6:Aq20").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Add2 Key:=Range( _
"Ab6:Ab20"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("AB9").Select
Selection.AutoFilter
Range("As6:Bi20").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Add2 Key:=Range( _
"At6:At20"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("AS12").Select
Selection.AutoFilter '去掉筛选
Application.ScreenUpdating = True '解除禁止屏幕更新数据
End Sub
在图二的子表1的表名点右键,点击查看代码,插入模块1,粘贴上面的代码,保存。
回到表格,在开发工具里-插入-表单控件
选中控件点右键可以选择指定的宏名称,同时修改控件名称。
关注以下公众号可以更方便查看文章哦(* ̄︶ ̄)
这段代码和Case 1最大不同就是筛选范围是动态的,即A列和C列包含
数据
的区域,需要注意的是,range(“A1”,[C1].end(xldown))来表示活动区域时,如果运行的
工作
表不止一个,需要写成range(“A1”,sheets(“Data”).[C1].end(xldown)).假定所有字段分别为“啤酒”,“面包”,“香肠”,“牛排”,“蛋糕”,“猪排”,需要筛选除“猪排”外所有字段,与此类似,如果反选有“猪排”和“蛋糕”两个字段,Criteria2参数加上即可,如下述。理想很丰满,现实很骨感。
比如文件夹下有test.xlsm(存放宏的文件)、a.xlsx(Sheet1)、b.xlsx(Sheet1)以及x.xlsx(Sheet xxx为第2个Sheet)
我们的任务是将a.xlsx的Sheet1和b.xlsx的Sheet1复制到x.xlsx的Sheet xxx之前
确保启动时光标在test.xlsm中
Dim i As Integer
For i = 1 To Workbooks.Count
Cells(i, 1) = Workbooks(i).name
我们项目管理有两个
工作
薄,一个里面有多个表,每天建一个,记录当天项目,另一个
工作
薄,有多个表,其中一个是所有项目汇总。
以前都是第一个
工作
薄一个表做完,再
复制粘贴
到第二个
工作
薄的汇总表中。
写了个
VBA
宏完成这个
工作
。
Sub CopyToOtherBook()
' copyToOtheBook Macro
' 宏由 cuianzhu 录制,时间: 2013-6-18
趋势2020年从趋势上看,基本上一线城市的工资都是上升的趋势。人才需求一线城市共发布岗位38115个,招聘120827人。其中北京22805人广州25081人上海 39614人深圳...
Range("C18").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
代码自己手工改改,如下:
Sheet1.Range("C18").Copy
Sheet1.Range("C18").PasteSpecial Paste:=xlPaste
这段代码将打开一个名为“小时”的文件夹,并将其中的“test”文件夹中的“1.xlsx”文件复制到“test”文件夹中的“2.xlsx”文件中。请注意,此代码假定“test”文件夹中的所有文件都具有相同的名称和格式。如果文件名或格式不同,则需要相应地更改代码。(小文同学的出的代码跑不动,简单删改了一下。然后,它将保存合并后的文件。#跟着文心一言学
VBA
。
自动隐藏表格中无
数据
的行表1 是
数据
源,经常改变; 表2 引用表1 中某列有
数据
的单元格(利用动态位址已实现。) 由于表1 的改变,表2 的大小随之而变。 问题:如何实现表2 中没有
数据
的行(有公式)自动隐藏?谢谢赐教! Sub abc() For i = 1 To 300 If Cells(i, 1).value = "" Then Rows(i).Hidden =
Sub run()
Dim r1 As Range, i As Integer, j As Integer
Set r1 = Worksheets("混凝土").Range("A3:F490")
For i = 1 To r1.Rows.Count
Worksheets("Template").Copy After:=Worksheets("Template")
Worksheets("Template
通过
VBA
来完成粘贴操作,在Excel中,我们可以和平常使用鼠标的操作一样,可以选择只粘贴数值还是连格式一起粘贴。
下面,就给大家介绍PasteSpecial Paste对象的各种参数,并给出相应的例子供大家参考。
当然,我们得通过Range对象的PasteSpecial方法来完成。
参数「Operation」的值的列表如下(默认值是xlPasteSpecialOperation...