相关文章推荐
善良的稀饭  ·  Cause: ...·  1 年前    · 

从一个工作簿各个子表中复制数据粘贴到另一个工作簿指定位置中,并对指定列进行排序,这个是我们在日常工作中经常做的,如何减少繁琐的工作步骤,提高效率,一键完成上面的工作。下面介绍通过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...