Excel宏(VBA)自动化标准流程代码

news/2024/7/21 7:39:00 标签: excel, 自动化, 运维, 数据分析

自动化流程

我们对一个报表进行自动化改造会经历的固定流程,这里称为“流水线”,通常包含以下流程:

  • 打开一个表格
  • 选择打开的表格
  • 选择表格中的Sheet
  • 选择Sheet中的单元格区域 (有时候需要按条件筛选)
  • 复制某个区域 粘贴在某个区域
    (有时候需要刷新某个透视表)
    完成后保存
    最后一步关闭表格
    在这里插入图片描述

以下是一段包含了上述过程的脚本

基础复制粘贴和填充公式

'基础复制粘贴和填充公式
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet, pt As PivotTable
Dim lastRow As Long
Set wb1 = Workbooks.Open("表格21.xlsx")
Set ws1 = wb1.Sheets("Sheet1")
Set pt = ws1.PivotTables("数据透视表3")
pt.PivotCache.Refresh

'获取需要复制区域的最后一行行号
lastRow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
ws1.Range("A6:D" & lastRow).Copy

Set wb2 = Workbooks.Open("表格44.xlsx")
Set ws2 = wb2.Sheets("H433区")

'获取准备粘贴区域的第一个为空行的行号(粘贴起始位置)
lastRow = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row + 1

'粘贴
ws2.Range("A" & lastRow).PasteSpecial xlPasteValues

'获取粘贴后的区域的最后一行行号
lastRow = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row 
‘将F:H列的公式填充导最后一行
With ws2.Range("F2:H2")
.AutoFill Destination:=ws2.Range("E2:H" & lastRow)
End With

wb1.Save
wb1.Close
wb2.Save
wb2.Close

数据筛选

'数据筛选
Dim ws As Worksheet
Dim lastRow As Long
Dim filterRange As Range
Dim filteredData As Range
Dim n As Long

Set ws = ThisWorkbook.Worksheets("Sheet1")

lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set filterRange = ws.Range("A1:AF" & lastRow)

'筛选数据范围
With filterRange
    .AutoFilter Field:=7, Criteria1:=">=" & DMin, Operator:=xlAnd, Criteria2:="<=" & DMax
    Set filteredData = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
End With

If Not filteredData Is Nothing Then
    '将筛选后的数据复制到Sheet3的A2单元格开始的区域
    Set ws = ThisWorkbook.Worksheets("Sheet3")
    ws.Range("A2").Resize(filteredData.Rows.Count, filteredData.Columns.Count).Value = filteredData.Value
    ws.Range("A" & lastRow + 1 & ":AF" & ws.Rows.Count).ClearContents
End If

'以下这种写法在功能上是等效的,即将filteredData复制到A2单元格开始的位置。
'但是,它使用了Select和Activate语句,这是不推荐的。
'使用Select和Activate语句会使代码变得缓慢且容易出错.
'应该直接将filteredData的值赋给目标区域(Value)

‘filteredData.Copy 
’Range("A2").Select
‘Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 ’   :=False, Transpose:=False


'清除筛选
filterRange.AutoFilter

'释放对象内存
Set ws = Nothing
Set filterRange = Nothing
Set filteredData = Nothing

筛选删除


Dim ws As Worksheet
Dim lastRow As Long
Dim filterRange As Range
Dim filteredData As Range
Dim n As Long

Set ws = ThisWorkbook.Worksheets("Sheet1")

lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set filterRange = ws.Range("A1:AF" & lastRow)

'筛选数据范围赋值filteredData
'使用Offset方法将filterRange对象向下偏移1行,以排除标题行。
'然后使用Resize方法调整数据区域的大小,使其与filterRange对象的行数相同,但不包括标题行。
'使用SpecialCells方法和xlCellTypeVisible参数,获取可见单元格范围,即筛选后的数据区域。
With filterRange
.AutoFilter Field:=7, Criteria1:=">=" & DMin, Operator:=xlAnd, Criteria2:="<=" & DMax
Set filteredData = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
End With

If Not filteredData Is Nothing Then
'删除不符合条件的行
filteredData.EntireRow.Delete
End If
'取消筛选
filterRange.AutoFilter

http://www.niftyadmin.cn/n/5116371.html

相关文章

MVCC 过程中会加锁吗?

MVCC 机制&#xff0c;全称&#xff08;Multi-Version Concurrency Control&#xff09;多版本并发控制&#xff0c;是确保 在高并发下&#xff0c; 多个事务读取数据时不加锁也可以多次读取相同的值。 MVCC 在读已提交&#xff08;READ COMMITTED&#xff09;、可重复读&…

Java面向对象(基础)-- 类的成员之三:构造器(Constructor)

文章目录 一、介绍&#xff08;1&#xff09;理解和作用&#xff08;2&#xff09; 构造器的语法格式 二、举例剖析&#xff08;1&#xff09;构造器在哪&#xff08;2&#xff09;权限问题&#xff08;3&#xff09;声明构造器&#xff08;4&#xff09;声明多个构造器&#x…

栩栩如生,音色克隆,Bert-vits2文字转语音打造鬼畜视频实践(Python3.10)

诸公可知目前最牛逼的TTS免费开源项目是哪一个&#xff1f;没错&#xff0c;是Bert-vits2&#xff0c;没有之一。它是在本来已经极其强大的Vits项目中融入了Bert大模型&#xff0c;基本上解决了VITS的语气韵律问题&#xff0c;在效果非常出色的情况下训练的成本开销普通人也完全…

SpringCloud和Kubernetes的区别

又见小道仙&#xff1a; https://blog.csdn.net/Tomwildboar/article/details/129531315 对于SpringCloud在实际项目中并未使用过&#xff0c;只是自学过SpringCloud和SpringCloud Alibaba&#xff0c;也基于学习搭建过demo。 对于Kubernetes&#xff0c;目前这家公司就是使用…

blender怎么在一个面上对半切割(不影响别的面)

1进入编辑模式 2.在面选择模式下&#xff0c;选中该物体需要切割成两半的面。 3.按K这个快捷键&#xff08;切记&#xff0c;必须得用快捷键&#xff0c;不用的话没办法调出第一个绿色切割点&#xff09;&#xff0c;将切割点移动到需要切割的起始边&#xff0c;按住Shift键不放…

2023CSPS 种树 —— 二分+前缀和

This way 题意&#xff1a; 一开始以为是水题&#xff0c;敲了一个二分贪心检查的代码&#xff0c;20分。发现从根往某个节点x走的时候&#xff0c;一路走来的子树上的节点到已栽树的节点的距离会变短&#xff0c;那么并不能按照初始情况贪心。 于是就想着检查时候用线段树…

【系统架构设计】 架构核心知识: 2 云原生架构

目录 一 云原生架构 1 云计算 2 分类 3 云计算架构 4 云原生架构设计原则

C++进阶篇2---多态

1.多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是当不同的对象&#xff0c;去完成某个行为&#xff0c;会产生不同的状态 举个例子&#xff1a;同样是吃饭&#xff0c;狗吃狗粮&#xff0c;猫吃猫粮&#xff0c;不同的对象&#…