中企动力 > 商学院 > excel表格vba
  • ?

    Excel小技巧:使用VBA代码,5秒钟搞定合并N张工作表(内附代码)

    符泽洋

    展开

    经常我们在做统计的时候,需要把一个EXCEL工作薄中的几张结构相同的工作表合并在一起,然后需要合并到一个工作表中数据分析;

    其实如果工作表数量少的话,还可以复制粘贴就可以了,当有数据量较大,或者是你经常要做这项工作的时候,复制粘贴就显得比较繁琐;

    Excel功能超强大,要把不同工作表合并在一起,方法很多,我们这里介绍的是使用VBA的,就5秒钟就搞定;

    请继续往往下看:

    原始数据如图: 有四个工作表,结构是一样的,另外新建了一个工作表,作为汇总用;

    原始数据

    在合并汇总工作表标签上面,点右键,然后选择 查看代码

    第一步

    把代码粘贴进去,然后点上面的,运行按钮,就搞定了;

    PS:合并完成了,会弹出一个提示对话框,你点确定即可;

    第二步

    附代码:

    Sub 合并当前工作簿下的所有工作表()Application.ScreenUpdating = FalseFor j = 1 To Sheets.CountIf Sheets(j).Name <> ActiveSheet.Name ThenX = Range("A65536").End(xlUp).Row + 1Sheets(j).UsedRange.Copy Cells(X, 1)End IfNextRange("B1").SelectApplication.ScreenUpdating = TrueMsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示"End Sub

  • ?

    excel办公小技巧:vba使用sql语句获取excel表格数据教程

    阮青筠

    展开

    在excel办公中,用VBA加上SQL语句实现对excel表格的数据获取,对于处理一些大数据量的表格来说是非常实用的。SQL是结构化查询语言,是数据库开发中用的程序设计语言,数据库里的数据表跟EXCEL里的表格其实是很类似的,所以用VBA加SQL语句可以实现类似的表格查询操作。

    举个例子:在EXCEL里用VBA+SQL来查询总成绩大于290分的学生

    一、手工操作的步骤是:

    1、 EXCEL打开如下表格,点击插入-数据透视图,点击创建数据透视图

    2、 在出现的数据透视图界面,点击姓名为行标签,点击成绩为求和项字段

    3、 在左侧的出现的行标签和求和项表格数据进行排序,手工选出成绩大于290分的记录。

    用上面的数据透视图方法很方便,步骤也少,比分类汇总功能要简便些。

    二、VBA加上SQL语句实现EXCEL表格数据的查询

    1、 先用EXCEL打开表格,调出VBE工程界面(ALT+F11),建议在个人工作簿新建个模块,把代码输入到右侧的区域。注:用个人工作簿的好处是,每次启动EXCEL不用手动启用宏。

    2、 根据自己的表格字段和功能需求,修改好SQL代码后,保存按F5快捷键运行。注:SQL语句中表名要用[表名$]这种写法。

    以上是在EXCEL用VBA加SQL语句实现对表格的自动查询,调用的方法是按ALT+F8,选择相应的代码名称,这里的名称是SQL查询。用这种方法对于规则不经常变动的情况下使用很实用,特别是在数据量大的情况下。

    附上截图代码

    Sub SQL查询()

    Dim cnn As Object, rs As Object, SQL As String

    Set cnn = CreateObject("adodb.connection") '创建数据库连接

    cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName

    Set rs = CreateObject("adodb.recordset") '创建一个数据集

    SQL = "select 姓名,sum(成绩) from [原始数据$] group by 姓名 HAVING sum(成绩)>290" '设置SQL查询语句,这个根据实际需要改写,注意【表名$】这种写法

    Set rs = cnn.Execute(SQL) '执行查询

    ActiveWorkbook.Worksheets(2).Cells.ClearContents

    Dim i As Integer

    For i = 1 To rs.Fields.Count

    ActiveWorkbook.Worksheets(2).Cells(1, i) = rs.Fields(i - 1).Name '填写标题到表2

    Next

    ActiveWorkbook.Worksheets(2).Range("a2").CopyFromRecordset rs '复制记录集到表2

    rs.Close

    Set rs = Nothing

    cnn.Close

    Set cnn = Nothing

    End Sub

    对于EXCEL2007版本的电子表格,以上的cnn.Open后的字符串要改成"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"""

  • ?

    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实现批量筛选打印表格

    窦紫槐

    展开

    办公人员每天都要跟电脑打交道,用的最多的软件是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提示“不同的单元格格式太多”的苦果,利用VBA彻底解决!

    纪怜容

    展开

    今日也是应读者的需求利用VBA解决实际问题。学而不用则殆!学习了新的知识就是要不断的利用,提升,再利用再提升。所以要给这位提问题的朋友点赞!

    有的读者问:如何利用VBA来解决Excel提示不同的单元格格式太多的问题呢?

    首先,我们先分析一下这个情况是什么时候发生,一般有几种情况会发生这类问题。

    1复制粘贴时,这时会提示单元格格式太多,无法粘贴,而且要经过长时间的不知在做什么的处理过程,然后,EXCEL崩溃。你只能重启。

    2在移动工作表时,将工作表整体从一个文件转移到另一个工作表时,也会出现这个问题,现象和上述一样。

    3 在筛选数据时,有时候,在筛选一个值时,往往会出现上述的提示,当你按确认键后,EXCEL会再次计算,好在不会崩溃,只是时间非常长,这种情况往往出现在这个工作表的数据量巨大,往往是1万行以上的数据。

    然后,我们分析一下上述问题产生的原因。其实这类问题的产生不是用户的错,而是OFFICE系统,或者说,EXCEL从03版升级到07版之后,带给用户的 一个遗留问题,他们潇洒的升级完了,但留下了一堆苦果让用户去慢慢品尝。为什么这么说呢?一点也不过分!03版和07版不兼容就是罪魁祸首。在07版加入了很多全新的内容,这些在03版及低版本无法显示,才出现了上述的问题。

    所以,当你用07版本打开03版本;或者03版打开07版本(有兼容包);或者是往03版本拷贝07版本数据;或者是往07版本拷贝入03版本数据时,极易发生上述问题。如果一个工作表的数据既有03版本的又有07版本的,那么你非常的不走运,在你筛选时,很可能就是这个苦果。

    问题的原因分析完了,那么怎么解决呢?

    办法一:在工作表中刷格式,采用一个格式全部的刷一遍,但也不能很好的解决问题。

    办法二:新建一个工作表,把原数据数值粘贴到新的工作表中,原来的格式全然没有了。

    办法三:就是今天我们重点讲的VBA方法:

    拷入下面的代码:

    Sub KK()

    2 Dim s As Style

    3 Application.ScreenUpdating = False

    4 On Error Resume Next

    5 For Each s In ThisWorkbook.Styles

    6 If Not s.BuiltIn Then s.Delete

    7 Next

    8 Application.ScreenUpdating = True

    9 MsgBox ("OK")

    10 End Sub

    很简单的几行代码,往往能解决很大的问题。代码讲解:

    (1)Application.ScreenUpdating = False

    Application.ScreenUpdating = True

    上述语句是成对出现的,前者是关闭屏幕更新,以提高程序的效率;后者是打开屏幕刷新,

    (2)On Error Resume Next

    忽略错误,继续执行

    (3)第五行和第七行构成了一个FOR NEXT语句,此语句在之前的文章中讲过,不过这里用的是For Each s In ThisWorkbook.Styles,翻译过来就是说对于这个工作表中所有的格式将进行的操作,什么操作呢?就是:

    If Not s.BuiltIn Then s.Delete 执行到这里,所有的自定义格式全部被删除掉了。

    (4)最后全部执行完成弹出对话框:MsgBox ("OK")

    看我们的代码截图:

    剩余的工作就是,画个按钮,连锁上述代码,就可以了,经测试,这个方法还是可行的,如有遇到这个问题的读者可以试试看啊。

    今日技巧提示:

    1 Application.ScreenUpdating = False;Application.ScreenUpdating = True

    的作用是什么?能否单独出现?

    2. On Error Resume Next 作用是什么?

    3,For each next 语句是否理解呢?

    分享成果,随喜正能量

  • ?

    Excel2010三种快速打开VBA界面的小技巧

    萧书桃

    展开

    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每个工作表第一列建立目录索引

    祝之卉

    展开

    建立目录每个工作表都有,代码如下:

    Sub 生成目录链接2()

    Dim i As Long

    For i = 1 To Sheets.Count

    Sheets(i).Columns(1).Clear

    Sheets(i).Hyperlinks.Add Anchor:=Cells(i, 1), Address:="", SubAddress:=Sheets(i).Name & "!A1", TextToDisplay:=Sheets(i).Name

    Next

    For j = 1 To Sheets.Count - 1

    Sheets(j).Columns(1).Copy Sheets(j + 1).Cells(1, 1)

    For k = 1 To Sheets.Count

    Sheets(k).Cells(1, 1).Font.Color = 255

    ActiveWindow.Zoom = 100 '工作表串口视图100%,防止相同的字号大小看起来不一样大

    Columns.AutoFit '每个工作表中的列根据输入的内容自动调整列宽

    Rows.AutoFit '每个工作表中的列根据输入的内容自动调整行高

    ThisWorkbook.Save

    End Sub

  • ?

    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

  • ?

    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常用代码!

    Noya

    展开

    前两天有两位朋友留言想收集一些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的知识,欢迎大家留言、讨论!

excel表格vba

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP