Excel——宏教程(精简版)

一、宏的简介

1、什么是宏?

Excel宏是一种自动化工具,它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样,用户可以在需要时执行这些操作,以自动化Excel任务。

2、宏的优点

我们可以利用宏来进行一些重复性的操作,也能方便我们根据要求去处理表格的数据,提高对表格数据的处理效率。
其具体可以进行的操作有:
1、自动化重复性操作:宏可以自动执行某=某些操作,如打开特定的工作薄、执行特定的计算、格式化数据等。
2、数据处理:宏可以对数据进行处理和分析,如筛选数据、计算、排序、合并、拆分等。
3、自定义功能:宏可以自定义特定的功能和过程,如自动化报告生成、数据导出、输入验证、图表制作等。
4、与其他应用程序交互:宏可以与其他应用程序进行交互,如从Internet上获取数据、发送电子邮件等。

二、使用宏的两种方法:

1、宏录制

如果想要使用宏,首先需要确保“开发工具”选项卡在Excel中可用。可以在“文件”—“选项”—“自定义功能区”中启用它。接下来,可以按照以下步骤录制宏:
1.在“开发工具”选项卡中,单击“宏”按钮,打开“宏”对话框,点击“录制宏"按钮。
2.输入宏的名称和描述,并选择保存的位置(通常是当前工作薄)。
3.开始录制操作,如输入数据、设置格式等。
4.完成操作后,点击“停止录制”按钮,Excel会讲操作转换为VBA代码。

在这里插入图片描述
编写VBA代码
其次还可以通过手动编写VBA代码或结合录制宏和手动编写代码的方式来创建宏。对于每一个录制好的宏,我们可以点击“查看宏”,选择某一个宏,点击“编辑”来查看其生成的VBA代码,也可以改动代码以改变宏的功能。
在这里插入图片描述
运行宏的步骤如下:
打开Excel文件,点击“开发工具”选项卡。
点击“查看宏”按钮,选择需要运行的宏。
点击“运行”按钮,Excel将执行该宏的代码,自动化完成一系列操作。

2、VBA代码

其实在网上能够找到许多已经编辑好的宏的代码,我们也可以有根据的选取一些宏来使用,对我们的表格进行处理,但是这样有两个缺点:

1.可能找不到完全符合我=我们要求的宏。我们对于表格的处理情况是多种多样的,现有的宏可能无法完全适配我们的需求。
2.安全问题:由于宏可以执行任何VBA代码,因此使用网上已有的宏代码存在安全风险。在运行宏之前,还需要确保它来源可靠,并且已适当调整宏安全设置。

因此学会自己编写一些简单的VB代码,或者能够识别一般VBA代码语句的功能、作用,识别宏的安全性还是十分有用的。

三、宏过程定义

宏属于脚本语言,就是不需要编译为exe文件,可以由解释器直接解释运行。

可以通过Sub关键字来定义一个过程
格式为Sub宏名称()

而过程相当于一个函数的概念,一个模块中也可以定义为多个过程,每个过程其实就是一个宏,都可以被单独使用,也可以在过程内通过call 过程名的方式调用另一个过程。
宏名称可以是中文
例如:

Sub 宏示例()
    Cells.Select       '选中单元格
    Range("G22").Activate    '将G22单元格设置为活动单元格
    Selection.Copy      '复制G22其中的内容
    Sheets("Sheet1").Select   '选择sheet1
    Cells.Select     '选择sheet1中的单元格
    Range("F26").Activate   '将sheet1中的F26作为活动单元格
    ActiveSheet.Paste     '将复制的内容粘贴到F26中
End Sub

其中Cells、Sheets、ActiveSheet是VBA的对象。
‘表示注释,其内容不被执行,相当于Python里的#’

同时我们还需要明确一个前提,即一个excel文件内可能保护多个sheet,每一个sheet一系列单元格cell。

1、数据类型

VBA中有多种基本数据类型可选择:

类型名称关键字
整型Integer
单精度Single
双精度Double
字符型String
长整型Long

每个数据类型其实还有简写,不过其简写都是用符号代替,个人决定这样的简写可能会降低代码的可读性。同时VBA还能降低对象类型。

2、变量声明与定义

Public:可定义全局变量
Dim:可定义局部变量

声明变量的语法为:

Dim变量名 As 数据类型
Public变量名 As 数据类型

3、变量定义复制

声明变量后,还需对变量进行赋值,包括基本类型的变量赋值,对象类型的变量赋值

1、给基本类型的变量赋值,直接使用变量名=值的语法即可。
2、给对象类型的变量赋值,需要利用到Set关键字,语法为Set 变量名=值
eg.

Sub example()
	'给基本类型变量赋值
	Dim localNum As Integer
	localNum = 22

	'给对象类型变量赋值
	Dim obj As Range
	Set obj = Range("c1")
End Sub

4、简单逻辑用法

1. 顺序结构

顾名思义就是按照顺序结构执行每一条语句,从上到下,从左到右。

2.选择结构

① If Then 结构
选择结构中,If Then 结构是最基础的一个。它只有条件表达式真时,才执行的代码。

If Then 结构基本语法如下,其中End If是选择结构的结束标志。

If 条件表达式 Then
    '表达式为真时,执行
End If

举个例子:

Sub VBAexample()
	Dim i As Integer '定义i为整型变量
	For i = 2 To 10  'i的值再2——10范围遍历
		If Cells(i,"B").Value >= 100 Then '依次选中B2-B10的单元格,查看其值是否大于100
			Cells(i,"C") = "是"  '大于100则在Ci单元格填入“是”
		End If
	Next i '让i自增
End Sub  '结束

② If Else 结构
相对于if then 多了一个非此即彼的选择。
即If Else结构中,条件表达式在真时,执行Then后的代码;条件表达式为假时,执行 Else后的代码。基本语法如下:

If 条件表达式 Then
    '真时执行的代码
Else
    '假时执行的代码
End If

3. 循环结构

VBA提供了多种循环结构,和C、python的循环结构十分类似,【…】处为执行循环体内代码的条件,它们的差别在于【执行循环体内代码】和【判断是否满足循环条件】的顺序。

循环结构说明
For … Next按指定次数循环执行
For Each逐一遍历数据集合中的每一个元素
Do While … Loop当条件为真时,循环执行
Do … Loop While当条件为真时,循环执行。无论条件真假,至少运行一次
Do Until … Loop直到条件为真时,循环执行
Do … Loop Until直到条件为真时,循环执行。无论条件真假,至少运行一次

下面是上述某些循环结构的例子:
(1)For … Next 循环
使用 For … Next循环可以指定次数,在制定次数没有到达上限之前循环执行一段代码。

(2)For 循环
For 循环使用一个数字变量,从初始值开始,每循环一次,变量值增加或减小,直到变量的值等于指定的结束值时,循环结束。
For … Next 循环语法如下:

For [变量] = [初始值] To [结束值] Step [步长]
    '这里是循环执行的语句
Next

其中:

[变量] 是一个数字类型变量,可在循环执行的语句里使用。
[初始值] 和 [结束值] 是给定的值;
[步长]是每次循环时,变量的增量。如果为正值,变量增大;如果为负值,变量减小。

下面看一个实际的例子,求 1 至 100内 数字的奇数累积和。

Sub VBAexample()

    Dim i As Integer
    Dim sum As Integer
    
    For i = 1 To 100 Step 2
        sum = sum + i
    Next
    
End Sub

循环变量i的取值分别是1、3、5、7…99,当最后i=101时,不在满足小于100的条件,循环结束。

值得注意的是,For 循环的 Step 值如果是 1,则 Step 关键词可省略。

(3)Do While …循环
Do While循环用于满足指定条件时循环执行一段代码的情形。循环的指定条件在 While关键词后书写。

(4)Do While … Loop循环
根据 While 关键词后的条件表达式的值,真时执行,假时跳出循环转而执行Loop后的代码。基本语法如下:

Do While [条件表达式]
    '循环执行的代码
Loop

依旧看刚才求 1- 100内奇数累积和的例子。

Sub VBAexample()

    Dim i As Integer
    Dim sum As Integer
    
    i = 1
    Do While i <= 100
        sum = sum + i
        i = i + 2
    Loop
    
End Sub

i变量的初始值是 1,根据 While 后的条件,只要 i 变量小于等于 100,后续的代码就可以一直循环执行。

其他循环结构的代码类似。

4. with结构

个人感觉这个结构特别像c的结构体,只不过不用先在主函数外面定义结构体。使用 With 结构定义一个对象,通过【.】调用其内置参数,这样可以避免重复写同一个对象名,从而精简代码量。
with结构基本语法如下:

With [对象]
    .[属性] = [数据]
    .[方法]
    '其他属性和方法
End With

With 结构里,对象的属性和方法均有点 (.)符号开始,后接对象的属性名和方法名。

下面是With 结构的一个实例
若需要将工作簿中 Sheet1 工作表设置新名称,然后设置标签颜色为黑色,最后隐藏工作表。

(1)不用 With 结构,代码如下:

Sub VBAexample()
    Worksheets("Sheet1").Name = "新名称"
    Worksheets("Sheet1").Tab.ThemeColor = xlThemeColorLight1
    Worksheets("Sheet1").Visible = xlSheetHidden
End Sub

可以看到,每个语句都重复写 Worksheets(“Sheet1”) 部分。

(2)使用with结构,代码如下:

Sub VBAexample()

Sub VBAexample()
    With Worksheets("Sheet1")
        .Name = "新名称"
        .Tab.ThemeColor = xlThemeColorLight1
        .Visible = xlSheetHidden
    End With
End Sub

5、常用对象选择、操作

(1)改变背景色

Range("A3").Interior.ColorIndex = xlNone

ColorIndex参数选择:
在这里插入图片描述
(2)改变文字颜色

Range("A3").Font.ColorIndex = 4

(3)获取单元格

Cells(2, 4)
Range("A4")

(4)获取范围

Range(Cells(4, 5), Cells(8, 9))
Range("a2:c7") '用快捷记号引用单元格
Worksheets("Sheet2").[A2:B6]

(5)选中某sheet

Set NewSheet = Sheets("sheet2")
NewSheet.Select

(6)隐藏文档

Application.Visible = False

(7)禁止屏幕更新

Application.ScreenUpdating = False

(8)禁止显示提示和警告消息

Application.DisplayAlerts = False

(9)文件夹做成

strPath = "C:\temp\"
MkDir strPath

(10)状态栏文字表示

Application.StatusBar = "计算中"

(11)选中或激活某单元格

“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格

'下面的代码首先选择A1:E10区域,同时激活D4单元格:
       Range("a1:e10").Select
       Range("d4:e5").Activate
'而对于下面的代码:
       Range("a1:e10").Select
       Range("f11:g15").Activate
'由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。

(12)获得文档的路径和文件名

ActiveWorkbook.Path    '路径
ActiveWorkbook.Name   '名称
ActiveWorkbook.FullName  '路径+名称
'或将ActiveWorkbook换成thisworkbook

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920370.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【eNSP】OSPF、RIP与静态路由互通实验(四)

OSPF、RIP与静态路由互通实验 实验目的实验要求实验步骤步骤 1&#xff1a;配置R1、R2、R3、R4、R5、R6、R7的端口ip步骤 2&#xff1a;配置R1、R2、R3的OSPF动态路由协议步骤 3&#xff1a;配置R3、R4、R5的RIP动态路由协议步骤 4&#xff1a;配置R3作为边界路由器&#xff0c…

Vision-Language Models for Vision Tasks: A Survey 论文解读

摘要 大多数视觉识别研究在深度神经网络&#xff08;DNN&#xff09;训练中严重依赖于人工标注的数据&#xff0c;且通常为每个单一的视觉识别任务训练一个DNN&#xff0c;导致这种视觉识别范式既繁琐又耗时。为解决这两个挑战&#xff0c;近年来对视觉语言模型&#xff08;VL…

Stable Diffusion核心网络结构——U-Net

​ &#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&a…

C#桌面应用制作计算器进阶版01

基于C#桌面应用制作计算器做出了少量改动&#xff0c;其主要改动为新增加了一个label控件&#xff0c;使其每一步运算结果由label2展示出来&#xff0c;而当点击“”时&#xff0c;最终运算结果将由label1展示出来&#xff0c;此时label清空。 修改后运行效果 修改后全篇代码 …

python: generator model using sql server 2019

設計或生成好數據庫&#xff0c;可以生成自己設計好的框架項目 # encoding: utf-8 # 版权所有 &#xff1a;2024 ©涂聚文有限公司 # 许可信息查看 &#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # 描述&#xff1a; : 生成实体 # Author …

【Nginx从入门到精通】04-安装部署-使用XShell给虚拟机配置静态ip

文章目录 总结1、XShell &#xff1a;方便管理多台机器2、配置ip文件&#xff1a;区分大小写 一、查看上网模式二、Centos 7 设置静态ipStage 1 &#xff1a;登录root账号Stage 2 &#xff1a;设置静态ip : 修改配置文件 <font colororange>ifcfg-ens33Stage 2-1&#xf…

【深度学习】利用Java DL4J构建金融欺诈检测系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

当你项目服务器磁盘报警

当你们公司运维收到这样的邮件&#xff0c;大概率日志文件过大引起的 在Linux下如何不停止服务,清空nohup.out文件呢&#xff1f; nohup.out会一直一直自己增长下去&#xff0c;如果你的服务器硬盘不给力的话&#xff0c;很容易把应用也挂掉&#xff08;硬盘没空间 &#xff0…

面向未来的智能视觉参考设计与汽车架构,思尔芯提供基于Arm技术的创新方案

引言&#xff1a; 随着科技的飞速发展&#xff0c;智能视觉IoT已成为科技领域的热门话题&#xff0c;为智能家居、智慧城市等领域带来新机遇。然而&#xff0c;物联网市场的碎片化特性对智能视觉芯片设计构成挑战。同时&#xff0c;汽车行业正经历技术驱动的变革&#xff0c;软…

C++ 20 中 vector list stack queue 分别从功能 效率等全方面分析其差异

C++ 20 中 vector list stack queue 分别从功能 效率等全方面分析其差异 在 C++20 中,std::vector、std::list、std::stack 和 std::queue 是常用的容器或容器适配器。以下从功能、效率、使用场景等方面对它们进行详细对比。 功能对比 2.效率对比 存储和访问 扩容效率std::…

51单片机之串口通讯

1.串口简介 串口&#xff0c;全称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是一种常用于电子设备间通讯的全双工扩展接口。 串口通讯的技术基础&#xff0c;指一位一位地按顺序传送数据。其特点是线路简单&#xff0c;只需一对传输线&…

UE5 DownloadImage加载jpg失败的解决方法

DownloadImage加载jpg失败的解决方法 现象解决方案具体方法 现象 用UE自带的 DownloadImage 无法下载成功&#xff0c;从 failure 引脚出来。 接入一个由监控器自动保存起的图像&#xff0c;有些可以正常加载成功&#xff0c;有些无法加载成功。 经调查问题出现在&#xff0c;…

Springboot 整合 Java DL4J 搭建智能问答系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

相较于发达国家约70%的普及率,中国【台式洗碗机】渗透率仅在2%-3%之间,潜在市场增量可观

内容摘要 据 HengCe 最新调研&#xff0c;2023年中国台式洗碗机市场销售收入达到了 万元&#xff0c;预计2030年可以达到 万元&#xff0c;2024-2030期间年复合增长率(CAGR)为 %。本研究项目旨在梳理台式洗碗机领域产品系列&#xff0c;洞悉行业特点、市场存量空间及增量空间&…

自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于python的机器学习(四)—— 聚类(一)

目录 一、聚类的原理与实现 1.1 聚类的概念和类型 1.2 如何度量距离 1.2.1 数据的类型 1.2.2 连续型数据的距离度量方法 1.2.3 离散型数据的距离度量方法 1.3 聚类的基本步骤 二、层次聚类算法 2.1 算法原理和实例 2.2 算法的Sklearn实现 2.2.1 层次聚类法的可视化实…

算法知识-12-指针

概念 指针是一个变量&#xff0c;它存储的是另一个变量的内存地址。 基础使用指针 //声明 int* ptr; // 声明一个指向 int 类型的指针 //初始化 int num 5; int* ptr2 &num; // 使 ptr2 指向 num 的地址 //访问值 cout << *ptr2; // 输出 ptr2 所指向的 num …

图像上显示中文文本 - python 实现

该示例是在图像上显示中文文本&#xff0c;并用opencv的显示方式显示。 注意&#xff1a;SimHei.ttf&#xff08;黑体字体&#xff09;为字体文件&#xff0c;Windows 默认字体路径&#xff1a;C:/Windows/Fonts/SimHei.ttf 具体实现代码如下&#xff1a; # -*-coding:utf-8…

uniapp rpx兼容平板

问题: 使用uniapp开发平板端时, rpx/upx 内容过小, 没有适应屏幕 原因: uniapp 默认支持最大设备宽度为960px 而平板宽度超出了960 uniapp官方文档https://uniapp.dcloud.io/collocation/pages?idglobalstyle 解决: // pages.json 文件&#xff1a; {//..."globalSt…

【隐私计算大模型】联邦深度学习之拆分学习Split learning原理及安全风险、应对措施以及在大模型联合训练中的应用案例

Tips&#xff1a;在两方场景下&#xff0c;设计的安全算法&#xff0c;如果存在信息不对等性&#xff0c;那么信息获得更多的一方可以有概率对另一方实施安全性攻击。 1. 拆分学习原理 本文介绍了一种适用于隐私计算场景的深度学习实现方案——拆分学习&#xff0c;又称分割…