【笔记】Excel 2021|重要篇|(一)VBA精准控制选择范围、VBA提高运行速度并降低运行时的内存消耗
最近总是遇到只有Excel表、没有数据库的情况,不太可能让别人搭Python环境来建数据库,但对常用数据库的使用也不太熟悉,也没买服务器不能让别人远程操控。再加上Python操作Excel的效率令人发指,不妨退而求其次直接学会VBA。
没想到坑挺多的,来分享一下其中的典型。考虑到之后可能还需要使用它,可能还会遇到其他天坑,因此,不妨将本文提到的作为VBA不可不说的注意事项(第一篇)。
文章目录
1 要想运行之后Excel文件的大小不爆炸,你需要……
慎用Cells.xxx、Range(A:A)等选择范围极其广的,精确选择范围
(1)引言
举个例子,原始表格如下图所示,10KB:

我添加一个筛选器,设置成绩>19,结果如下,Excel文件大小不变:

接下来,我全选(也就是Cells的选择范围),将这个筛选结果复制到另一个Sheet工作表中,并保存:

您猜怎么着?
——文件大小直接爆炸啦!

并且更糟糕的是,此时再删除新表,文件大小也不会完美复原了。

不过好消息是,Ctrl+Z撤回操作可以将大小完美复原。
但谁编程的时候会没事用Ctrl+Z啊?
(2)解决方式
最关键的是,确定范围的代码:
参考:
对于行,确定最后一行的行号的方式是:
LastRow = Range("A" & Rows.Count).End(xlUp).Row
- LastRow = UsedRange.Rows.Count
Range("A1:N" & LastRow).Select
第一行,令 LastRow = 第A列的行数;(如果不只是需要A列的行数,而是需要所有用过的行,就用UsedRange.Rows.Count)
第二行,精确选择所需要的范围,A1到N[LastRow]。
Rows.Count是当前版本最大的行号,2007年之前的版本最大行号是65535,而之后的版本增大了最大行数,变成1048576。这种方式获取的最后一行只会包括内容不为空的行,而
UsedRange.Rows.Count找到的行,会包括仅设置了格式的行,因此建议用第一种。
对于列,确定最后一列的列号的方式是:
LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1,1), Cells(1, LastColumn)).Select
第一行,令 LastColumn = 第1行的列数;(如果不只是需要第一行的列数,而是需要所有用过的列,就用UsedRange.Columns.Count)
第二行,精确选择所需要的范围,第一行第一个,到第一行最后一个。
另一种方法:
Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)。我还没试过,来源于参考的第二篇内容。
倘若不确定最后一行/列的位置,直接Cells.Select,就容易出现选了非常非常多没用的东西的情况。
2 要想运行时内存不爆炸,你需要……
禁用应用程序屏幕更新、禁用事件
在每个编写的宏的最开始加上这三行:
ActiveWorkbook.Save
Application.ScreenUpdating = False
Application.EnableEvents = False
结尾加上这三行:
ActiveWorkbook.Save
Application.ScreenUpdating = True
Application.EnableEvents = True
这些代码禁用应用程序屏幕更新、禁用事件。这保证你的宏在运行时,屏幕不会闪来闪去的,Excel运存不会爆炸,同时较好地提高运行速度(亲测提高一倍左右)。等运行完了,屏幕才会统一发生变化。
参考:Excel,VBA:清除内存-码农家园-StackFlow译文,该文还提出使用Evaluate直接计算值,而不是将公式放入表中,会加速。
【笔记】Excel 2021|重要篇|(一)VBA精准控制选择范围、VBA提高运行速度并降低运行时的内存消耗的更多相关文章
- SQL Server 调优系列玩转篇一(如何利用查询提示(Hint)引导语句运行)
前言 前面几篇我们分析了关于SQL Server关于性能调优的一系列内容,我把它分为两个模块. 第一个模块注重基础内容的掌握,共分7篇文章完成,内容涵盖一系列基础运算算法,详细分析了如何查看执行计划. ...
- 《Kafka权威指南》读书笔记-操作系统调优篇
<Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...
- BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]【学习笔记看另一篇吧】
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3975 Solved: 2421[Submit][Stat ...
- 【转】寻找最好的笔记软件:海选篇 (v1.0)
原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b55.html 序言: 我见过的多数软件爱好者,无论是资深用户,还是初级用户,都有一个梦想:找到 ...
- Redis 笔记 01:入门篇
Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
- Java学习笔记:2021年12月31日下午-2022年1月1日上午
Java学习笔记:2021年12月31日下午-2022年1月1日上午 摘要:主要记录了计算机的电气构成,学习Linux系统的原因以及关于Linux以及相关操作的基础知识. 目录 Java学习笔记:20 ...
- Java学习笔记 :2021年12月31日 上午
Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...
- C# 《编写高质量代码改善建议》整理&笔记 --(一)基本语言篇
题记:这是自己的观后感,工作两年了,本来打算好好学习设计模式,或者作为客户端深入了解GPU编程的,但是突然发现还有这么一本书. <编写高质量代码改善建议>,感觉这正是自己需要的. 我是做 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- JVM笔记【1】-- 运行时数据区
目录 (一)java内存区域管理 1.1 程序计数器 1.2 虚拟机栈 1.3 本地方法栈 1.4 java堆 1.5 方法区 1.5.1 运行时常量池 (二)直接内存 (一)java内存区域管理 C ...
随机推荐
- .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
前言 随着物联网(IoT)技术的迅猛发展,智能设备之间的互联互通变得越来越重要. 推荐一套基于 C# 的高效 IoT 系统,该系统运行在 Linux 开发板上,并支持 Modbus RS485 传感器 ...
- 《Indie Tools • 半月刊》第001期
引言:独立开发者工具分享 <INDIE TOOLS>专注于分享独立开发出海精选.最新.最实用的工具. 欢迎订阅半月刊:<INDIE TOOLS • 半月刊> 如果本文能给你提供 ...
- 技术前瞻: ECMAScript 2025 已定稿特性解析:让 JavaScript 更优雅
作为全球应用最广泛的编程语言之一,JavaScript 每年都在通过 ECMAScript 标准持续进化.2025 年,ECMAScript 再次带来多项重磅更新,本文将带你深入解读已正式定稿的核心特 ...
- PowerShell实现读取照片并做灰度处理
Powershell一直是我的学习目标.做一个小例子.PowerShell实现读取照片并做灰度处理.还想要保存这张灰度照片并直接打开查看. 分析需求: [读取照片] 需要借助.net framewo ...
- 注解@Resource与@Autowired的区别
@Resource @Resource有两个常用属性name.type,所以分4种情况 指定name和type:通过name找到唯一的bean,找不到抛出异常:如果type和字段类型不一致,也会抛出异 ...
- 近1000 star,Forest 1.5.0 正式版发布
简介 Forest是一个高层的.极简的轻量级HTTP调用API框架. 相比于直接使用Httpclient您不再用写一大堆重复的代码了,而是像调用本地方法一样去发送HTTP请求. 不需要调用HTTP底层 ...
- html5文本标签
标题文本 h1.h2.h3.h4.h5.h6 其中 h1.h2.h3是比较常用的.h3.h4.h5.h6相对来说用的会少一点,除非结构层次比较深才会使用. 段落文本 p <p>这是一个段落 ...
- Tiki靶机练习
Scan 先arp-scan -l扫描附件主机ip nmap -sS -sV -n -T4 -p- 192.168.93.132 Starting Nmap 7.94SVN ( https://nma ...
- Docker镜像介绍
一.Docker镜像介绍 镜像是Docker的三大核心概念之一. Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认的镜像仓库下载(默认使用Docker Hu ...
- 一文搞懂MCP协议与Function Call的区别
一.前言 大家好,我是六哥! 今天咱们聊聊编程里两个听起来有点复杂的概念--MCP协议和函数调用(function call),其实用大白话来讲,它们就是两种不同的"沟通方式",就 ...