- ?
Excel中的VBA代码你可以写出来,可是你真的会优化代码吗?
Delphine
展开
我们很多时候在用Excel VBA去实现某一个功能的时候,也许会用到很多行的代码去实现我们最终要的结果。
可是有时候你殊不知,有些代码是经过录制宏产生的,或者语句繁琐,变量不正确从而造成你所写的程序运行的时间非常久,或者造成计算机的CPU使用率达到100%,严重可导致系统崩溃发生。
但是这样的结果显而易见,并不是我们想要的结果。我们想要的是一个可靠的,高效率的,简化操作的,提高劳工效率,减少错误率的,适应性强的程序。
所以我们不得不寻求更好的方法去改善,去优化代码,以寻求高效率完成我们的工作。
下面我们重点和大家分享一下,怎么去优化我们的代码:
1.关闭屏幕刷新,速度可以提升30%的速度。所以大家在写完代码的时候,不妨在我们程序最开始加上这句话,当然在程序执行完之前,也就是最后一句话的时候,你要记得将屏幕刷新打开。
Sub test()
Application.DisplayAlerts = False
Cells(1, 1) = 1
Application.DisplayAlerts = True
End Sub
2. 使用工作表函数,这句话的意思就是说我们某些时候,可以优先考虑Excel自带的函数去实现这个,而不是我们自己去写代码。当然效果都是一样的,但是时间可能就不是一样。
Sub ShtFunctions()
a.使用循环进行数据累加计算
For i = 1 To 40000
MySum = MySum + Cells(i, 1)
Next
b.直接使用工作表进行求和
Cells(1, 1) = Application.Sum(Range("A1:A40000"))
End Sub
3. 使用With-End With语句,减少引用对象的寻找速度,提高程序的效率。当然这样还有一个优点,就是我们要改变引用对象的时候,只需改变一个位置即可,这样也便于后期的维护和修改。
Sub test()
With Range("E5").Font
.Color = -16776961
.Font.Bold = True
.Name = "宋体"
.Size = 9
.Name = "Arial Unicode MS"
.Size = 9
End With
End Sub
4.数据类型的正确选用,这个也是非常关键的。这个就好像你去打水喝,正确的应该是拿杯子过去,但是你拿着一个很大的桶去接水喝,当然都可以完成喝水这个动作,但是明显就可以看出拿桶的那个人选择就有问题。其实在我的Excel中处理数据的能力也是不一样的,处理速度最快的是long>integer>byte>Single>Double>Currency。需要注意的是,如果我们不定义变量,那么系统默认为Variant类型,当我定义合适,速度就会有提升,所以每次我们千万记得要选择最合适自己的啦!
5.使用数组,数组和字典是VBA的核心功能,所有在可以使用数组的时候,千万记得使用数组。在某些时候,在使用数组和不使用数组对比下,速度可能相差100倍。尽量减少变量的使用,增加数组和字典的配套使用。还有就是多使用动态的数据,少使用静态的数据,数组的Redim和Preserve要常记得。
6.多清除对象的缓存,比如 Set d = Nothing,这句话的意思就是卸除对象的引用。这样也可以稍微加快一点执行的速度。另外我们可以通过减少循环的次数,减少类模块的使用,减少模块的使用,减少我们语句中的激活的次数,或者寻找更优质效率更高的代码。
以上就是自己在学习VBA的时候,自己的一点点优化代码的一点点方法,可能还有其他的更好的优化只能慢慢去了解去学习,慢慢积累。虽然Excel VBA并不万能的,但是能帮助我们提高工作效率,就已经足够让你我欣慰。与君共勉之!
PS:学习的苦难需要我们主动面对,生活的苦难你躺着它自己主动就过来啦!与君共勉!!!
以上就是今天要和大家分享的技巧,希望对大家有所帮助,祝各位一天好心情!
唯有不断学习,才能不被淘汰!
Excel中每一个方法都有特定的用途,不是他们没有用处,只是你不了解或者暂时用不着,建议你收藏起来,万一哪天用着呢?
- ?
如何利用VBA控制窗口在不同的工作表间切换
聆回
展开
或许你看过不同的VBA程序的运行,对于窗口的切换一定印象深刻。在程序运行时,根据不同的需求,窗口在不同的工作表间自由的切换,可以先从一个工作表取值,放到第二个工作表中,再从其他的工作表中取出参数并参与运算,运算得出结果,放到一个单独的工作表中,看的人眼花缭乱。
这种运算是VBA所特有的。虽然在运行时会产生很多的碎片,影响时间的利用,但对于单纯的运算来讲,还是节约了时间,最主要的是提高了数据的准确性和可信度。
在羡慕别人的同时,是否也希望自己能做出这样的程序呢?当然,对于每位学习VBA的朋友来说,这是很自然的事情,学以致用,利用自己的所学。从VBA入手点滴的积累,总会有所收获,正如你经常来我这个平台,福不唐捐,总会能碰到你急于掌握的知识一样。前些时有位朋友留言,说是帮了他大忙,但我确实不知道这位朋友的大忙是什么,也并非给这位朋友定制的,总是机缘吧。
闲话少叙,其实这个实现起来很简单的,今天就给大家讲解一下利用VBA如何控制窗口的切换。
我们先看下面的代码:
11 Dim AppPATH
12 AppPATH = ActiveWorkbook.Path
13 ChDir AppPATH
14 Workbooks.Open FileName:=AppPATH & "\XX.XLS" '打开文件
15 Sheets("SHEET1").Select
16
17 Do While .Cells(I, 1).Value <>""
18-90 '提取数据’
91 I = I + 1
92 Loop
93
94 ActiveWindow.Close (False) '关闭文件
95
96 Windows("LUMAN").Activate
97
98 Sheets("SHEET1").Select
99-199 '执行操作
200
201 Sheets("SHEET2").Select
201-230 '执行操作
231
232 MsgBox ("ok!")
233
程序讲解,上面的代码是一个名为LUMAN.xls的EXCEL的VBA部分代码,当执行到第11行时,程序会识别一下路径,进而打开一个在同文件夹下名字为XX的文件。
15-93行程序会在此文件中进行操作,此时窗口的文件就是这个XX的文件,当执行到第94行时,文件XX会自动的关闭
执行到第95行时,活动窗口又回到了LUMAN的文件,先在SHEET1中进行操作,然后到SHEET2中进行操作。
所有操作执行完成后弹出对话框”OK”。
上面的代码在运行的过程中用到了两个文件,并在期间切换运行,窗口的可视性非常的好,这点比其他程序要友好,如VB6的控件,GO对EXCEL的操作。这也是强大的EXCEL的功能造就的。
当然,对于初识VBA的朋友,上面的讲解不是很解渴,不过没关系的,上面的文章中引入了很多的知识点,如:如何获得当前的地址,如何打开一个文件,如何关闭一个文件,如何把窗口切换到另外的文件等等,只要你掌握了其中之一,就有收获,而且是不小的收获。
今日内容回向:
1 VBA如何获得当前的地址,
2 VBA如何打开一个文件,
3 VBA如何关闭一个文件,
4 VBA如何把窗口切换到另外的文件
5 如何提高程序的可视性
6 如果不关闭上一个窗口,是否会影响到下面的操作?
分享成果,随喜正能量
- ?
利用了VBA神器,多工作表的大数据搜索,真的非常简单
席凝阳
展开
最近两周一直在讲解如何利用VBA,在EXCEL的多个工作表中进行大数据的查询。今天把两周的内容精炼总结一下,想利用这些程序的朋友,可以拷贝下面的代码,放在编译器中就可以直接使用啦。
1 Sub KK()
2 Sheets("SHEET1").Select
3 I = 2
4 Do WhileCells(I, 1) <>""
5 Cells(I,1).Select
6 TT =Cells(I, 1)
7 Cells(I, 2) = ""
8
9 SetFJX =Sheets("A").Range("A1:A"&Sheets("A").Range("A1").End(xlDown).Row).Find(TT,AFTER:=[A1],LOOKAT:=xlWhole)
10 If NotFJXIs Nothing Then Cells(I, 2) = Sheets("A").Cells(FJX.Row, 2)
11
12 SetFJX =Sheets("B").Range("A1:A" &Sheets("B").Range("A1").End(xlDown).Row).Find(TT,AFTER:=[A1],LOOKAT:=xlWhole)
13 If Not FJXIs Nothing Then Cells(I, 2) =Sheets("B").Cells(FJX.Row, 2)
14
15 SetFJX =Sheets("C").Range("A1:A"&Sheets("C").Range("A1").End(xlDown).Row).Find(TT, AFTER:=[A1], LOOKAT:=xlWhole)
16 If Not FJXIs Nothing Then Cells(I, 2) =Sheets("C").Cells(FJX.Row, 2)
17
18 Set FJX=Sheets("D").Range("A1:A" &Sheets("D").Range("A1").End(xlDown).Row).Find(TT,AFTER:=[A1],LOOKAT:=xlWhole)
19 If Not FJXIs Nothing Then Cells(I, 2) =Sheets("D").Cells(FJX.Row, 2)
20 I = I + 1
21 Set FJX =Nothing
22 Loop
23End Sub
代码截图:
工作表截图:注意名称
下面对代码进行逐行讲解:
1 Sub KK() ’KK给出程序的名称
2 Sheets("SHEET1").Select ’指选择sheet1的工作表,并进行操作
3 I = 2 ’是对变量i赋初始值,一般要用Dim i as Integer 进行声明。这里可以仅用Dim i, 也可以再简单点,直接用也行。但这不是说Vba是动态语言,相反,这恰恰说明了VBA作为静态语言的灵活性。
4 Do While Cells(I, 1) <> "" ’DOWHILE是一个循环,是循环的标识,回调语句是loop,WHILE跟循环条件,是指第i行第一个单元格不为空建立一个循环。 变量是i,条件是直到i行的第一个单元格是空值。
5 Cells(I, 1).Select ’要对第I行一个单元格定位,这也是为了程序具有可视性。
6 TT = Cells(I, 1) ’然后把它的值value取出赋給TT,这也是为了以后操作简单。这里TT也是直接用的,略去了声明语句。
7 Cells(I, 2) ="" ’要把第2个单元格清空,两个半角双引号,中间什么也没有就是空值,和空格不同,空格是" "。
8
9Set FJX=Sheets("A").Range("A1:A"&Sheets("A").Range("A1").End(xlDown).Row).Find(TT,AFTER:=[A1],LOOKAT:=xlWhole)
’SET是令FJX等于一个值,(这里也应先给FJX 事先声明此程序略去了),
sheets("A")是指名称为A的那个工作表;
Range("A1:A"& Sheets("A").Range("A1").End(xlDown).Row)是指从A1单元格开始向下直到最后一个不为空的单元格区域;
Sheets("A").Range("A1:A"& Sheets("A").Range("A1").End(xlDown).Row)是指A的工作表中在A1到最后一个不为空的单元格区域;
Find(TT,AFTER:=[A1], LOOKAT:=xlWhole)要查找值为TT的单元格,在A1的after后开始查询,是完全匹配,把区域和之后的操作间隔一个。
这样就把查找的结果赋给了FJX。
10 If Not FJXIs Nothing Then Cells(I, 2) = Sheets("A").Cells(FJX.Row, 2)
’if then 语句, 如果...那么......。查询的结果放在FJX,FJX is Nothing就是说没有查到结果。给它一个逻辑否定,就是前面加个NOT,其意思就是FJX不为Nothing 就是查到了,查到了怎么办?fjx.Row是指查到数据的行号。Sheets("A").Cells(FJX.Row,2)就是在A工作表查到的行号的第2个单元格的值,Cells(I, 2) = Sheets("A")。Cells(FJX.Row, 2)即第i行第2个单元格的值将等于工作表A中查到的行号的第2个单元格的值 Cells(I, 2) 是哪个工作表呢?指Sheets("SHEET1")。
11
12 SetFJX =Sheets("B").Range("A1:A"&Sheets("A").Range("A1").End(xlDown).Row).Find(TT,AFTER:=[A1],LOOKAT:=xlWhole)
13 If Not FJX Is Nothing Then Cells(I, 2)=Sheets("B").Cells(FJX.Row, 2)’这两行类似于第9第10行,是处理当在B工作表中继续查找的操作。当查到后会有第13行的操作,和第10行的操作一样,这里要注意:第一,xlwhole是指单元格完全匹配的查找。第二,连接字符串的符号是&,不可用加号,当用到.cells时前面要用With,现在还没有用到,以后会有。
14
15 SetFJX =Sheets("C").Range("A1:A"&Sheets("C").Range("A1").End(xlDown).Row).Find(TT, AFTER:=[A1], LOOKAT:=xlWhole)
16 If Not FJXIs Nothing Then Cells(I, 2) =Sheets("C").Cells(FJX.Row, 2)
’15行和16 行是在工作表“C”中进行的查找,也就是说:首先在工作表“A”中查找,然后就在“B”中查找,再次在"C"中查找。一旦查找到就执行将此行的第二个单元格的VALUE赋给 Sheets("SHEET1")的工作表的I行第二个单元格值,这样就实现了在多个工作表中的查询。
17
18 Set FJX=Sheets("D").Range("A1:A" &Sheets("D").Range("A1").End(xlDown).Row).Find(TT,AFTER:=[A1],LOOKAT:=xlWhole)
19If Not FJX Is Nothing Then Cells(I, 2)=Sheets("D").Cells(FJX.Row, 2)
’18行和19 行是执行工作表D的查找。回顾一下,从第9行开始直到第19行总共运行了4个工作表
20I = I + 1 ’I值增加1
2121 Set FJX = Nothing ’另FJX为空准备下轮的查找
22 Loop ’程序回调到第4行 DO WHILE
23 End Sub ’程序结束。
有兴趣的朋友可以试着使用一下,如果好用别忘了分享。如果有改进,别忘了晒晒代码。
分享成果,随喜正能量
- ?
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中插入一个模块,将代码写入进去,插入一个按纽,绑定代码,即可实现,绑定代码的操作过程如下所示:
好,你学会了吗?
给自己持续学习的态度点个赞吧!
欢迎留言讨论,期待您的转发分享!
-------------------------------
谢谢关注,更多精彩内容持续更新中....
- ?
Excel如何用VBA自动合并同目录下的多个excel工作簿文件
小回忆
展开
在excel的使用过程中,有时候我们需要将同目录下有着相同标题的多个excel工作簿合并到一个excel工作簿中,比如下面这种情况,5个年级的学生名单合并到一个表里面去。
常用的做法是手工打开每个文件,复制粘贴到学生名单汇总一个表里去。
这里介绍一个偷懒的方法,用VBA代码自动合并。代码分4段,第1段是主代码,后面3段是自定义函数。建议把代码复制粘贴到个人工作簿的模块里,方便调用。打开学生名单汇总.xlsx ALT+F8运行该代码。
以下是具体代码,复制粘贴
Sub 同目录下合并多个excel工作簿()
'On Error Resume Next '// 发生错误,自动执行下一句,就是忽略错误
Application.ScreenUpdating = False '//关闭屏幕刷新
Application.DisplayAlerts = False '//关闭系统提示
t = Timer '//开始时间
Set SH0 = ActiveWorkbook.Worksheets(1)
SH0.Cells.Clear '//清空保存区域,全部数据第一行是标题行,且只占一行,无合并单元格
ARR = FileAllArr(ActiveWorkbook.Path, "*.xlsx", ActiveWorkbook.Name, False) '//详见函数说明
SHName = "sheet1" '//要求所有工作簿内需要统计的工作表名称相同,
For i = 0 To UBound(ARR)
Str_coon = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ARR(i) '//Excel2007
' Str_coon = "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=yes';data source=" & & ARR(I) '//OFFICE2003,根据情况选择
StrSQL = "SELECT *,'" & GetPathFromFileName(ARR(i), False) & "' AS 来自工作簿 FROM [" & SHName & "$]" '//SQL语句自己发挥吧,这里是精髓。
IROW = SH0.Range("A1048576").End(3).Row + 1
If IROW <= 2 Then
IROW = 1
Crr = GET_SQLCoon(StrSQL, Str_coon, True) '//第一次,带上标题
Else
Crr = GET_SQLCoon(StrSQL, Str_coon, False)
End If
SH0.Range("A" & IROW).Resize(UBound(Crr, 1) + 1, UBound(Crr, 2) + 1) = Crr '//粘贴查询结果
Next
Application.ScreenUpdating = True '//恢复屏幕刷新
Application.DisplayAlerts = True '//恢复系统提示
MsgBox "汇总用时:" & Format(Timer - t, "#0.0000") & " 秒", , "北极狐提示!!" '//提示所用时间
End Sub
Rem 下面是为方便整理的自定义函数,上面的代码执行必不可少哟!!
'*******************************************************************************************************
'功能: 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
'函数名: FileAllArr
'参数1: Filename 需查找的文件夹名 不含最后的"\"
'参数2: FileFilter 需要过滤的文件名,可省略,默认为:[*.*]
'参数3: Liwai 剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name
'参数4: Files 是否只要文件夹名,可省略,默认为:FALSE
'返回值: 一个字符型的数组
'使用方法:arr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name,false)
'*******************************************************************************************************
Public Function FileAllArr(ByVal Filename As String, Optional ByVal FileFilter As String = "*.*", Optional ByVal Liwai As String = "", Optional ByVal Files As Boolean = False) As String()
Set Dic = CreateObject("Scripting.Dictionary") '创建一个字典对象
Set Did = CreateObject("Scripting.Dictionary")
Dic.Add (Filename & "\"), ""
i = 0
Do While i < Dic.Count
Ke = Dic.keys '开始遍历字典
MyName = Dir(Ke(i), vbDirectory) '查找目录
Do While MyName <>""
If MyName <> "." And MyName <> ".." Then
If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then '如果是次级目录
Dic.Add (Ke(i) & MyName & "\"), "" '就往字典中添加这个次级目录名作为一个条目
End If
End If
MyName = Dir '继续遍历寻找
Loop
i = i + 1
Loop
Dim arrx() As String
i = 0
If Files = True Then '//是否只输出文件夹名
For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例
ReDim Preserve arrx(i)
If Ke <> Filename & "\" Then '//自身文件夹除外
arrx(i) = Ke
i = i + 1
End If
Next
FileAllArr = arrx
Else
For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例
MyFileName = Dir(Ke & FileFilter) '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx
Do While MyFileName <>""
If MyFileName <> Liwai Then '排除例外文件
ReDim Preserve arrx(i)
arrx(i) = Ke & MyFileName
i = i + 1
End If
MyFileName = Dir
Loop
Next
FileAllArr = arrx
End If
End Function
'****************************************************************
'*'****************************************************************************************************
'函数: GetPathFromFileName 根据全路径获得文件名
'参数1:strFullPath 完整路径
'参数2:kzm true 返回字符串含扩展名
'参数3:strSplitor 各级文件夹分隔符
'作用: 从完整路径获取返回: 文件名(true带扩展名)
'使用方法: msgbox GetPathFromFileName("C:\windows\text.txt",true)
'*'****************************************************************************************************
Public Function GetPathFromFileName(ByVal strFullPath As String, Optional ByVal kzm As Boolean = True, Optional ByVal strSplitor As String = "\") As String
Dim FileName1 As String
Dim FNAME As String
FileName1 = Left$(strFullPath, InStrRev(strFullPath, strSplitor, , vbTextCompare))
FileName1 = Replace(strFullPath, FileName1, "")
If kzm = False Then
GetPathFromFileName = Left(FileName1, InStr(FileName1, ".") - 1)
Else
GetPathFromFileName = FileName1
End If
End Function
'*'****************************************************************************************************
'*****************************************************************************************
'函数名: GET_SQLCoon
'函数功能: 获得指定SQL的查询结果,自定义连接字符串,可以连接各种数据库
'返回值: 返回一个二维数组
'参数1: StrSQL 字符类型 SQL查询语句
'参数2: Str_coon 字符类型 数据库连接语句
'参数3: Biaoti 可参数选 是否输出标题,默认带有标题
'使用方法: Arr = GET_SQLCoon(StrSQL,Str_coon,true)
' Arr(0,1) '//数组第一行为标题行,从i=1 开始是数据
' Sh2.Range("A2").Resize(UBound(ARR, 1) + 1, UBound(ARR, 2) + 1) = ARR
'*****************************************************************************************
Public Function GET_SQLCoon(ByVal StrSQL As String, ByVal Str_coon As String, Optional Biaoti As Boolean = True) As Variant()
On Error Resume Next ' 改变错误处理的方式。
Dim Cn, RS
Err.Clear
Set Cn = CreateObject("Adodb.Connection") '//新建一个ADO连接
Set RS = CreateObject("adodb.recordset")
Cn.Open Str_coon
RS.Open StrSQL, Cn, 1, 3
If RS.RecordCount > 0 Then '//如果找到数据
If Biaoti = True Then
ReDim ARR(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)
For a = 0 To RS.Fields.Count - 1 '//导入标题
ARR(0, a) = RS.Fields(a).Name
Next
For i = 0 To RS.RecordCount - 1 '//导入数据
For a = 0 To RS.Fields.Count - 1
ARR(i + 1, a) = RS.Fields(a).Value
Next a
RS.MoveNext
Next
Else
ReDim ARR(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)
For i = 0 To RS.RecordCount - 1 '//导入数据
For a = 0 To RS.Fields.Count - 1
ARR(i, a) = RS.Fields(a).Value
Next a
RS.MoveNext
Next
End If
Else '//如果没有找到数据
ReDim ARR(1, 1)
ARR(0, 0) = ""
End If
GET_SQLCoon = ARR
Cn.Close '//关闭ADO连接
Set RS = Nothing
Set Cn = Nothing '//释放内存
End Function
'*****************************************************************************************
- ?
办公小技巧:如何用excel VBA实现批量筛选打印表格
幽冥
展开
办公人员每天都要跟电脑打交道,用的最多的软件是office。其中word用的最为广泛,公文打印必不可少,ppt会议演示用的最多,excel表格财务部门必备。
这里要说的是excel最常用的操作,筛选打印表格。
举个例子,根据姓名打印每个学生的成绩
正常的操作步骤是:
1、用excel打开表格,点击数据筛选,在姓名字段选择名字打印
excel实现批量筛选打印
2、根据不同姓名重复上面的筛选打印步骤。
对于上面的操作步骤,在姓名数量不多的情况下,是简洁快速的。如果学生数量达到成千上百,再用这种手工方式来筛选打印很费时费力。
这里介绍个小技巧,用excel自带的VBA来实现批量筛选打印,可以达到事半功倍的效果。
1、用excel打开表格,在G列把所有的姓名填好,注意不要有重复的。
excel实现批量筛选打印
2、按alt+F11打开VBA工程界面,在工程界面新建模块,然后在代码区域输入下面的代码:
excel vba实现批量筛选打印
保存后,按F5运行,注意在这之前要先把打印机设置好。
用excel实现批量筛选打印,有多种方法,这里介绍了一种用vba代码实现的方法,自由度比较高。
- ?
excel的宏怎么调用,怎么运用?
弗兰克
展开
因为我们一般也不用,所以在excel中宏这个功能一般也不显示出来,我们先把它给显示出来,打开一个excel,点击左上角的文件,在文件中找到选项,我们点击选项,找到自定义功能区,并且找到开发工具把它添加到主选项卡中,把开发工具前面的对勾选项。
最后我们点击确定回到excel中的主界面就会在最上面的菜单栏中看见开发工具,在里面也可以找到宏的相关功能键,那么宏有什么用呢,主要是处理一些重复性的动作时非常方便,如我们在数据1到13的每一行后面都添加一行,有人说我们一行一行的插不行么,但是这样太费劲了如果有成千上万的数据怎么办
我们用宏来解决这个问题,首先我们选中1所在的行,然后点击开发工具中的录制宏,然后我们点击鼠标右键选择在1的下上边插入一行,接着我们同样的找到宏,点击停止录入,然后查看宏就可以找见我们刚才所录入的。
接着我们点击最上面的插入,插入一个形状,在形状效果中把它做成一个按钮的效果展示,我们鼠标右键放在鼠标上,然后点击鼠标的右键再出现的类表中选择指定宏,就会出现让你选择录入还是我们之前已经录好的我们选择录好的,然后我们选中2行,点击一下这个形状按钮,就会发现自动插入了一行,你点击两下就会插入两行,这就变得非常方便了。
- ?
宏如何使用?--excel的学习
Idonia
展开
如果你已经用excel很长时间了,那么您一定听过宏这个名称,很多人都不知道宏是用来干什么的,今天我们就来了解一下excel中宏的作用与帮助,如果您经常在excel中重复一个任务,那就可以用宏来自动执行该任务了。
宏是一系列命令和函数,存储于 Visual Basic 模块中,并且在需要执行该项任务时可随时运行。例如,如果经常在单元格中输入长文本字符串,则可以创建一个宏来将单元格格式设置为文本可自动换行。录制宏 在录制宏时,Excel 在您执行一系列命令时存储该过程的每一步信息。然后即可运行宏来重复所录制的过程或“回放”这些命令。如果在录制宏时出错,所做的修改也会被录制下来。Visual Basic 在附属于某工作薄的新模块中存储每个宏。使宏易于运行 可以在“宏”对话框的列表中选择所需的宏并运行宏。如果希望通过单击特定按钮或按下特定组合键来运行宏,可将宏指定给某个工具栏按钮、键盘快捷键或工作表中的图形对象。
管理宏 宏录制完后,可用 Visual Basic 编辑器查看宏代码以进行改错或更改宏的功能。例如,如果希望用于文本换行的宏还可以将文本变为粗体,则可以再录制另一个将单元格文本变为粗体的宏,然后将其中的指令复制到用于文本换行的宏中。“Visual Basic 编辑器”是一个为初学者设计的编写和编辑宏代码的程序,而且提供了很多联机帮助。不必学习如何编程或如何用 Visual Basic 语言来对宏进行简单的修改。利用“Visual Basic 编辑器”,您可以编辑宏、在模块间复制宏、在不同工作簿之间复制宏、重命名存储宏的模块或重命名宏。
虽然很多人使用excel宏,在excel中宏安全性 Excel 对可通过宏传播的病毒提供安全保护。如果您与其他人共享宏,则可使用数字签名来验证其他用户,这样就可保证其他用户为可靠来源。无论何时打开包含宏的工作簿,都可以先验证宏的来源再启用宏。
- ?
太实用了!Excel VBA常用代码!
Gui
展开
前两天有两位朋友留言想收集一些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的知识,欢迎大家留言、讨论!
- ?
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怎么用
-
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、快速多表合并