Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >文科生也能学会的Excel VBA 宏编程入门

文科生也能学会的Excel VBA 宏编程入门

作者头像
全栈程序员站长
发布于 2022-06-28 10:21:55
发布于 2022-06-28 10:21:55
6.2K02
代码可运行
举报
运行总次数:2
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

文章目录

VBA宏编程简介

VBA编程是Office系列软件自带的编程功能,也就是说不只是Excel,Word和PPT也能进行VBA编程。而“”可以理解为一组自动化程序,执行一个宏就能执行其对应的一系列操作。创建宏主要有两种方法,一种是录制宏,也就是将人的一些操作录下来,需要的时候执行宏就可以自动重复这些操作;另一种就是本文要介绍的,通过VBA编程来自己写一个宏。

准备工作

Excel默认是没有打开宏功能和VBA编程功能的,因此需要打开一下。

打开宏功能

依次点击【文件】 → \rightarrow → 【选项】 → \rightarrow →【信任中心】 → \rightarrow →【信任中心设置】 → \rightarrow →【宏设置】 → \rightarrow →【启用所有宏】

打开“开发工具”选项卡

依次点击【文件】 → \rightarrow → 【选项】 → \rightarrow →【自定义功能区】找到“开发工具”,并把它添加到右边

VBA编程

示例任务介绍

该任务分两个sheet,其中Sheet1为学生的分数,Sheet2为对Sheet1的信息进行分类统计,具体如下:

第一个表起名为“分数”,第二个表起名为“统计”

文件宏

  1. 依次点击【开发工具】 → \rightarrow →【Visual Basic】

左侧看到如上图所示目录,双击【Sheet1】、【Sheet2】、【ThisWorkbook】都可以打开编程窗口,但程序作用范围不一样,由于我们需要操作两个Sheet,因此双击【ThisWorkbook】打开。这里大家可能能猜到了,Workbook指的就是这个Excel文件。

  1. 编写如下程序
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub 分类统计()
    
    Dim maleCtr As Integer '男生人数
    Dim femaleCtr As Integer '女生人数
    Dim daCtr As Integer '名字以达结尾人数
    Dim maleSum As Double '男生总分
    Dim femaleSum As Double '女生总分
    
    Dim i As Integer
    
    i = 2
    
    Do While Not IsEmpty(Sheet1.Range("A" & i))
        Dim name, sex As String
        Dim score As Double
        
        name = Sheet1.Range("A" & i)
        sex = Sheet1.Range("B" & i)
        score = Sheet1.Range("C" & i)
        
        If sex = "男" Then
            maleCtr = maleCtr + 1
            maleSum = maleSum + score
        Else
            femaleCtr = femaleCtr + 1
            femaleSum = femaleSum + score
            
        End If
        
        If name Like "*达" Then  'like是相似的意思,*为通配符
            daCtr = daCtr + 1
        End If
        
        i = i + 1 '下一行
    Loop
    
    Sheet2.Range("A2").NumberFormatLocal = "0"    '设置数字格式为没有小数
    Sheet2.Range("B2").NumberFormatLocal = "0.##"    '设置数字格式为小数点后两位,非零才显示
    Sheet2.Range("C2:E2").NumberFormatLocal = "0.00"   '设置数字格式为小数点后两位且补零
            
    
    Sheet2.Range("A2") = maleCtr
    Sheet2.Range("B2") = femaleCtr
    Sheet2.Range("C2") = daCtr
    Sheet2.Range("D2") = maleSum / maleCtr
    Sheet2.Range("E2") = femaleSum / femaleCtr
    
End Sub
  • 下面对程序进行一些说明,首先Sub 宏名称()...End Sub里“宏名称”改成任意你想要的宏名称即可,但不可以有空格。
  • Dim 变量名 As 数据类型是Visual Basic语言定义变量的方式,其中常用的数据类型有Integer整数、Double小数、String字符串、Date日期。
  • Visual Basic语言中单引号'后面的为注释内容,即程序之外的文本,不参与程序的运行,一般用来写一些解释说明,方便程序的理解。如程序中Dim maleCtr As Integer '男生人数maleCtr这个整数类型的变量用于累加Sheet1中男生的人数。
  • Do While 逻辑条件 ... Loop是Visual Basic中的循环语句之一,当逻辑条件为真时进入循环,当逻辑条件为假时退出循环。本程序中这个循环是为了一行行遍历Sheet1这张表,直到最后一个学生。因此我们需要判断变量i什么时候到最后一行。这里采用的逻辑条件Not IsEmpty(Sheet1.Range("A" & i)),其中IsEmpty()是用于判断是否为空,为空时返回true,否则返回false,但我们希望当不为空时继续循环,因此前面加个Not用于取反
  • Sheet1.Range("A1" )可以用于取出Sheet1中A1格里面的内容,此外还可以用Sheets(1).Range("A1" )Sheets("分数").Range("A1" )
  • "A" & i是将字符串"A"和整数i拼接起来,随着i=i+1的累加,这个程序中会依次遍历"A2""A3"一直到退出循环。
  • Visual Basic常用的逻辑判断语句如下,当逻辑条件1满足时执行程序1,都不满足时执行程序3,其中Elseif 逻辑条件 Then的数量不限。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
If 逻辑条件1 Then 
... 程序1
Elseif 逻辑条件2 Then 
... 程序2
Else 
... 程序3
End If
  • name Like "*达"的意思是name这个字符串的内容是否以“达”结尾,其中“*”为通配符,可以表示任意长度的任意内容,如果写成"*达*"意思就是名字中间是否有”达”。
  • Sheet2.Range("A2").NumberFormatLocal = "0"是设置数字单元格的显示格式,例如可以有"0.0""0.##""0.00%"等各种你想要的格式。这里的0和#都是一个代号,0代表即便这一位上没有数字也要显示一个0;#代表这一位如果有数字就显示,没有就不显示;%结尾会自动转成百分比显示,具体可以看Excel的帮助或是这个链接:Excel自定义格式。上述代码中为了展示不同的格式才这么写,实际上整数就用"0",两位小数就用"0.00"即可。
  • Sheet2.Range("A2") = maleCtr大家肯定都能猜到了,这是往Sheet2中对应的单元格里填数。这里Range()其实可以选多个单元格,就如上面设置格式的时候就用过多选:Sheet2.Range("C2:E2").NumberFormatLocal = "0.00"
  1. 点击绿色的小三角

就可以运行这个程序了,保存程序的时候可能会提示为无法保存,这时候将Excel文件另存为带宏的格式即可,例如xlsm格式。

  1. 这时,点击【开发工具】 → \rightarrow →【宏】也能找到我们编写的宏,点执行就能运行,但我们可以看到,这里宏的位置为“ThisWorkbook”,也就是我们打开的这个Excel文件,在别的文件里是无法运行这个宏的。
  1. 运行结果如下:
  1. 如果想调试程序,点击【调试】 → \rightarrow →【逐语句】即可一行一行运行程序,将鼠标放到对应变量上可以看到它们的值,这样程序运行结果不对时就可以用于寻找BUG。

全局宏

上面我们提到,通过【Visual Basic】进入编程界面编写的宏是属于单个文件或Sheet的,如果我们想编写一个可以在所有文件中运行的宏要怎么做呢?下面是具体做法。

  1. 点击【开发工具】 → \rightarrow →【录制宏】
  2. 宏名称随意,保存在必须选择【个人宏工作簿】,这个工作簿就是这台电脑共享的宏保存位置,具体位置为C:\Users\【用户名】\AppData\Roaming\Microsoft\Excel\XLSTART,里面有一个文件叫PERSONAL.XLSB。共用的宏就保存在这里,通过将这个文件发给别人覆盖对应的文件就可以把共用的宏给别人用了。如果是文件自带的宏,只需要把Excel文件发给对方就可以,文件已经自包含了。
  1. 点【确定】,这时可能会提示文件必须打开,那我们就把PERSONAL.XLSB这个文件打开后再来一次。
  2. 这次点【确定】可以录制了,事实上什么都无需录,直接点【停止录制】即可,我们只想要个壳而已。
  3. 点击【宏】,找到我们刚才录制的这个宏,点击【编辑】。
  1. 我们会看到这个宏保存在【PERSONAL.XLSB】这个分支的【模块】分支下面,如果是第一次录制就是【模块1】,对于我来说是【模块2】。我们将前面的程序复制一下,然后替换掉这个空的宏里的所有代码。
  1. 仅仅是将代码复制过来是不够的,因为这个宏是共用的,代码中Sheet1等变量的指代不明,不知道是哪个Excel文件中的Sheet1,因此我们做些小的修改。直接查找替换,将Sheet1都替换成ActiveWorkbook.Sheets(1);将Sheet2都替换成ActiveWorkbook.Sheets(2)即可。这里顾名思义,ActiveWorkbook就是指当前激活的那个Excel文件,因此想在哪个文件运行宏,就从那个文件执行宏即可。记得点保存,最终完整代码如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub 分类统计()

    
    Dim maleCtr As Integer '男生人数
    Dim femaleCtr As Integer '女生人数
    Dim daCtr As Integer '名字以达结尾人数
    Dim maleSum As Double '男生总分
    Dim femaleSum As Double '女生总分
    
    Dim i As Integer
    
    i = 2
    
    Do While Not IsEmpty(ActiveWorkbook.Sheets(1).Range("A" & i))
        Dim name, sex As String
        Dim score As Double
        
        name = ActiveWorkbook.Sheets(1).Range("A" & i)
        sex = ActiveWorkbook.Sheets(1).Range("B" & i)
        score = ActiveWorkbook.Sheets(1).Range("C" & i)
        
        If sex = "男" Then
            maleCtr = maleCtr + 1
            maleSum = maleSum + score
        
        Else
            femaleCtr = femaleCtr + 1
            femaleSum = femaleSum + score
            
        End If
        
        If name Like "*达" Then  'like是相似的意思,*为通配符
            daCtr = daCtr + 1
        End If
        
        i = i + 1 '下一行
    Loop
    
    ActiveWorkbook.Sheets(2).Range("A2").NumberFormatLocal = "0"    '设置数字格式为没有小数
    ActiveWorkbook.Sheets(2).Range("B2").NumberFormatLocal = "0.##"    '设置数字格式为小数点后两位,非零才显示
    ActiveWorkbook.Sheets(2).Range("C2:E2").NumberFormatLocal = "0.00"   '设置数字格式为小数点后两位且补零
            
    
    ActiveWorkbook.Sheets(2).Range("A2") = maleCtr
    ActiveWorkbook.Sheets(2).Range("B2") = femaleCtr
    ActiveWorkbook.Sheets(2).Range("C2") = daCtr
    ActiveWorkbook.Sheets(2).Range("D2") = maleSum / maleCtr
    ActiveWorkbook.Sheets(2).Range("E2") = femaleSum / femaleCtr
    
End Sub
  1. 在想要执行宏的Excel文件中点击【宏】,这时就可以看到我们刚才写的宏了,点击【执行】就可以运行。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132583.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3分钟写个VBA:Excel工作簿所有子表数据一键汇总
今天同事问我,他要汇总一个工作簿里面十几张子表里面的数据到同工作簿的汇总表里面,怎么操作比较快?然后我就想到了VBA,3分钟给他写(录)了一个宏,一键完成所有数据汇总。
朱小五
2021/12/09
4.2K0
3分钟写个VBA:Excel工作簿所有子表数据一键汇总
几个有用的Excel VBA脚本
最近有个朋友要处理很多的Excel数据,但是手工处理又太慢,让我帮忙处理。通过搜索和自己的编写,帮他写了几个脚本,大大提高了工作效率。其实Excel中的脚本(宏)的功能非常方便,只要熟悉了Excel的对象,做一些常见的处理,还是非常容易的。
大江小浪
2018/07/25
1.6K0
文科生也能学会的Excel VBA 宏编程入门(三)——合并文件
在日常工作中,我们经常会遇到需要汇总多个表格的数据,将它们合并到一个表格里的情况。虽然复制粘贴大法好,但如果让你汇总几十人填报的个人信息并做成汇总表格,估计你也膜不动了。因此,这一次我们就通过VBA程序完成这个任务,从此妈妈再也不担心我数数到头秃。
全栈程序员站长
2022/09/02
4.1K0
Excel 宏编程的常用代码
我们常用Excel统计一些数据,如果善用VBA,就能自动做出各种复杂的报表,懒人就是追求一劳永逸!不过,也不是真懒啦,只是用智慧(脑力劳动)将自身从体力劳动中解放出来而已,人类也是这样进步的。我有这样的感觉,就是每见到一个语句或函数,都会激发出偷懒的灵感来,哈哈,很自恋了,其实好玩而已。
全栈程序员站长
2022/06/30
3K0
一小时搞定 简单VBA编程 Excel宏编程快速扫盲
Excel宏编程可以快速完成批量表格操作:复制粘贴、数据过滤等,宏代码基于VB语言实现,有基础的编程经验就能快速阅读。下面是我的学习笔记。
全栈程序员站长
2022/08/10
1.9K0
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.5K0
Excel VBA编程教程(基础一)
说简单点,VBA 是运行在 Microsoft Office 软件之上,可以用来编写非软件自带的功能的编程语言。Office 软件提供丰富的功能接口,VBA 可以调用它们,实现自定义的需求。基本上,能用鼠标和键盘能做的事情,VBA 也能做。
全栈程序员站长
2022/08/11
15.8K0
Excel VBA编程教程(基础一)
VBA: 多份文件的批量顺序打印(2)
文章背景:测试仪器的数据有些会以Excel文件的形式保存,工作量大时测试员会选中多份文件进行批量打印,同时可能需要删除一些无需打印的测试数据(比如空白样,错误数据等)。现在以批量打印Excel文件(.xlsx格式)为例,采用VBA编程,进行任务的实现。
Exploring
2022/09/20
1.5K0
VBA:  多份文件的批量顺序打印(2)
用于处理图表&图形的VBA代码大全1
图表和图形是Excel最好的功能之一,它们非常灵活,可以用来进行一些非常高级的可视化。本文可以作为在Excel中使用VBA绘制图表的指南。
fanjy
2023/08/29
8590
用于处理图表&图形的VBA代码大全1
Excel中VBA编程学习笔记(一)「建议收藏」
Form1.Width = 300 : Form1.Caption = “VB!”
全栈程序员站长
2022/09/05
1.1K0
VBA 发票数据解析
本小程序只适用于,解析TXT文件中保存的发票扫码结果数据! 活不多说!直接上源码: ''********************************************************
办公魔盒
2019/08/01
1.3K0
VBA 发票数据解析
VBA专题10-25:使用VBA操控Excel界面之一个示例程序
在前面的一系列主题中,你已经学到了很多小的修改工作簿外观的VBA代码。下面,我们将介绍一个简单的示例程序,实现下面的功能特点:
fanjy
2021/03/26
2.6K0
VBA专题10-25:使用VBA操控Excel界面之一个示例程序
Excel中的VBA编程「建议收藏」
目的:有时我们需要对Excel文件中大量的数据进行整理,此时如果使用手动整理会非常繁琐而且容易出错。而如果采用VBA语言,在Excel中根据需求编写一段简单的代码就能自动完成大量数据的整理工作。
全栈程序员站长
2022/08/23
7.5K0
Excel中的VBA编程「建议收藏」
Vba菜鸟教程[通俗易懂]
官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/overview/language-reference 代码完成后:工具-vbaproject属性-保护-查看时锁定-密码
全栈程序员站长
2022/09/05
18.1K0
Vba菜鸟教程[通俗易懂]
VBA与数据库——Excel
一说到数据库,一般都会想到那些很专业的数据库,其实Excel本身也可以作为数据库来使用。
xyj
2021/04/26
2.8K0
VBA与数据库——Excel
代替VBA!用Python轻松实现Excel编程(文末赠书)
面向Excel数据处理自动化的脚本编程,目前主要有VBA和Python两种语言可供选择。
小F
2023/01/03
6.2K0
代替VBA!用Python轻松实现Excel编程(文末赠书)
Excel之VBA简单宏编程
excel是一款很经典的数据分析的工具,里面包含了很多内置函数,但实际情况有时却复杂得多,而excel的宏编程提供了自定义函数的功能,正好有老师需要帮忙做一些数据分析,就学习了一下,下面是我的学习笔记。本人使用的是excel2013。有出入的地方可以参考。
全栈程序员站长
2022/07/01
3.8K0
Excel之VBA简单宏编程
VBA: 提高 VBA 宏性能的 8 个技巧
文章背景: 作为VBA新手,在运行自己编写的代码时,可能会遇到VBA运行缓慢的问题。可以采取以下8个措施来提高运行效率。
Exploring
2022/12/18
4.2K0
VBA:  提高 VBA 宏性能的 8 个技巧
一键计算华师一卡通的消费记录
继上次我写了个PHP脚本抓取我的一卡通消费记录(用PHP爬取个人一卡通的消费记录)之后,我遇到了一些奇怪的问题。比如说,我统计上个学期的一卡通的花费的时候竟发现少算了400+RMB,百思不得其解。直到前段时间我才发现,原来学校的这个网站查询到的信息是不完整的,有些记录竟然会有缺失,后来我请教了负责这一块的老师,老师表示大概是学校里面某些一卡通的消费机离线时间太长,消费记录没有同步到服务器上,所以造成了这个问题。
zgq354
2019/11/24
8850
Excel宏教程 (宏的介绍与基本使用)
大家好,又见面了,我是你们的朋友全栈君。 Excel宏教程 (宏的介绍与基本使用) Microsoft excel是一款功能非常强大的电子表格软件。它可以轻松地完成数据的各类数学运算,并用各种二维或三维图形形象地表示出来,从而大大简化了数据的处理工作。但若仅利用excel的常用功能来处理较复杂的数据,可能仍需进行大量的人工操作。但excel的强大远远超过人们的想象–宏的引入使其具有了无限的扩展性,因而可以很好地解决复杂数据的处理问题。 随着支持Windows的应用程序的不断增多和功能的不断增强,越来
全栈程序员站长
2022/08/23
7.2K0
相关推荐
3分钟写个VBA:Excel工作簿所有子表数据一键汇总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验