
ExcelVBA
Victor__Zhang
不念过去,不畏将来-brave
展开
-
Excel柱形图和折线图分别作图
遇到Excel里可能有时的图片需要柱形图,折线图等各种图的汇和使用,该问主要讲述该过程以及次坐标的设定1.作图数据Year GP replacement 2018 505564.7 13 2019 1093698 23 2020 1120592 23.2 2.先总体做出柱形图实际该数据有两组数据,第二组Replacment 数值过小所以无法看出来3.对第二组使用折线图,同时使用次坐标轴在图上右键,选择设置图标格式..原创 2021-01-18 10:44:43 · 1115 阅读 · 0 评论 -
Excel作图过程的对比分析作图及图表系列名称更改
在平时工作或者学习过程中经常可能需要用到Excel作图的功能,很多具体作图的功能都可以现学现用或者需要的时候再学习如何使用。对于两组数据对比的分析作图:以该图为例 图1一.准备数据 图2该数据可以看出是两组不同的采集频率的数据源,意味着他们的时间间隔不一致。二.作图作图的思想类似...原创 2020-11-20 13:36:17 · 1482 阅读 · 0 评论 -
ExcelVBA总结
使用Excel VBA总结:ExcelVBA主要通过coding来实现Excel的具体工作,具体技巧。1:合理使用marco 记录命令,该命令适合对相应的sheets内容的操作进行宏记录,可以根据相应的记录功能的代码,来作为一个module 模块2:通过把需要进行的最终完成的任务分为多个子任务3.每个子任务转换为相应的module来实现4.设立一个主任务,其他的任务设为module或function,可以在主过程中进行调用,使用Call命令,其中对于子过程需要调用子过程名,而对于函数,通原创 2020-06-09 09:34:37 · 421 阅读 · 0 评论 -
Excel VBA 之从顺序文件读取字符
假设你的程序需要检查文件里出现了多少个冒号,你可以使用函数Input来返回特定的字符数,而不必读取整行。接下来,If语句用来比较获取的字符和你寻找的字符。在写过程之前,我们来看看函数Input的语法:Input(number, [#]filenumber)Input函数的两个参数都是必须的,number明确你要读取的字符数,而filenumber是Open语句用来打开文件的同一个数字。Input函数返回所有读取的字符,包括逗号,回车,文件结束字符,引号和前导空格。Sub Colons()Di原创 2020-06-08 13:35:53 · 570 阅读 · 0 评论 -
ExcelVBA之使用顺序文件
使用顺序文件电脑硬盘上有成百上千的顺序文件。参数文件,错误日志,HTML文件以及所有类型的无格式文本文件都是顺序文件。这些文件以字母顺序在硬盘上储存。新文本行的开始以两个专门的字符表示,一个叫做carriage return (回车),另一个叫line feed(换行)。当你使用顺序文件时,你从文件的开头始,一个字符一个字符的向前移动,一行接一行,直到文件的结尾。顺序文件容易打开和操作,任何文本编辑器都可以。技巧:什么是顺序文件?顺序文件就是访问它里面的记录时必须按它占据的顺序进行的文件,这意味原创 2020-06-08 11:59:41 · 726 阅读 · 0 评论 -
ExcelVBA之读取文件及文件访问类型
我们知道使用VBA打开一个电子表格指令,例如指令:Application.Workbooks.Open Filename:= "C:\Excel\Report.xls"打开位于文件夹C:\Excel里面的文件Report.xls。除了使用专门的应用程序打开文件之外,你如果也想要创建VBA过程能够打开其它类型的文件并使用它们的内容的话,你就应该学习一些关于被称为低级别的文件I/O(input/output)。接下来关于顺序,随机和二进制文件的章节将会带你直接接触你的数据。文件的访问类型计算机原创 2020-06-08 11:33:26 · 2178 阅读 · 0 评论 -
ExcelVBA之删除文件步骤
要从文件夹里面删除文件的话,可以使用下面的Kill语句:Kill 文件路径名文件路径名明确一个或多个你要删除的文件的名称,随你意,也可以将驱动器和文件夹名称包括在里面。你可以在文件路径名参数里使用通配符(*或?)来确保快速删除文件。你不能删除开启的文件。Sub RemoveMe()Dim folder As StringDim myFile As String'assign the name of folder to the folder variable'notice the .原创 2020-06-08 11:25:01 · 4225 阅读 · 0 评论 -
ExcelVBA之复制文件
使用FileCopy语句,可以在文件夹之间复制文件:FileCopy 来源, 目的地该语句的第一个参数是文件来源,明确你要复制的文件名称,该名称可以包含驱动名称。第二个参数是复制的目的地,可以包括驱动和文件夹的地址。两个参数都是必须的。假设你要将用户确定的一个文件复制到一个叫做“C:\try”的文件夹,下面的过程示范如何完成它:Sub CopyToAbort()Dim folder As StringDim source As StringDim dest As StringDim ms原创 2020-06-08 11:14:34 · 2768 阅读 · 0 评论 -
ExcelVBA之创建和删除文件夹
依照下面的MkDir语句语法,你可以创建一个新文件夹:MkDir PathPath明确你要创建的新文件夹名称。如果你没有写驱动器的名称的话,VB就将在当前的驱动上创建新文件夹。现在,我们来看几个例子:1. 在立即窗口里输入指令,在C盘上创建一个叫“try”的文件夹:MkDir "C:\try"2. 将缺省文件夹更改为"C:\try":ChDir"C:\try"3. 获取当前文件夹名称:?CurDir结果如下:使用RmDir函数来删除不需要的文件夹。该函数的语法如下:原创 2020-06-08 10:55:20 · 1564 阅读 · 0 评论 -
ExcelVBA之更改文件路径
更改缺省文件夹或驱动器(ChDir 语句和ChDrive语句):使用ChDir语句,你可以轻易更改缺省文件夹,例如:ChDir Path在上面的语句中,Path是新的缺省文件夹名称。Path可以包含驱动器名称。如果Path没有包括驱动名称,那么缺省文件夹将会更改为当前驱动。当前驱动不变。假设缺省文件夹为“C:\DOS”,语句:ChDir "D:\MyFiles"将缺省文件夹更改为“D:\MyFiles”,然而,当前驱动仍然是C盘。要更改当前驱动的话,你就应该使用ChDrive语..原创 2020-06-08 10:43:29 · 2450 阅读 · 0 评论 -
ExcelVBA之文件属性
文件和文件夹具有类似“只读”,“隐藏”,“系统”和“档案”的特点。这些特点就是属性。可以使用GetAttr函数来获得文件或文件夹的属性。该函数的唯一参数就是文件或文件夹路径名:GetAttr(文件路径名)GetAttr函数的相反函数是SetAttr函数,它允许你设置一个文件或文件夹的属性。语法如下:SetAttr 文件路径名, 属性文件路径名确定你要设置的文件或文件夹,第二个参数,属性,是一个或多个你要设置的属性常量。SetAttr "D:\stamps.txt", vbReadOnly +原创 2020-06-08 10:36:07 · 1018 阅读 · 0 评论 -
Excel VBA 之获取文件大小
如果你需要检查某文件是否能够存在某磁盘上,那么你应该按照下述方式使用FileLen函数:FileLen(文件路径名)FileLen函数一字节方式返回文件的大小。如果该文件已打开,那么VB将返回该文件最后一个保存时的大小。假设你想要获取Windows目录下进行配置设置的所有文件的总大小,代码如下:Sub TotalBytesIni()Dim iniFile As StringDim allBytes As LonginiFile = Dir("C:\WINDOWS\*.ini")all原创 2020-06-08 10:08:05 · 6139 阅读 · 0 评论 -
ExcelVBA之获取D盘文件列表
过程GetFiles获取D盘根目录下的所有文件名并且将每个文件名写入工作表:Sub GetFiles()Dim nfile As StringDim nextRow As IntegernextRow = 1'next row indexWith Worksheets("Sheet1").Range("A1")nfile = Dir("D:\", vbNormal).Value = nfileDo While nfile <> ""nfile = Dir.Offset(原创 2020-06-08 10:00:44 · 621 阅读 · 0 评论 -
检查文件或文件夹是否存在(Dir 函数)
Dir函数,返回文件或者文件夹名称,语法如下:Dir[(pathname[, attributes])]Dir函数的两个参数都是可选的,pathname是文件或文件夹名称,对于参数attributes,你可以下列常量或者数值之一:Dir函数常用来检查某个文件或文件夹是否存在,如果不存在,那么就返回空字符串(””)。我们到立即窗口:?Dir("C:\", vbNormal)函数Dir允许你在文件路径名中使用通配符——星号(*)代表多个字符,问号(?)代表单个字符:例如,要在..原创 2020-06-07 03:48:39 · 1812 阅读 · 0 评论 -
ExcelVBA之数组错误
使用数组时,出错是很容易的。如果你试图给数组赋予比声明数组时更多的成员的话,VBA就会显示错误信息“下标越界”。另外一个使用数组时经常碰到的错误是类型不匹配。要避免这类错误,就要牢记一个数组的每个成员都必须具有相同的数据类型。如果你试图给数组成员赋予和数组声明的数据类型矛盾的数据的话,你就将在执行代码时收到“类型不匹配”的错误。要让一个数组出错不同类型的数据类型的话,你就得声明数组为Variant类型。数组作为参数:在子过程或者函数过程之间作为必须或者可选参数传递。如果传递的参数不是过程执行原创 2020-06-07 01:55:13 · 1420 阅读 · 0 评论 -
ExcelVBA 之列表
Array函数将列标输入到工作表里:Sub ColumnHeads()Dim heading As VariantDim cell As RangeDim i As Integeri = 0heading = Array("First Name", "Last Name", "Position", _"Salary")Workbooks.AddFor Each cell In Range("A1:D1")cell.Formula = heading(i)i = i + 1Next原创 2020-06-07 01:41:36 · 3699 阅读 · 0 评论 -
ExcelVBA之静态和动态数组
静态数组是具有确定大小的数组。当你事先知道数组的大小时使用静态数组。静态数组的大小是在数组的声明语句里确定的,例如,语句DimFruits(10)AsString声明了一个由10个成员组成的叫做Fruits的静态数组。动态数组是大小可以改变的数组。如果数组的大小每次都由程序运行而决定的话,就使用动态数组。Sub DynArray( )Dim counter As Integer'declare a dynamic arrayDim myArray( ) As Integer'specify原创 2020-06-07 00:44:40 · 1509 阅读 · 0 评论 -
ExcelVBA之二维数组的应用
下面的过程产生一个二维数组,储存国家名称,货币名称和交换汇率。Sub Exchange()Dim t As StringDim r As StringDim Ex(3, 3) As Variantt = Chr(9) 'tabr = Chr(13) 'EnterEx(1, 1) = "Japan"Ex(1, 2) = "Yen"Ex(1, 3) = 128.2Ex(2, 1) = "Mexico"Ex(2, 2) = "Peso"Ex(2, 3) = 9.423Ex(3, 1)原创 2020-06-07 00:32:05 · 2058 阅读 · 0 评论 -
ExcelVBA之6位Lotta程序
当你厌倦了选择你的幸运号码,你可以让VB为你选择。下面的过程Lotto使用1到51的六个数字填充数组:Sub Lotto()Const spins = 6Const minNum = 1Const maxNum = 51Dim t As Integer'looping variable in outer loop 外部循环变量Dim i As Integer'looping variable in inner loop 内部循环变量Dim myNumbers As String'st原创 2020-06-07 00:26:46 · 215 阅读 · 0 评论 -
ExcelVBA之数组
因为数组也是变量,所以,你必须用声明其它变量的类似方法声明数组——使用Dim语句。当你声明一个数组时,你便设定了该数组储存数据所需要的内存空间。数组声明的例子:Dim cities(6) As StringDim daysOfWeek(7) As StringDim lotto(6) As IntegerDim exchange(5, 3) As Varian注意,变量名称后面带有括号以及括号里有数字。一维数组要求括号里带一个数字,这个数字决定了这个数组能够储存的最大成员数。二维数组后面总是原创 2020-06-06 19:36:32 · 990 阅读 · 0 评论 -
VB的循环嵌套
在编程中,一循环总是放在另外一循环中的。VB允许你将不同类型的循环(For和Do循环)“嵌套”在同一个过程里。当你编写循环嵌套时,请确保每个内部的循环在外部循环里面已经完成。另外,每个循环都必须有其自己独特的计数器变量。如果使用循环嵌套,你可以更有效地执行特定的任务。Sub ColorLoop()Dim myRow As IntegerDim myCol As IntegerDim myColor As IntegermyColor = 0For myRow = 1 To 8For myC原创 2020-06-06 17:44:06 · 1531 阅读 · 0 评论 -
VB的For Each…Next循环
当你的过程需要在一个集合的所有对象或者一个数组的所有元素之间循环时,应该使用For Each…Next循环。该循环不需要计数器变量,VB自己知道应该执行几次循环。我们拿工作表集合作个例子,要删除工作簿里面的工作表,你首先不得不要选择它,再选择“编辑”-“删除工作表”。如果要只留一个工作表在工作簿里面的话,你就不得不使用同样的命令,次数取决于工作表的总数。因为每个工作表都是工作表集合里的一个对象,所以使用ForEach…Next循环来加速删除工作表。该循环的形式是:For Each 元素 In 组合原创 2020-06-06 16:05:59 · 6004 阅读 · 0 评论 -
ExcelVBA 之For Next循环
当你知道你需要重复运行多少次某段语句时,可以使用For…Next语句。它的语法如下:For 计数器 = 开始 To 结束 [步长]语句1语句2语句NNext [计数器]括号里面的代码是可选的。计数器是个储存反复次数的数字型变量,开始是你期望的起始计数点,结束则表明循环应该执行多少次。当VB遇到关键字Next时,它将回到循环的开始处,并且再次执行循环里面的代码,直到计数器到达结束值。一旦计数器的值大于关键字To后面的数值,VB就会跳出循环。因为计数器变量在每次执行循环后会自动地变化,它.原创 2020-06-06 15:41:25 · 3736 阅读 · 0 评论 -
ExcelVBA之Do while循环
VB有两种Do循环语句,只要或者直到某个条件为真,它们就会重复一系列的语句。只要条件为真,Do…While循环就允许你重复某个操作。这个循环的语法如下:Do While 条件语句1语句2语句NLoop当VB遇到这个循环时,它首先条件的真假,如果条件为假,循环内部的语句就不会被执行,VB将继续执行关键字Loop后面的第一条语句。如果条件为真,循环里面的语句则会被一条一条地执行,直到遇到Loop语句。Loop语句告诉VB重复这个过程,只要Do While语句里的条件为真的话。Sub Te原创 2020-06-06 04:45:52 · 9986 阅读 · 0 评论 -
ExcelVBA之Case语句
有时候,作决定是基于测试表达式的条件,例如它是否大于,小于,等于或使用一些其它的关系运算符。关键字Is使你能够在Case子句里使用条件表达式。使用关键字Is的SelectCase语句的语法如下:Select Case myNumber Case Is <10 MsgBox "The number is less than 10" Case 11 MsgBox "You entered eleven." .原创 2020-06-06 03:32:57 · 20345 阅读 · 0 评论 -
ExcelVBA 之Select Case
关键字Select Case和End Select之间放置任意多个条件以测试。子句Case Else是可选的,当你希望可能有条件表达式返回假时使用它。在Select Case语句里,VB将每个表达式和测试表达式相比较。Sub TestButtons() Dim question As String Dim bts As Integer Dim myTitle As String Dim myButton As Integer question = "Do .原创 2020-06-06 02:47:52 · 2537 阅读 · 0 评论 -
ExcelVBA之If then
在VBA过程里面作决定的最简单的方法就是使用If…Then语句。假使你想要基于某个条件选择一个行动,那么你可以使用下述结构:If 条件Then 语句1 语句2 语句NEnd If如何使用On Error GoTo标志语句来绕过循环错误:Sub SimpleIfThen() Dim weeks As String On Error GoTo VeryEnd weeks = InputBox("How many weeks are in a ye...原创 2020-06-05 21:18:42 · 2185 阅读 · 0 评论 -
ExcelVBA之传递参数给一子程序以及如何将值从子程序传递回给主调过程
当你大VBA程序得越来越大,要很好地维护这么多的代码行是很困难的。要让你的程序容易编写、理解和改变,你就应该使用井井有条的结构化程序。你只要简单地将大问题分成一些可以同时执行的小问题就行。在VBA中,你可以通过创建一个主过程和一个或多个子过程来实现它。因为主过程和子过程都是子程序下面的例子显示过程AboutUser。该过程要求用户姓和名,并且将姓和名从全名中分离出来。最后的语句显示用户的姓,随后是逗号和名。你再读下去,该过程将被分割成几个任务,以示范使用主过程,子过程和函数的概念。Sub AboutU原创 2020-06-05 16:12:08 · 4920 阅读 · 0 评论 -
函数还是子程序的选择问题
在ExcelVBA或者其他语言子程序和函数:你应该使用哪个?创建子程序的时候:①需要执行一些动作②需要获取用户信息③需要在屏幕上显示信息创建函数的时候:①需要不只一次的做一些简单的计算②需要做复杂的计算③需要不只一次地调用相同的指令块④需要检查某些表达正确与否总之,根据具体情况而定...原创 2020-06-05 12:54:07 · 268 阅读 · 0 评论 -
ExcelVBA之InputBox方法
除了InputBox函数之外,还有InputBox方法,如果你激活对象浏览器,然后搜索“inputbox”,VB将显示两个InputBox——一种为Excel库,另一种为VBA库(见图4-12)。InputBox方法在Excel库里面可用,它的语法和本章前面讲的InputBox函数的语法有轻微差别,它的语法为:expression.InputBox(Prompt, [Title], [Default], [Left], [Top], [HelpFile],[HelpContex...原创 2020-06-05 12:51:57 · 2791 阅读 · 0 评论 -
ExcelVBA之InputBox函数
InputBox函数显示一个信息提示用户输入数据,这个对话框有两个按钮——“确定”和“取消”,当你点击确定时,InputBox函数返回用户输入在信息框里的信息;当你点击取消时,函数则返回空字符串(” ”)。InputBox函数的语法显示如下:InputBox(prompt [, title] [, default] [, xpos] [, ypos] _ [, helpfile, context])第一个参数,prompt,是你想要显示在对话框上的信息,你可以使用函数Chr(13)或Ch..原创 2020-06-05 11:25:31 · 2215 阅读 · 0 评论 -
ExcelVBA之MsgBox函数的运行值结果
当你显示只有一个按钮的信息框时,可以点击确定按钮或者回车键将信息框从屏幕上移除,然而,当信息框有两个或以上的按钮时,你的程序需要知道按的是哪个按钮。你可以将信息框结果储存在一个变量上来实现:程序如下:Sub MsgYesNo3() Dim question As String Dim myButtons As Integer Dim myTitle As String Dim myChoi.原创 2020-06-05 10:27:46 · 1111 阅读 · 0 评论 -
ExcelVBA之内置函数MsgBox介绍
VB有个VarType函数,它返回一个值变量类型的整数。图1-1例显示了函数VarType的语法和它返回的值。 图1-1 函数VarType函数1.打开立即窗口2. 输入下列给变量赋值的语句age = 18birthdate = #1/1/1981#firstName = "John"3. 现在询问VB每个变量的数据类型是什么:?varType(age)你按下回车时,VB返回2,如图1-1所示,数字2代表整数类型。?...原创 2020-06-05 10:23:01 · 1715 阅读 · 0 评论 -
ExcelVBA 之可选参数
有时候,你也许要给函数提供额外的参数,例如,你有一个计算每个人膳食的函数。然而,有时你不希望函数进行相同的计算。在参数名称前面加上关键字Optional可以指明该参数不是必须的。可选参数在必须的参数之后,列在参数清单的最后;可选参数总是Variant数据类型,这意味着你不能使用关键字As来明确可选参数的类型。在前面部分,你创建了一个计算三个数值的平均值的函数,假设,你有时只想要计算两个数的均值,你就可以将第三个参数设置为可选的。为了不破坏原来的函数MyAverage,我们来创建一个新的函数Avg,来计算两个原创 2020-06-04 19:50:45 · 5004 阅读 · 0 评论 -
ExcelVBA之传递函数
函数调用:Sub EnterText() Dim m As String, n As String, r As String m = InputBox("Enter your first name:") n = InputBox("Enter your last name:") r = JoinText(m, n) MsgBox rEnd SubFunction Jo原创 2020-06-04 19:46:08 · 1199 阅读 · 2 评论 -
ExcelVBA之函数
函数介绍:1、子程序过程(子程序)执行一些有用的任务但是不返回任何值。它们以关键字Sub开头和关键字End Sub结束。子程序可以用宏录制器录制或者在VB编辑器窗口里直接编写。2、函数过程(函数)执行具体任务并返回值。它们以关键字Function开头和关键字EndFunction结束。在本章中,你将创建你的第一个函数过程。函数过程可以从子程序里执行,也可以从工作表里访问,就像Excel的内置函数一样。技巧:关于函数名称:函数名称应该点明该函数的作用,并且必须和变量的命名规则一致。设置VBA.原创 2020-06-04 16:30:35 · 827 阅读 · 1 评论 -
ExcelVBA 之指定变量为对象
目的:通过设置对象变量来对区域A1:E10外围设置边框Sub UseObjVariable() Dim myRange As Object Set myRange = Worksheets("Sheet1"). _ Range(Cells(1, 1), Cells(10, 5)) myRange.BorderAround Weight:=xlMedium原创 2020-06-03 17:50:48 · 576 阅读 · 0 评论 -
ExcelVBA 之Static 变量
静态变量(static)除了范围之外,变量还有存活期,变量的存活期决定了该变量能保存它的值有多久。一旦该工程打开,模块级别和工程级别的变量就会保留它们的值。然而,如果程序的逻辑需要,VB能够重新初始化这些变量。使用Dim语句声明的当地变量当过程结束时就会丢失值,当地变量的存活期是随着过程的运行的,并且它们在程序每次运行的时候可以被重新初始化。VB允许你通过改变声明方式延长当地变量的存活期。用Static关键字声明的变量是特殊的当地变量,静态变量在过程级别声明。和那些用关键字Dim声明的当地变量相反.原创 2020-06-03 17:23:12 · 5428 阅读 · 2 评论 -
ExcelVBA之计算价格及不同变量范围和定义
Option ExplicitSub CalcCost()'declaration of variables Dim slsPrice As Currency Dim slsTax As Single Dim Cost As Currency Dim strMsg As String slsPrice = 39 slsTax = 0.085 .原创 2020-06-03 16:42:19 · 829 阅读 · 0 评论 -
EXcelVBA之变量赋值运算
在代码窗口,输入CalcCost过程,如下面所示。这个过程基于下述假设来计算购买一个计算器的价钱:计算器的价格为37美元,销售税为8.5%。代码为:Sub CalcCost() slsPrice = 37 slsTax = 0.085 Range("A1").Formula = "The cost of calculator" Range("A4").Formula = "Price"原创 2020-06-03 15:55:15 · 2693 阅读 · 0 评论