- ?
小白也能看懂的Excel VBA入门教程(一)
小温柔
展开
什么是VBA
Visual Basic for Applications(VBA)是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。简单来说VBA是建立在Office中的一种应用程序开发工具,其实知道这也就够了。
第一个VBA程序
首先要把开发工具调出来,Excel默认情况下是不显示开发工具的
打开vb编辑器,新建模块,并写入代码
Sub test()Range("A1") = "Hello World" '在A1单元格中填写Hello WorldRange("A2") = "我的第一个VBA程序"End Sub
在Excel VBA中,Range对象可能是最常用的对象,Range对象可以是某一单元格、某一单元格区域、某一行、某一列、或者是多个连续或非连续的区域组成的区域。代码中 Range("A1") 就代表A1单元格。而“=”是一个赋值运算符,将右边的值传给左边的变量。
大家学会了吗,其实VBA还是比较简单的。小编准备写一个VBA入门的教程,现在有两种思路,一种是先讲解VB的基本知识,然后在从例子中不断加深理解,这样前期可能相对比较枯燥;另一种是每篇介绍一个例子,讲解一下如何用VBA来解决,从实战中学习,相对来说比较快一点。大家觉得那种更好一点呢,或者有更好的方法,欢迎在下方评论,小编一定会及时回复。。
- ?
Excel VBA常用技巧之 要复制指定单元格区域到其他位置,Copy属性
兔哥
展开
我们致力于为大家奉献最有效的经验,让大家能够解决掉问题,但是大家也都知道,每个人遇到的情况都是不一样的,大家在看经验的同时,除了跟随操作,也需要自己的思考,举一反三的解决问题,这样才会变得更加有内涵,一起成长为一样的经验达人。根据二八定律,学好这excel VBA,就能完成80%的工作。
在实际操作中,经常需要复制指定的单元格区域到另外一个单元格区域。要复制指定单元格区域到其他位置,使用Range对象的Copy方法,如下面的代码所示。
#001 Sub RangeCopy()
#002 Application.DisplayAlerts = False
#003 Sheet1.Range("A1").CurrentRegion.Copy Sheet2.Range("A1")
#004 Application.DisplayAlerts = True
#005 End Sub
代码解析:
RangeCopy过程将如图 所示的Sheet1工作表中A1单元格的当前区域复制到Sheet2工作表中以A1单元格为左上角单元格的区域,如图 2所示。
图 1 需复制的数据表
图 12 复制结果
Range对象的Copy方法的语法如下:
Copy(Destination)
参数Destination表示复制单元格区域的目标区域,如果省略该参数,Excel将把该区域复制到剪贴板中。
使用Copy方法复制单元格区域时,也复制了该单元格区域的格式,如图 12所示。
复制单元格区域时,如果目标区域为非空单元格区域,Excel将显示如图 13所示的消息框提示是否替换单元格内容,可以设置Application.DisplayAlerts属性值为False,使复制时不出现该消息框。
图 73 替换对话框
第2行代码通常复制单元格区域的操作不会将单元格区域的列宽大小同时复制,如图 72所示。如果希望在复制单元格区域的同时,也复制源区域的列宽大小,可以使用下面的代码。
#001 Sub CopyWithSameColumnWidths()
#002 Sheet1.Range("A1").CurrentRegion.Copy
#003 With Sheet3.Range("A1")
#004 .PasteSpecial xlPasteColumnWidths
#005 .PasteSpecial xlPasteAll
#006 End With
#007 Application.CutCopyMode = False
#008 End Sub
代码解析:
第4行代码使用Range对象的PasteSpecial方法选择性粘贴剪贴板中的Range对象的列宽。
第5行代码粘贴剪贴板中的Range对象全部内容。
第7行代码取消应用程序复制模式。
应用于Range对象的PasteSpecial方法将剪贴板中的Range对象粘贴到指定区域,在粘贴时可以有选择的粘贴对象的部分属性。其语法如下:
PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
参数Paste指定要粘贴的区域部分,可为表格 71所列的XlPasteType常量之一。
表格 71 XlPasteType 常量
参数Operation指定粘贴操作。可为表格 12所列的XlPasteSpecialOperation常量之一。
表格 12 XlPasteSpecialOperation常量
参数SkipBlanks指示是否跳过空单元格,若参数值为True,则不将剪贴板上区域中的空白单元格粘贴到目标区域中。默认值为False。
参数Transpose指示是否进行转置,若参数值为True,则粘贴区域时转置行和列。默认值为False。
运行CopyWithSameColumnWidths过程后,Sheet3工作表如图 74所示,目标区域的各列列宽与源区域一致。
图 74 粘贴列宽后的复制结果
注意 使用PasteSpecial方法时指定xlPasteAll(粘贴全部),不会粘贴列宽。
如果你在工作中还需要设计其他的表格模板,都可以留言,我们会根据大家需求来整理相关的学习资料,目的只有一个,那就是学好Excel,提高工作效率!
- ?
Excel通用VBA代码一键合并多个工作表至总表!
灰烟飞
展开
转载自百家号作者:Excel自学成才
一个工作簿中会有很多个相同格式,标题行内容和顺序都一样的工作表,我们想把这个工作表中的数据全部放至一个总表数据中。
图片上示例是3个工作表,实际工作中可能是几十个,如果一个一个复制粘贴至总表里面,耗费的时间很长,并且容易出错,今天教大家用一段通用的VBA代码来实现一键快速合并,效果如下所示:
只需要点击一下多表合并的按纽,后面所有工作表,会按顺序全部放至汇总表格中。
现在是每个工作表中的标题是4个项目,如果是更多项目,同样的可以进行合并,例如我们在英雄1表格中添加一列
用这个代码,同样的可以进行快速合并,只需要在汇总的表格中添加一个标题第五列,然后点击多表合并按纽即可
同样的,如果是再添加1个工作表,在英雄1后面插入了一个sheet2表格,里面输入一条同样的数据,如下所示:
同样的,只需要点击多表合并按纽便可完成,如下所示:
那么这个VBA代码是什么,如下所示:
Sub 多表合并()
Dim arr()
a = Range("a1").End(xlToRight).Column
For Each sh In Sheets
If sh.Name <> "汇总" Then
arr1 = sh.Range("a2").Resize(sh.UsedRange.Rows.Count - 1, a)
act = act + UBound(arr1)
ReDim Preserve arr(1 To a, 1 To act) '
For j = 1 To UBound(arr1)
n = n + 1
For i = 1 To a
arr(i, n) = arr1(j, i)
Next i
Next j
End If
Next
Sheets("汇总").[a2].Resize(n, a) = Application.Transpose(arr)
End Sub
这段代码直接保存即可,有了这段代码,我们在VBA中插入一个模块,将代码写入进去,插入一个按纽,绑定代码,即可实现,绑定代码的操作过程如下所示:
好,你学会了吗?
给自己持续学习的态度点个赞吧!
欢迎留言讨论,期待您的转发分享!
-------------------------------
谢谢关注,更多精彩内容持续更新中....
- ?
Excel2010三种快速打开VBA界面的小技巧
Tyne
展开
Visual Basic for Application(简称VBA)是一种必须依赖母系程序方能使用的程序,属于VB程序语言的一个子集。我们常用的Excel电子表格除了常规的可视化命令之外,还可以通过VBA代码来操控Excel实现一些较复杂的逻辑运算及统计分析等。我们不仅可以使用代码实现数据的统计运算,还能实现图表的自动生成于刷新,以及图形的旋转与移动。在网上我们可以找到有很多大牛基于Excel的VBA,开发了一些具有特定功能的代码,以及酷炫的游戏界面等。如果您对这方面感兴趣的话,那你必须掌握的第一步操作就是打开VBA界面来认实它。
复杂的逻辑运算使我们身心俱疲闲话少聊,下面就重点介绍一下从Excel窗口切换到VBA界面的操作技巧。
方法一是通过功能区的选项卡来实现。首先在菜单栏中找到开发工具项,然后在代码功能模块中找到Visual Basic命令按钮,单击它即可快速切换到VBA界面。若菜单栏中没有开发工具这一项,需要设置自定义功能区下的主选项卡来调出该命令。
功能区的主选项卡-开发工具2.方法二是通过工作表标签来实现。首先在Excel界面左下角找到工作表标签区域,右键单击任一一个工作表标签,本教程以Sheet1工作表为例,在弹出的右键菜单中选择查看代码命令,随后即可激活VBA界面。
Excel工作表标签3.方法三是通过快捷键法实现。在Excel操作界面下,按下组合键Alt+F11即可快速切换到VBA界面;在VBA界面下按此组合键即可快速关闭VBA窗口。
- ?
Excel VBA之自定义函数Function
高雁荷
展开
=============================================================
====================
|| 版本号:Excel2013. ||
VBA有两个基本过程,一个是Sub过程,一个是Function过程。
其中Function过程就是自定义函数,本篇就来介绍它
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
自定义函数的基本语法
Function也是保存在模块中
如下:
注:(1)带[]号的都是可选内容。第一行最后的As语句表示指定函数返回的数据类型。
(2)如果想强制退出函数过程,则在需要位置加上语句 Exit Function
(3)最后必须把过程计算的结果返回给函数名称。
(4)使用自定义的Function与使用Excel已有的函数是一样的。但是要注意,私有的函数是
不会出现在“插入函数”对话框里的。
举一个例子,计算特定单元格区域背景颜色为黄色的单元格数目,该函数如下:
注意:这个函数需要你传入所要计算的单元格区域
设定自定义函数为易失性函数
有时当工作表重新计算时,自定义的函数并不会重新计算。此时我们要手工将自定义的Function
设定为易失性函数就可以了。设定也很简单,值需要在函数开始的第一句写上如下代码即可:
注意:当表格改变时,易失性函数也会重新计算。但是想单元格背景色的改变不会导致表格重新计算,
因此易失性函数也不会重新计算。
- ?
EXCEL VBA工作表操作全能方法小结
华凌旋
展开
[ 01]增加工作表(Add方法)
Sub AddWorksheet()
MsgBox "在当前工作簿中添加一个工作表"
Worksheets.Add
MsgBox "在当前工作簿中的工作表sheet2之前添加一个工作表"
Worksheets.Add before:=Worksheets("sheet2")
MsgBox "在当前工作簿中的工作表sheet2之后添加一个工作表"
Worksheets.Add after:=Worksheets("sheet2")
MsgBox "在当前工作簿中添加3个工作表"
Worksheets.Add Count:=3
End Sub
示例说明:Add方法带有4个可选的参数,其中参数Before和参数After指定所增加的工作表的位置,但两个参数只能选一;参数Count用来指定增加的工作表数目。
--------------------------------------------------------------------------------
[ 02]复制工作表(Copy方法)
Sub CopyWorksheet()
MsgBox "在当前工作簿中复制工作表sheet1并将所复制的工作表放在工作表sheet2之前"
Worksheets("sheet1").Copy Before:=Worksheets("sheet2")
MsgBox "在当前工作簿中复制工作表sheet2并将所复制的工作表放在工作表sheet3之后"
Worksheets("sheet2").Copy After:=Worksheets("sheet3")
示例说明:Copy方法带有2个可选的参数,即参数Before和参数After,在使用时两个参数只参选一。
[ 03]移动工作表(Move方法)
Sub MoveWorksheet()
MsgBox "在当前工作簿中将工作表sheet3移至工作表sheet2之前"
Worksheets("sheet3").Move Before:=Worksheets("sheet2")
MsgBox "在当前工作簿中将工作表sheet1移至最后"
Worksheets("sheet1").Move After:=Worksheets(Worksheets.Count)
示例说明:Move方法与Copy方法的参数相同,作用也一样。
[ 04]隐藏和显示工作表(Visible属性)
[ 04-01]
Sub testHide()
MsgBox "第一次隐藏工作表sheet1"
Worksheets("sheet1").Visible = False
MsgBox "显示工作表sheet1"
Worksheets("sheet1").Visible = True
MsgBox "第二次隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetHidden
MsgBox "第三次隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetVisible
MsgBox "第四隐藏工作表sheet1"
Worksheets("sheet1").Visible = xlSheetVeryHidden
MsgBox "第五隐藏工作表sheet1"
示例说明:本示例演示了隐藏和显示工作表的各种情形。其中,使用xlSheetVeryHidden常量来隐藏工作表,将不能通过选择工作表菜单栏中的“格式”——“工作表”——“取消隐藏”命令来取消隐藏。
[ 05]
Sub ShowAllSheets()
MsgBox "使当前工作簿中的所有工作表都显示(即将隐藏的工作表也显示)"
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = True
Next ws
[ 06]获取工作表数(Count属性)
[ 05-01]
Sub WorksheetNum()
Dim i As Long
i = Worksheets.Count
MsgBox "当前工作簿的工作表数为:" & Chr(10) & i
- ?
EXCEL用VBA代替VLOOKUP函数,速度更快更通用
甄雪兰
展开
VLOOKUP函数是一个纵向查找函数,它是按列查找,最终返回该列所需查询列序所对应的值。
用VLOOKUP函数来查找很方便,不过它的缺点很明显:
1、速度慢,特别是在数据量大的情况下。
2、每个单元格你都要维护好公式,如果对应不到会出现#N/A,不是很美观,当然你可以用别的公式来消除,不过这又增加了公式的复杂度。
用VBA代替VLOOKUP函数,不仅速度快,而且把它单独做成模版,下次有类似对应操作的需求时,可以直接复制粘贴进去来使用,不用再维护调整公式数量了,通用性强。
举个例子:把表1学号信息填到表2学号里面
VBA代替VLOOKUP函数
方法一、最笨的方法就是按照姓名筛选手工填或者CTRL+F批量替代,数据量大了根本不好使。
方法二、在表2学号列填写VLOOKUP函数,比如G2=VLOOKUP(F2,A1:B4,2,FALSE), G3=VLOOKUP(F3,A1:B4,2,FALSE),以此类推。
方法三、用VBA代码,按ALT+F11进入工程界面,输入右侧代码,运行就可以了。
下次遇到类似的需求只要把相应的数据复制粘贴到表1和表2,运行一下就可以了。
附上截图代码
Sub 引用()
Dim i%, r%
Dim arr1, arr2
arr1 = Sheets("sheet1").[a1].CurrentRegion '表1数据赋值给数组arr1
arr2 = Sheets("sheet1").[f1].CurrentRegion '表2数据赋值给数组arr2
r = 1
For r = 1 To UBound(arr2) '可以看成表2的行数
For i = 1 To UBound(arr1) '可以看成表1的行数
If arr2(r, 1) = arr1(i, 1) Then '可以看成如果表1和表2各自的第1列数据有一样的
arr2(r, 2) = arr1(i, 2) '那么把表1对应的第2列数据赋值给表2的第2列数据
Exit For '结束循环遍历
End If
Next
Sheets("sheet1").[f1].Resize(UBound(arr2), 2) = arr2 '把更新后的数组arr2复制到表2
End Sub
- ?
EXCEL VBA建立目录列表
想起
展开
在电子表格中,如下代码可建目录列表
注意
目录工作表中提取各工作表名称
其余工作表第一个单元格显示返回目录
所有工作标字体,列宽,视图比例大小设置
其中用到FOR NEXT语句,用到单元格链结,用到COPY方法。
代码如下:
Sub 生成目录链接()
Dim i As Long
For i = 1 To Sheets.Count
Sheets(i).Columns.Clear
Sheets(i).Hyperlinks.Add Anchor:=Cells(i, 1), Address:=ActiveWorkbook.Name, SubAddress:=Sheets(i).Name & "!A1", TextToDisplay:=Sheets(i).Name
Next
For j = 1 To Sheets.Count - 1
Sheets(j).Cells(1, 1).Copy Sheets(j + 1).Cells(1, 1)
Sheets(j + 1).Cells(1, 1).Hyperlinks(1).TextToDisplay = "返回目录"
Range("A1").Font.Underline = xlUnderlineStyleNone
Range("A1").Activate
For k = 1 To Sheets.Count
With Sheets(k).Columns.Font
.Name = "宋体"
.FontStyle = "加粗"
.Size = 23
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorHyperlink
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Sheets(k).Select
ActiveWindow.Zoom = 100
Columns.EntireColumn.AutoFit
Sheets("目录").Activate
Cells(1, 1).Font.Color = 255
ThisWorkbook.Save
End Sub
- ?
1个案例教你学会Excel中的VBA
水蓝
展开
可能很多朋友不知道Excel中VBA的用途。那什么是VBA呢?
一句话概括:在Excel中想实现什么功能,就可以用VBA语言编写一段程序去完成。
今天通过例子带大家了解Excel中的VBA!
软件说明:Excel 2010版本
场景再现:表格中点击按钮,向单元格E1中输入数字 “233”,并且能够实现清除!
第一步、打开编写VBA代码的窗口
在Excel表格中编写VBA的窗口叫VBE编辑器,有两种打开的方法。
在工作表标签上右键 - 查看代码按Alt+F11
第二步、创建写VBA代码的地方
有朋友肯定会问:“我没学会编程怎么办?”、“我都没见过代码能行吗?”;别急!我的回复是肯定的!
在哪编写代码呢?有好几种方式,今天先学最常用的:“插入” - “模块”。新建一个模块用来存放编写的代码;记住:修改模板的名称:我的VBA模板【如下图虚线标注】
第三步、开始写代码
新建模板后,在右侧的空白位置就是编写代码的地方。可以执行的VBA代码,结构是这样的:
Sub 程序名(参数)可以执行任务的代码End Sub
因为例子中我要进行输入与清除的操作,输入Sub 程序名()然后回车,End Sub就会自动输入;如下图:
在开始和结束语句之间输入代码,执行在单元格A1中输入数字"233"
Range("E1") = 123
备注:在VBA中,Range("单元格地址")来表示单元格。在单元格中输入值,直接用=值 即可(字符串两边要加双引用),如果清空则 =""。
再编写一段清空代码:
第四步、测试运行代码
在编写代码时经常要测试是否正确。测试方式是把光标放在代码行的任意位置【下图中“测试按钮”的位置】,点击运行小按钮进行测试;同样清空代码也一样。
第五步、点击按钮执行VBA代码
在Excel中插入的图形、图片、按钮控件都可以执行VBA代码。让它们执行很简单,点击“插入” - “矩形” - “指定宏”
只需要右键菜单中点击指定宏 - 选取编写的宏名称,选择“输入”,添加输入按钮。
同样添加清除按钮:
当然自己可以调整字体的颜色、字体,让其变得更加美观!
此时,通过VBA设置的输入“233”,并可以点击清除!
第六步、保存VBA代码
此时的VBA代码应该是既有输入代码又有清空代码;最后需要保存为“启用宏的工作簿"类型【注意下图中虚线框标注】,VBA代码才能保存下来。
好了!今天的分享就到这里,是不是感觉VBA也没有想象的那么难?
赶快转发、关注吧,更多技巧尽在头条号中!
- ?
太实用了!Excel VBA常用代码!
冷安
展开
前两天有两位朋友留言想收集一些VBA的常用代码,今天开始会陆续分享一些!
记得收藏好哦,因为今后你应用到稍大型Excel VBA程序时,这其中某些代码肯定会用到。
来看看都是哪些常用代码:
下面先举一个简单的例子:
场景再现:在当前的工作表中插入一张e盘中名为1.jpg的图片(长350、高300,距离Excel左侧90、上边框230)
操作方法:
第一步,打开vba代码区,输入通用格式【输入 sub 统计()回车即可】,并将名称改为“统计”;
第二步,输入控制语句(ActiveSheet.Shapes.AddPicture "e:.jpg", True, True, 90, 230, 350, 300);
第三步,看看结果。
后面会分享更多关于Excel VBA的知识,欢迎大家留言、讨论!
excelvba
-
1、只需3秒快速实现求和
-
2、如何快速填充序号
-
3、如何自动填充序号(公式法)
-
4、数据条的神奇应用
-
5、多文本快速合并
-
6、查找与替换的不同玩法
-
7、快速定位到指定区域
-
8、数据排序、工资条制作
-
9、快速筛选(模糊、精确筛选)
-
10、快速插入空行
-
11、快速删除空行
-
12.快速跳转到天涯海角
-
13、.同时查看两个Excel文件
-
14、用条件格式扮靓报表
-
15、一键插入Excel图表
-
16、批量处理行高、列宽
-
17、利用拆分功能查看数据
-
18、批量录入相同内容
-
19、工作表快速跳转
-
20、批量录入表格模板(精品课程)
-
21、Excel函数与公式的应用、公式循环引用的查找
-
22、IF函数单条件判断同比增长
-
23、用sum函数 格式相同,连续多表数据汇总
-
24、excel快捷键
-
25、VLOOKUP函数——根据销售员匹配销售额
-
26、统计各部门销售总额
-
27、统计指定条件个数
-
28、怎样输入当前日期和时间、星期数
-
29、销售业绩排名
-
30、Sumproduct函数-万能函数(销售额汇总求和)
-
31、根据销售员,地区,商品名称汇总
-
32、批量替换PPT字体
-
33、给销售额数据批量添加万元单位
-
34、一秒快速核对两列数据
-
35、快速定位到指定单元格或区域
-
36、快速制作双行标题工资条
-
37、给你的表格做个瘦身
-
38、快速打开常用的Excel文件
-
39、快速打开多个Excel文件
-
40、利用创建组—快速隐藏/展开多列数据
-
41、快速制作下拉菜单
-
42、复制粘贴表格,如何保留数据源列宽格式一致?
-
43、两列数据位置互换
-
44、1秒钟扮靓报表——如何实现表格隔行换色
-
45、快速删除重复记录——保留唯一值
-
46、快速向下填充、向右填充,文本或公式
-
47、给Excel文件添加密码
-
48、插入带图片的批注
-
49、输入公式后不计算?
-
50、如何设置单元格缩进
-
51、快速解决Excel表格总显示货币格式
-
52、批量添加万元单位
-
53、你会四舍五入么?
-
54、用RAND函数机选彩票
-
55、冻结首行你会么?
-
56、超链接的高级应用
-
57、IFERROR函数-屏蔽错误值
-
58、批量填充颜色
-
59、录入数据
-
60、快速输入工号
-
61、快速行列转置
-
62、自定义缩放界面
-
63、多个单元格同时输入
-
64、如何计算立方米?
-
65、快速制作双行标题工资条
-
66、输入带方框的√和×
-
67、快速将姓名对齐
-
68、快速输入性别
-
69、按单位职务排序
-
70、自动计算合同到期日期
-
71、计算时间间隔
-
72、日期和时间的拆分
-
73、快速处理不规范的日期格式
-
74、快速填充合并单元格
-
75、效率加倍的快捷键
-
76、快速复制表格和对象
-
77、快速创建工作表副本
-
78、快速复制序列号
-
79、快速显示公式
-
80、多个单元格同时输入
-
81、快速调整显示比例
-
82、快速自动填充
-
83、快速填充(Ctrl+E)
-
84、Ctrl与数字键结合
-
85、快速将多列数据整理为1列
-
86、快速将1列数据拆分为多列
-
87、快速定位公式
-
88、快速录入数据
-
89、快速累计求和
-
90、身份证号码显示为0怎么办?
-
91、快速制作斜线表头
-
92、文本竖向显示
-
93、神奇的监视窗口
-
94、不一样的格式刷
-
95、快速美化图表
-
96、快速生成当前日期
-
97、快速找出循环引用
-
98、快速提取信息
-
99、二维表快速转换为一维表
-
100、快速多表合并