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

    运用VBA中Interior.ColorIndex方法,打造五彩缤纷的EXCEL

    孤城

    展开

    在EXCEL的操作中经常会用到颜色的提示,如何会实现自动显示颜色呢,可不可以实现呢?当然可以,在VBA界中,有着颜色的对照表,如图一所示,这个值是通过单元格的Interior.ColorIndex属性来实现的。值和显示的颜色是一一对应的,如4就是那种绿色,5就是那种蓝色等等

    图1

    下面就讲解在EXCEL中如何通过VBA来实颜色显示的自动控制。

    步骤1:在ECCEL中,点击“ALT+F11”进入宏编辑界面,点插入》》模块,进入宏编辑界面:

    录入代码:

    Sub YS()

    Sheets("SHEET1").Select

    For i = 1 To 3

    For t = 1 To 19

    Cells(t, i).Select

    Cells(t, i).Interior.ColorIndex = 19 * (i - 1) + t - 1

    Next

    Next

    MsgBox ("ok!")

    End Sub

    下面是代码录入后的截图:

    T2

    步骤2 在工作表sheet1中,画个圆,右键连上上面的”YS”宏:

    T3

    步骤3. 点击圆按钮,查看效果:

    T4

    非常的漂亮,和图1一样,这就是VBA中利用Interior.ColorIndex方法的简单介绍,实际工作中还有很灵活的用法,如当单元格出现负值时显示什么颜色,都可以参考上述的代码和颜色值。

    分享成果,随喜正能量。

  • ?

    如果你是学习Excel的朋友,对VBA这个应该概念不陌生吧?

    刘紫夏

    展开

    我们应该都知道Excel VBA的功能比较强大,但是对于刚开始学习的我们来说,面对那一串串英文代码,你是不是看得头昏脑胀?想去学习,然和茫然久久不能找不到学习入口?

    在这里,和大家分享自己的学习经验,和大家一起学习,共同进步。对了,还要告诉大家,我也是初学者,不是高手,如果有什么说得不对的,希望大家及时指出。我的目的并不是教学,而是期望创造一个学习Excel VBA的氛围! 记住一个共同的目标——掀开那层神秘的面纱,看看VBA的真实面目。

    首先我们要学习什么是VBA?就的先去了解他的真实面貌,VBA是Visual Basic For Application的简称,具体说来,可能让几天几夜也都说不完,你应该也知道VBA是建立在Office中的一种应用程序开发工具,其实知道这也就够了。

    Excel本身的内置函数其实已经很强大了,甚至有人说,只要学会二三十个函数,就已经可以满足普通用户日常的工作需求。那我们为什么要学VBA?

    是的,如果只需要满足一些普通的工作需求可能永远也不会用到VBA,但在实际应用的过程中,人们的操作却越来越大,需要也越来越高,这时候就需要用VBA来对Excel进行二次开发了,VBA可以有效地自定义和扩展Excel的功能。但有一点想要告诉大家,VBA功能很强大,但并不是万能的,也并不是所有工作都需要用VBA来解决,也并不是所有工作用VBA来解决都会很简单,这要根据实际情况而定,有些工作你用VBA来解决的话相反会变得很麻烦。

    换一种语言表达出来说VBA不是一种程序语言吧, 不公平, 它的确提供了程序语言能完成的功能; 说它是吧, 和现代程序语言相比功能又很不完整。说它不是面向对象的语言吧, 它有类模块, 提供部分类的功能; 说它是面向对象的吧, 类的最只要的特点又不具备。当然了,这些主要都是从VB6继承过来 的"遗传病"。所以通常的结论:"基于对象, 但非面向对象"。MS早就停止VB6的升级了, MS对VB6的放弃直接导致了VBA的功能不会在本质上变得更加强大, 但未尝不是一件好事,作为使用者不用整天跟着屁股后面学习新的功能。事物发展就是这样的,在解决了一个问题的同时又带来另一个新问题。

    设计VBA就是面向"终级用户"类似于数据透视表的"office 高级应用工具", 以脚本的形式存在, 用来达到"自动化驱动office来完成规律性, 重复性任务"的目的。严格来讲VBA不是为了"开发"而是为了"应用", 并不是说完全做不到二次开发, 但和 MS 设计 VBA 的本意不相符甚至是背离。更加不是"无所不能"的程序语言,有太多的事是 VBA 实现不了的,严格来说它都不是一种程序开发语言,只能算作脚本。他和API函数结合可以做到,很多VBA不能完成的事情。

    PS:API函数当然有用,开发图形库必须用它!

    我们下面说说VBA的优缺点:

    1:作为程序语言和其他开发语言比较,VBA的特点:

    (1)"天然"强大的输入输出平台,Excel的控件功能非常强大

    (2)使用便捷,无需搭建任何环境,随时可以用,无需保存,编译,即可运行;代码数据一体化(同时也是"缺点"),发布简单,无需运行环境。

    (3)简单易懂,门槛低,学习周期短

    2:VBA的"缺点"

    (1)不好封装

    (2)需要宿主解释器的解析,所以速度慢

    (3)安全性差

    (4)无法提供面向对象的结构式编程方式

    (5)单线程

    PS:上述"缺点"基本上是脚本语言具有普遍性的"通病",显然VBA就不是针对完成上述功能而设计的。VBA最大的缺点明明就是不能在windows以外的平台使用,像Mac上的Excel,虽然有vba,但是基本只能发挥30%不到的功能,字典这种需要调用windows系统里面功能的东西就没法用了,包括正则表达式,调数据库、fso文件之类的东东。

    新手学习的几点建议

    1:调试 地方窗口,立即窗口,观察窗口,F1(帮助),F2(属性方法),F8(分步执行)途中诊断:断点,stop等等。

    2:分拆 语句分拆长而难懂的句子分拆成基本单元,利用调试功能一个个解决,很容易就理解了它的含义。

    3:耐心 学习目的明确≠急于求成。学习的进程总是遵循渐进式的规律,跳跃式的一夜暴富只能是空中楼阁,所以耐心在学习过程中就显得尤为重要。

    我们每次如果要开始写程序,首先先想下正常处理数据的过程,然后在转换成vba数据处理的过程,仅此而已。每次用到的Excel VBA无非就是以下几种方法:

    (1)对象的使用方法,当我不知道代码怎么去写的时候,我们知道录制宏就可以,然后可以调用Excel内置应用;

    (2)程序语法类:循环,判断,字符串,文件操作等;

    (3)数据处理的方式,数组,字典

    (4)界面,系统等等;这个用的比较少。

    (5)类模块;

    学会了循环,判断,字典,能应用到日常工作中,将繁琐重复的部分交给电脑,就没继续深入研究了,因为够用就好学以致用最重要,会的再多用不到也是白搭,一个人精力有限不可能所有东西都学会。

    另外需要说的一点是,其实VBA效率不算高,复杂程度不算低,总体给人感觉一般。但是任何一个工具只要熟练了,那就是你最好的工具。相信,实践,理解,这可谓是工具认知的一条康庄大道。

    我们学习Excel VBA的内容充其量内容就这么多了, 学习VBA是可以有止境的, 差不多的时候是完全可以收手的, 就算这些内容也完全不用全部学会, 够用就可以收手。写这个程序,其实最主要的是思考如何用程序语言去完成,因为VBA其实操作方法和语句不多,知道如何操作了,就知道如何去写代码。另外送一句话给我们的初学者,看书上的代码再多,再简单,也要自己尝试去写。我们不怕遇到错误,就怕你不敢去迈出那一步。只要你迈出了前进的那一步,你坚持下去了,就会发现胜利终究会属于你的。

    用一句话来总结:"程序的本质是用机器来解放劳动力,而不是用劳动力解放机器!"

    唯有不断学习,才能不被淘汰!

  • ?

    python操作Excel,相比VBA你更喜欢哪个

    房依秋

    展开

    大家都知道在excel中用VBA代码可以解决很多批处理操作问题,因为VBA是excel原生脚本语言,所以在便利性上有着得天独厚的优势,只要你电脑有excel,那么就可以立刻使用这个VBA脚本代码来解决问题。其实除了vba还有很多脚本语言可以来操作excel,比如python脚本。

    python跟vba一样都是脚本类语言,只不过python的用途更广些,而且代码好看些。由于是独立的程序,需要单独安装,这个有些麻烦,除此之外,如果你掌握好了相关的知识之后完全可以用他来任意处理excel文档。

    下面说一下在windows系统上,如何使用python来连接操作excel文档。

    首先要从python官网下载python主程序,安装好后,然后下载连接excel的接口模块程序pywin32,进行安装,2个步骤完成之后,就可以打开python shell界面,进行代码输入了。我这里使用的python版本是2.7,这个看自己的习惯喜好了。

    python excel

    小实例:在d盘的test.xls文档单元格A1中输入内容

    >>> import win32com.client #加载pywin32模块

    >>> xl=win32com.client.Dispatch("Excel.Application") #建立连接EXCEL程序的对象xl

    >>> book=xl.Workbooks.Open("d:\\test.xls") #用xl打开d盘下的test.xls工作簿

    >>> book.worksheets(1).cells(1,1).Value="输入的内容" #在工作簿的第一个表格第一个单元格输入内容

    >>> book.Save() #保存工作簿

    >>> book.Close() #关闭工作簿

    python excel

    请点击此处输入图片描述

    一步一步运行完之后(当然也可以保存成脚本文件运行),用鼠标打开d盘下的test.xls文件,就可以看到刚刚输入的内容了。

    python excel

    请点击此处输入图片描述

  • ?

    其实我想说,Excel VBA学习的最快方法就是借鉴,没有之一

    韩荠

    展开

    如果您已经掌握了Excel VBA的基本概念和简单语法,需要快速提高技术水平,以便可以早日完成各种简化工作的小程序,甚至能够编制功能强大的报表系统。

    于是,但凡有教程自称为“秘籍”或“宝典”的,都会引发大家的无限遐想。因为在各种武侠小说中,某人物因为一本(甚至只是几页)武学秘籍而改变命运、屌丝逆袭的经典桥段实在太多了,让人无限向往。但是,如果冷静分析一下前后情节,您就可以了解到这样的三个事实。

    对应这三条,我们来看看Excel VBA这门武功如何。

    如果要对Sheet1的A1:A100单元格区域进行汇总,按组合键就可以了,手快只需要0.1秒。如果每天要对1000个工作簿的Sheet1的A1:A100单元格区域进行汇总,那么只会自动求和的绝顶高手就想跳楼了。可是对于学习过VBA的人来说,几行代码就可以解决问题。

    在信息时代,技能学习信息只有过剩没有限制。即对于多数学科、技能,只要你想学习,教材是永远不缺的,老师也非常容易找。以前都是“收徒弟”,现在基本上是“收师傅”了。

    想学有所成,时间和精力是必需的,从古至今皆如此。当然,我很期待有一天能像《骇客帝国》里那样学习技能——直接下载到大脑里就行了。

    这么一分析,我刚才说的“快速提高”岂非奢望而已?那也未见得。首先,教材虽多,却有良莠之分,有适合之分,选择适合自己的优秀教材,那么就能快人一步。其次,注重学习方法,循序渐进,将有限的学习时间投入到最有价值的学习环节中,学习过程中少走弯路,那么又能快人一步。有了这两个基础,再辅以必要的学习时间,那么必能事半功倍,获得“快速提高”了。

    谈到循序渐进,在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代码你可以写出来,可是你真的会优化代码吗?

    怜阳

    展开

    我们很多时候在用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,在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代码一键合并多个工作表至总表!

    Sam

    展开

    转载自百家号作者: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界面的小技巧

    流逝

    展开

    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窗口。

  • ?

    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

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

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

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP