Excel VBA编程 数组函数
EXCELVBA函数参考手册
Excel VBA 学习资料函数参考手册摘自Excel2003VBA帮助2006年12月29日Excel VBA 学习资料 (1)函 (1)数 (1)参 (1)考 (1)手 (1)册 (1)摘自Excel2003VBA帮助 (1)2006年12月29日Abs 函数 (1)Abs 函数 (6)导出的数学函数 (6)Array 函数 (7)Asc 函数 (8)Atn 函数 (9)CallByName 函数 (9)CBool等类型转换函数 (10)语法 (10)返回类型 (10)说明 (11)Choose 函数 (13)Chr 函数 (14)Command 函数 (15)Cos 函数 (16)CreateObject 函数 (17)CurDir 函数 (18)CVErr 函数 (19)Date 函数 (20)DateAdd 函数 (20)DateDiff 函数 (21)DatePart 函数 (23)DateSerial 函数 (25)DateValue 函数 (26)Day 函数 (27)DDB 函数 (27)Dir 函数 (28)DoEvents 函数 (30)Environ 函数 (31)EOF 函数 (32)Error 函数 (33)Exp 函数 (33)FileAttr 函数 (34)FileDateTime 函数 (34)Filter函数 (35)Fix 、Int函数 (36)Format 函数 (37)FormatCurrency函数 (40)FormatDateTime函数 (41)FormatNumber函数 (41)FormatPercent函数 (42)FreeFile 函数 (43)FV 函数 (44)GetAllSettings 函数 (45)GetAttr 函数 (46)GetObject 函数 (47)GetSetting 函数 (51)Hex 函数 (52)Hour 函数 (52)IIf 函数 (53)IMEStatus 函数 (53)Input 函数 (54)InputBox 函数 (55)InStr 函数 (57)InStrRev函数 (58)IPmt 函数 (60)IRR 函数 (61)IsArray 函数 (62)IsDate 函数 (63)IsEmpty 函数 (63)IsError 函数 (64)IsMissing 函数 (64)IsNull 函数 (65)IsNumeric 函数 (66)IsObject 函数 (67)Join函数 (67)LBound 函数 (67)LCase 函数 (68)Left 函数 (69)Len 函数 (70)Loc 函数 (71)LOF 函数 (71)Log 函数 (72)LTrim、RTrim与Trim 函数 (72)MacID 函数 (73)MacScript 函数 (75)Mid 函数 (75)MIRR 函数 (76)Month 函数 (77)MonthName函数 (78)MsgBox 函数 (78)Now 函数 (81)NPer 函数 (81)NPV 函数 (83)Oct 函数 (84)Partition 函数 (84)Pmt 函数 (86)PPmt 函数 (87)PV 函数 (89)QBColor 函数 (90)Rate 函数 (91)Replace函数 (92)RGB 函数 (94)Right 函数 (95)Rnd 函数 (96)Round函数 (96)Second 函数 (97)Seek 函数 (97)Sgn 函数 (98)Shell 函数 (99)Sin 函数 (100)SLN 函数 (101)Space 函数 (102)Spc 函数 (102)Split函数 (103)Sqr 函数 (104)Str 函数 (104)StrComp 函数 (105)StrConv 函数 (106)StrReverse函数 (107)String 函数 (108)Switch 函数 (108)SYD 函数 (109)Tab 函数 (110)Tan 函数 (111)Time 函数 (112)Timer 函数 (112)TimeSerial 函数 (112)TimeValue 函数 (113)TypeName 函数 (114)UCase 函数 (116)Val 函数 (116)VarType 函数 (117)Weekday 函数 (118)WeekdayName函数 (119)Year 函数 (120)Abs 函数返回参数的绝对值,其类型和参数相同。
excel利用vba定义函数的教程全解
excel利用vba定义函数的教程全解用vba定义函数步骤1:例:下面表格中需要计算一些三角形的面积用vba定义函数步骤2:B列是底边长,C列是高,要求在D列通过公式计算三角形面积。
(通常我们会在D3单元格用公式=B3*C3/2来计算,然后把这个公式向D列下方拖动复制,得到其他公式。
这只是一个简单的例子,通过它来学习编写简单的自定义函数)用vba定义函数步骤3:打开VBA窗口按ALT+F11调出VBA窗口,插入一个用户模块。
用vba定义函数步骤4:编写代码把下面这个自定义函数代码粘贴到刚插入的用户模块中就可以使用了。
Functionsjxmj(di,gao)sjxmj=di*gao/2EndFunction这段代码非常简单只有三行,先看第一行,其中sjxmj是自己取的函数名字,括号中的是参数,也就是变量,di表示“底边长”,gao表示“高”,两个参数用逗号隔开。
再看第二行,这是计算过程,将di*gao/2这个公式赋值给sjxmj,即自定义函数的名字。
用vba定义函数步骤5:使用自定义函数用vba定义函数步骤6:通过上面例子可以了解自定义函数的编写和使用方法,下面再介绍一个稍微复杂点的自定义函数。
经常对数据进行处理的朋友可以会遇到多条件查找某一个数据,一般这种情况需要编写“数组公式”来解决,公式较长,也不易理解。
比如下面统计成绩的表格,需要根据A1:D7的成绩表,统计出两门功能都在90分以上的学生人数。
大家可以看到在H3单元格中的公式比较长,理解起来也有一定难度。
我们通过自定义函数也可以得到正确结果,函数代码如下:Function统计(a,b,c,d,e)Fori=1Toa.Rows.CountIfb=a.Cells(i,1)Anda.Cells(i,c)>=eAnda.Cells(i,d)>=eThen统计=统计+1EndIfNextEndFunction这个函数用了五个参数(因为涉及到一个区域和四个条件)参数a表示要统计的区域,在此例中为B2:E7参数b表示要统计的是哪一个班级,在此例中为G3单元格参数d表示数学成绩相对于区域第一列向右的列数,在此例中为4参数e表示分数,在此例中为90分提示:要注意参数c和d“相对”于“区域”的列数,并非是从A列开始向右的列数。
Excel-VBA基础语法
Excel-VBA基础语法VBA简介、数据类型、变量、数组、运算符、内置函数、过程与函数⼀、VBA介绍1、宏和VBA的关系 vba是编程语⾔,宏是⽤vba代码保存下来的程序。
录制的宏是vba⾥最简单的程序,正因为如此,录制宏存在许多缺陷:如⽆法进⾏判断和循环,不能显⽰⽤户窗体,不能进⾏⼈机交互…… 解决录制宏的这些问题,需要掌握vbs编程的⽅法,⾃主的编写vba程序。
2、VBA程序结构代码:vba程序由代码组成。
过程:例如Sub过程、Function过程模块:保存过程的地⽅,⼀个模块可以保存多个不同类型的过程对象:⽤代码操作或控制的东西即为对象,例如⼯作簿、⼯作表、单元格、图⽚、图表、透视表等对象的属性:每个对象都有属性,属性是对象包含的内容或特点,例如A1单元格的内容:A1.内容,代码表达为Range("A1).Value对象的⽅法:⽅法是指在对象上执⾏的某个动作,例如Range("A1").Select关键字:关键字是vba中的保留字或符号,例如语句名称、函数名称、运算符等都是关键字3、VBE介绍 VBE即Visual Basic Editor即VBA的编程环境 1)打开VBE编辑器 Alt+F11(Alt+F8是查看宏) 依次执⾏:(2003版本)⼯具——宏——Visual Basic编辑器,(2007以上版本)在“视图”下的“宏”选项卡下 右键单击⼯作表标签,执⾏“查看代码”命令 2)主窗⼝:包含“⼯程资源管理器”、“属性窗⼝”、“菜单栏”、“⼯具栏”、“代码窗⼝”、“⽴即窗⼝” 3)菜单栏:包含VBE中各种组件的命令 4)⼯具栏:可以在“视图”——“⼯具栏”菜单⾥显⽰或隐藏 5)⼯程资源管理器:在这⾥可以看到所有打开的Excel⼯作簿和已加载的宏,⼀个Excel的⼯作簿就是⼀个⼯程,⼯程名称为“VBA Project(⼯作簿名称)”,这⾥最多可以显⽰⼯程⾥的4类对象,即Excel对象(包括sheet对象和ThisWorkbook对象)、窗体对象、模块对象和类模块对象。
excel vba 数组 方法
excel vba 数组方法Excel VBA 数组方法在Excel VBA中,数组是一种用于存储多个值的数据结构。
通过使用数组,我们可以更有效地处理大量数据,并且可以使用各种方法对数组进行操作和处理。
本文将介绍一些常用的Excel VBA数组方法,帮助读者更好地理解和运用这一功能。
1. 声明和初始化数组在使用数组之前,我们需要先声明和初始化数组。
声明数组时,需要指定数组的数据类型和维度。
例如,可以使用以下语句声明一个整型一维数组:Dim arr(10) As Integer上述语句声明了一个包含11个元素的整型数组。
我们可以使用下标访问数组中的元素,例如arr(0)表示数组的第一个元素。
2. 动态数组除了静态数组,我们还可以使用动态数组。
动态数组的大小可以在运行时根据需要进行调整。
通过使用ReDim语句,我们可以重新定义数组的大小。
例如,可以使用以下语句创建一个动态数组:Dim arr() As IntegerReDim arr(10)上述语句创建了一个大小为11的整型动态数组。
3. 遍历数组遍历数组是处理数组中的元素的常见操作。
我们可以使用For循环或者ForEach循环来遍历数组中的元素。
例如,以下代码演示了使用For循环遍历数组并显示每个元素的值:For i = 0 To UBound(arr)MsgBox arr(i)Next i上述代码中,UBound(arr)返回数组arr的上界,即数组的最大下标。
4. 数组排序在Excel VBA中,我们可以使用Sort方法对数组进行排序。
Sort 方法可以按照升序或降序对数组进行排序。
例如,以下代码演示了对整型数组arr进行升序排序:Sort arr, vbAscending在上述代码中,vbAscending表示升序排序,vbDescending表示降序排序。
5. 查找数组中的元素有时候,我们需要在数组中查找特定的元素。
Excel VBA提供了Find方法来实现这一功能。
如何在Excel中使用VBA编程
单 精度 型 S i gl n e 双 精度 型 D 。 u b l e
日期型 D a t e
4 8
公元 1 0 0 O / 1 /1 —9 9 9 9 /1 2 / 3 1
对象 型 0 b j e c t
P u b l i c变量 a s类 型 Gl o a l变量 a D s类 型 St a t i c变量 a s类 型
例 子 D i m I a s i n t e g e r P r i r a t e I a s i n t e g e r
P u b 1 i c L a s L o n g G l o b a1 D a s d a t e S t a t i c S a s s t r i n g
4 . VB A中的流程控制 ( 1 )判断结构
I f判 断条 件 T h e n
E n d i f
1 . 运算符
( 1 ) 赋值运算符 : = ( 2 ) 数学运算符 :&( 字符连接符) 、+( 加) 、一 ( 减) 、 ( 乘) 、 /( 除) 、Mo d ( 取 余) 、\ ( 整 除) 、一( 负 号) 、 ( 指数 ) ( 3 ) 逻辑运算符 :No t ( t  ̄ ) 、An d ( 与) 、O r ( 或) 、Xo r ( 异或) 、 E q v ( ¥ H 等) 、I mp ( 隐含) ( 4 ) 关系运 算符 := ( 相 等) 、<>( 不等) 、>( 大于 ) 、<( 小 于) 、>= ( 不小于) 、<: ( 不大于) 、L i k e 、I s ( 5 ) 位运算符 :No t ( 逻辑 非) 、An d ( 逻辑与) 、Or ( 逻辑或) 、 X o r ( 逻辑异 或) 、E q v ( 逻辑等) 、I mp ( 隐含)
VBAExcel常用自定义函数
VBAExcel常⽤⾃定义函数1. 将互换 Excel 列号(数字/字母)Public Function excelColumn_numLetter_interchange(numOrLetter) As String Dim i, j, idx As Integer Dim letterArray letterArray = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z") If IsNumeric(numOrLetter) Then If numOrLetter > 702 Then MsgBox "只允许输⼊⼩于“703”的数字。
" Exit Function End If If numOrLetter > 26 Then idx = 26 For i = 0 To 25 For j = 0 To 25 idx = idx + 1 If idx = numOrLetter Then excelColumn_numLetter_interchange = letterArray(i) & letterArray(j) Exit For End If Next j Next i Else excelColumn_numLetter_interchange = letterArray(numOrLetter - 1) End If Else numOrLetter = UCase(numOrLetter) '转换为⼤写 If Len(numOrLetter) > 1 And Len(numOrLetter) < 3 Then idx = 26 For i = 0 To 25 For j = 0 To 25 idx = idx + 1 If letterArray(i) & letterArray(j) = numOrLetter Then excelColumn_numLetter_interchange = idx Exit For End If Next j Next i ElseIf Len(numOrLetter) = 1 Then For i = 0 To 25 If letterArray(i) = numOrLetter Then excelColumn_numLetter_interchange = i + 1 Exit For End If Next i Else MsgBox "最多只允许输⼊2个“字母”。
数组中sort的用法vba
数组中sort的用法vba【实用版】目录一、VBA 中数组的 sort 用法二、sort 函数的基本使用三、sort 函数的参数设置四、sort 函数在实际操作中的应用正文在 VBA 中,数组的 sort 用法是非常常用的,它帮助我们对数组中的元素进行排序。
下面我们就来详细地介绍一下这方面的知识。
首先,我们要了解 sort 函数的基本使用。
sort 函数是 VBA 内置的排序函数,它可以对数组中的元素进行排序。
在使用 sort 函数时,我们需要指定待排序的数组,以及排序的顺序。
例如,我们可以使用如下代码对一个数组进行升序排序:```vbadim arr as arrayarr = array(1, 3, 5, 7, 2, 4, 6, 8)arr.sort xlAscending```在这段代码中,我们首先创建了一个名为 arr 的数组,然后使用sort 函数对其进行排序。
sort 函数的第二个参数 xlAscending 表示升序排序,如果设置为 xlDescending,则表示降序排序。
其次,我们来看一下 sort 函数的参数设置。
sort 函数的参数主要有两个,一个是待排序的数组,另一个是排序的顺序。
除了排序顺序外,sort 函数还提供了其他一些参数,如标题行、大小写、排序方向等。
通过设置这些参数,我们可以更加灵活地控制排序操作。
最后,我们来看一下 sort 函数在实际操作中的应用。
在实际使用中,我们可以结合其他 VBA 函数和方法,对数据进行排序。
例如,我们可以使用以下代码对 Excel 工作表中的数据进行排序:```vbasub sort_data()dim ws as worksheetset ws = thisworkbook.worksheets("sheet1")ws.range("A1:C9").sort range("B1"), xlAscendingend sub```在这段代码中,我们首先创建了一个名为 sort_data 的子程序,然后使用 ws.range 方法选取了 Excel 工作表中的数据区域。
vba编程excel sumproduct实例
题目:深度探究VBA编程中的Excel Sumproduct实例序在本文中,我们将深入探讨VBA编程中的Excel Sumproduct函数实例,深度剖析其用法及适用场景,并结合实例进行详细说明和分析。
一、VBA编程中的Excel Sumproduct函数Excel中的Sumproduct函数是一种多功能的计算函数,可以在VBA编程中发挥重要作用。
该函数通常用于对数组中的元素进行数值运算,是一种灵活、高效的计算方法。
1.1 用法在VBA中,Sumproduct函数的用法主要包括以下几种情形:1. 对一维数组进行数值运算;2. 多个数组的数值乘积求和;3. 灵活应用于数据筛选和条件计算等;4. 适用于大规模数据的高效计算。
1.2 适用场景Excel Sumproduct函数在VBA编程中的适用场景非常广泛,包括但不限于:1. 数据分析和统计计算;2. 复杂条件下的数据筛选和汇总;3. 数据建模和预测分析;4. 适用于金融、商业等领域的复杂计算。
二、实例分析:VBA编程中的Excel Sumproduct应用为了更加深入地理解Sumproduct函数的用法和实际运用,我们将结合一个实际的案例进行详细分析和说明。
2.1 案例背景假设我们需要对一组销售数据进行统计和分析,以便进行销售绩效评估和预测分析。
2.2 具体步骤(1)我们需要提取所需的销售数据,包括销售金额、销售数量、产品种类等信息;(2)我们可以利用Sumproduct函数对销售数据进行综合计算,包括但不限于总销售额、平均销售额、最大/最小销售额等;(3)我们可以根据特定条件,如不同产品的销售情况、不同时间段的销售情况等,灵活运用Sumproduct函数进行数据筛选和条件计算。
2.3 实际效果通过对销售数据的Sumproduct函数计算,我们可以获得更加全面、深入的销售统计结果,并进一步进行销售绩效评估和预测分析。
这种方法不仅能够提高工作效率,还可以准确把握销售情况,为销售决策提供有力支持。
ExcelVBA调用Excel函数示例-sumif()条件求和
ExcelVBA调⽤Excel函数⽰例-sumif()条件求和⼀、关于sumif()函数的⽤法说明及⽤途。
根据指定条件对若⼲单元格求和。
语法SUMIF(range,criteria,sum_range)Range 为⽤于条件判断的单元格区域。
Criteria 为确定哪些单元格将被相加求和的条件,其形式可以为数字、表达式或⽂本。
例如,条件可以表⽰为 32、"32"、">32" 或 "apples"。
Sum_range 是需要求和的实际单元格。
说明只有在区域中相应的单元格符合条件的情况下,sum_range 中的单元格才求和。
如果忽略了 sum_range,则对区域中的单元格求和。
Microsoft Excel 还提供了其他⼀些函数,它们可根据条件来分析数据。
例如,如果要计算单元格区域内某个⽂本字符串或数字出现的次数,则可使⽤ COUNTIF 函数。
如果要让公式根据某⼀条件返回两个数值中的某⼀值(例如,根据指定销售额返回销售红利),则可使⽤ IF 函数。
以上是从帮助⽂件⾥复制出来的,以前没有好好看到这些,以为没什么⽤处,但现在看来⾥⾯真是遍地黄⾦甲啊!!效果截图如下:⽰例解释如下:把属性值(A列)中⼤于等于200000的(这是条件)对应单元格(B列)(这是实际进⾏求和的区域)进⾏求和。
这个函数有什么⽤处呢?尤其是在学⽣成绩处理过程中想来想去,也只能是指把它归为可以进⾏条件求各⽽已。
⼆、在VBA中如何实现?其实可以⽤在以下情况中,⽐如可以统计、计算每个⼈的⼯作量,⽽且可以直接填到指定单元格内。
如果想在VBA中实现的话,那就需要完成以下两步:①获取每个⼈的姓名,存⼊数组中。
这⾥有个问题,可不是在数组定义中指定常量?②根据数组列表中每个⼈姓名,以此为条件,计算每个⼈的⼯作量。
这样就不⽤要求必须提前排好序,即使是乱序也不要紧了。
下⾯就实现这个功能吧。
EXCEL学习笔记之VBA
EXCEL学习笔记之VBA1、变量如果给对象项变量赋值,必须用set关键词如Set sheet=Activesheet如果加上Option Explicit则变量必须先声明后使用2、设置函数为易失性函数,让自定义函数也能重新计算秩序在Function过程中添加一行代码即可.Application.Volatile True ‘将函数设置为易失性函数3、声明动态数组(1)可以用 Dim 数组名称() As 数据类型(2)可以使用Array创建数组,如Dim arr As Variantarr=Array(1,2,3,4);(3)可以使用SplitDim arr2 As Variantarr=Split(“叶枫”,“张三”);(4)数组常用运算UBound(数组名称);’数组的最大索引号LBound(数组名称);’数组的最小索引号(5)用Join函数将一位数组合并组合成字符串arr=Split(“叶枫”,“张三”);Txt=Join(arr,”,”); ‘第二个参数为分隔个元素的分隔符,如果省略,默认使用空格。
(6) 将数组中的数据写入单元格区域arr=Split(1,2,3,4,5,6);Range.(“a1:A6”).Value=Application.WorksheetFunction.tra snpose(arr)‘transpose函数为行列转置的作用,如果只有一行不需要使用,直接赋值arr即可。
4、在vba中直接使用工作表函数要加前缀Application.WorksheetFunction如:Application.WorksheetFunction.Sum(“a1:b2”);5、区域的选择(1)引用多个不连续的区域无论有多少区域,参数都只有一个字符串,参数中各个区域的地址用逗号分隔Range("A1:B2,c1:d2").Select(2)引用多个区域的公共区域可以将Range属性的参数设置为一个用空格分隔的多个单元格地址组成的字符串如:Range("B1:B10 A4:D6").Select(3)引用两个区域围成的矩形区域设置两个用逗号隔开的参数,就可以引用这两个区域围成的矩形区域,注意与第(1)中情况的区别Range("A1:B2”,”c1:d2").Select(4)使用cells属性引用单元格Range(Cells(1,1),Cells(10,5)).Select或者Range(“A1”,”E10”).Select(5)可以使用union合并多个单元格区域Application.Union(Range("A1:B2"), Range("c1:d2")).Select '同时选中两个区域(6)Worksheet对象的UsedRange和CurrentRegion属性UseRange属性返回的总是一个矩形区域,无论这些区域是否存在空行、空列。
VBA数组的高级用法
VBA数组的高级用法VBA(Visual Basic for Applications)是一种基于Microsoft Visual Basic的编程语言,被广泛应用于Microsoft Office套件中的各种应用程序,包括Excel、Word和Access等。
在VBA中,数组是一种重要的数据结构,它允许我们在单个变量中存储多个值。
本文将介绍VBA数组的高级用法,包括多维数组、动态数组和数组函数等。
一、多维数组多维数组是一种特殊类型的数组,在VBA中可以创建二维、三维甚至更高维的数组。
多维数组的优势在于可以更好地组织和操作复杂的数据。
创建一个多维数组可以使用Dim关键字。
例如,以下代码创建了一个3x3的二维数组:```vbaDim array(1 to 3, 1 to 3) As Integer```我们可以使用嵌套的for循环来访问和操作多维数组的元素。
例如,以下代码演示了如何遍历并打印一个二维数组的元素:```vbaDim i As Integer, j As IntegerFor i = 1 To 3For j = 1 To 3Debug.Print array(i, j)Next jNext i```除了二维数组,我们还可以创建更高维度的数组。
例如,以下代码创建了一个3x3x3的三维数组:```vbaDim array(1 to 3, 1 to 3, 1 to 3) As Integer```通过使用多维数组,我们可以更灵活地处理需要按多个维度进行操作的数据。
二、动态数组在VBA中,动态数组是一种可以在运行时根据需要调整大小的数组。
与静态数组相比,动态数组更加灵活,并且可以节省内存空间。
创建动态数组的方法是使用ReDim语句。
```vbaDim dynamicArray() As IntegerReDim dynamicArray(1 to 10) As Integer```在上面的例子中,我们创建了一个初始大小为10的动态数组。
ExcelVBA数组入门教程
ExcelVBA数组入门教程Excel VBA数组入门教程1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。
2. 数组的维数:Sub 数组示例()Dim x As Long, y As LongDim arr(1 To 10, 1 To 3) '创建一个可以容下10行3列的数组空间For x = 1 To 4For y = 1 To 3arr(x, y) = Cells(x, y) '通过循环把单元格区域a1:c4的数据装进数组中Next yNext xMsgBox arr(4, 3) '根据提供的行数和列数显示数组arr(1, 2) = "我改一下试试" '你可以随时修改数组内指定位置的数据MsgBox arr(1, 2)End Sub总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。
而一维数组只是由一个元素决定,如ARR,4,表示数组中第4个元素3. 把单元格数据搬入内存:一、声明:Dim arr as Variant '声明一个变量,不能声明其他数据类型Dim arr(1 to 10, 1 to 2 ) , 这种声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据戒:dim arr() 这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。
二、装入arr =range("a9:c100") '装入很简单,变量 = 单元格区域三、读出装入数组后的单元格数值,可以按数组名称(行数,列数) 直接读取该位置的值,如下面的代码。
Msgbox arr(3,2) '就可以取出搬过去的而构成的数组第3行第2列的内容四、示例Sub s3()Dim arr() '声明一个动态数组,动态指不固定大小,Dim arr1 '声明一个Variant类型的变量arr = Range("a1:c7") '把单元格区域A1:C7的值装入数组arrarr1 = Range("a1:c7") '把单元格区域A1:C7的值装入数组arr1MsgBox arr(1, 1) '读取arr数组中第1行第1列的数值MsgBox arr1(2, 3) '读取arr1数组的第2行第3列的数值 End Sub4. 把单元格数据搬入内存:Sub test()Dim arr '声明一个变量用来盛放单元格数据Dim x As Integerarr = Range("a2:d5") '把单元格数据搬入到arr里,它有4列4行For x = 1 To 4 '通过循环在arr数组中循环arr(x, 4) = arr(x, 3) * arr(x, 2) '数组的第4列(金额)=第3列*第2例Next xRange("a2:d5") = arr '把数组放回到单元格中End SubSub test1()Dim arr(1 To 5) '声明一维数组For x = 1 To 5arr(x) = x * 2 '通过循环给每个位置赋值Next xRange("A1:E1") = arr '把数组导入到excel中的a1:e1单元格中Range("A1:A5") = Application.Transpose(arr) '如果是放在一列中,就需要对数组进行转置后再存放End Sub5. 动态数组的声明:Sub darr()Dim arr() '声明一个动态的arr数组(不知道它能盛多少数据)Dim kk = Application.WorksheetFunction.CountIf(Range("a2:a6"),">10") '计算大于10的个数ReDim arr(1 To k) '再次声明arr的大小,正好盛下k数量的值For x = 2 To 6If Cells(x, 1) > 10 Thenm = m + 1arr(m) = Cells(x, 1) '通过循环把大于10的数字装入数组End IfNext xMsgBox arr(2)End Sub6. 动态数组的声明:arr(-19 to 8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8, 如果用语句返回就是:Sub t1()Dim arr(-19 To 8)MsgBox UBound(arr) '返回最大编号,结果为8MsgBox LBound(arr) '返回最小编号,结果为-19End Sub如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例Sub t2()Dim arr(-19 To 8, 2 To 5)MsgBox UBound(arr) '返回第1维(行的)最大编号,结果为8MsgBox LBound(arr) '返回第1维(行的)小编号,结果为-19MsgBox UBound(arr, 2) '返回第2维(列的)最大编号,结果为5MsgBox LBound(arr, 2) '返回第2维(列的)最小编号,结果为2End SubSub t3()Dim arrarr = Sheets(1).UsedRange 'Usedrange的行数和列数是未知的MsgBox UBound(arr, 1) '可以计算这个区域有多少行MsgBox UBound(arr, 2) '可以计算出这个区域有多少列 End Sub7. 使用Array函数创建常量数组:使用Array函数创建数组1维常量数组:Array("A",1,"C")2维常量数组: Array(Array("a", 10), Array("b", 20),Array("c", 30))也可以调用excel工作表内存数组:1维数量: [{"A",1,"C"}]2维数量:[{"a",10;"b",20;"c",30}] 内存常量数组有什么作用呢?1、简化赋值比如:我需要给数组arr分别赋值10 ,20,30,40 ,一般就需要分别赋值,即: arr(1)=10arr(2)=20arr(3)=30arr(4)=40而使用常量数量,只一句话:arr=array(10,20,30,40)2、调用工作表函数时使用:Sub mylook()Dim arrarr = [{"a",10;"b",20;"c",30}]MsgBox Application.VLookup("b", arr, 2, 0) '调用vlookup时可以作为第二个参数End Sub8. 数组的合并和字符串拆分,Join & Split,:多个字符的合并和字符串按规律的拆分是经常遇到的,如:A-REW-E-RWC-2-RWC 按分隔符-拆分成6个字符放在一个数组中有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串上面两种情况VBA提供了一对函数,即:split,字符串,"分隔符",拆分字符串join(数组,"分隔符") 用分隔连接数组的每个元成一个字符串Sub t1()Dim arr, myst As Stringmyst = "A-REW-E-RWC-2-RWC"arr = Split(myst, "-") '按-分隔成一组数装入数组中'MsgBox arr(0) '显示数组的第一个数(分隔后的数组最小下标为0,不是1),显示结果为AMsgBox Join(arr, ",") '再用","把数组的每个值连接成一个字符串,结果为"A,REW,E,RWC,2,RWC"End Sub值得注意的是:split和join只能对一维数组进行操作,如果是单元格戒二维数组怎么办?只有一条途径,想办法转换为一维数组:Sub t2()Dim ARRARR = Application.Transpose(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组MsgBox Join(ARR, "-")End Sub9. Filter函数实现数组筛选:数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的VBA函数是:Filter函数用法:Filter(数组, 筛选的字符, 是否包吨)Sub DD()arr = Array("ABC", "A", "D", "CA", "ER")arr1 = VBA.Filter(arr, "A", True) '筛选所有吨A的数值组成一个新数组arr2 = VBA.Filter(arr, "A", False) '筛选所有不吨A的数值组成一个新数组MsgBox Join(arr2, ",") '查看筛选的结果End Sub遗憾的是函数只能进行模糊筛选,不能精确匹配。
常用EXCEL的VBA函数精选
常用EXCEL的VBA函数精选前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。
第1.1例 ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As Integer 。
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为-32,768 到32,767 之间。
Integer 的类型声明字符是百分比符号 (%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个Integer,代表字符串中首字母的字符的ASCII 代码。
语法Asc(string)必要的string(字符串)参数可以是任何有效的字符串表达式。
如果 string 中没有包含任何字符,则会产生运行时错误。
ExcelVBA内部函数大全
ExcelVBA内部函数大全在VBA程序语言中有许多内置函数,可以帮助程序代码设计和减少代码的编写工作。
一.测试函数IsNumeric(x) ‘是否为数字, 返回Boolean结果,True or FalseIsDate(x) ‘是否是日期, 返回Boolean结果,True or FalseIsEmpty(x)‘是否为Empty, 返回Boolean结果,True or FalseIsArray(x) ‘指出变量是否为一个数组。
IsError(expression) ‘指出表达式是否为一个错误值IsNull(expression) ‘指出表达式是否不包含任何有效数据 (Null)。
IsObject(identifier)‘指出标识符是否表示对象变量二.数学函数Sin(X)、Cos(X)、Tan(X)、Atan(x) 三角函数,单位为弧度Log(x) 返回x的自然对数Exp(x)返回 exAbs(x) 返回绝对值Int(number)、Fix(number) 都返回参数的整数部分,区别:Int 将 -8.4 转换成 -9,而 Fix 将-8.4 转换成 -8Sgn(number) 返回一个 Variant (Integer),指出参数的正负号Sqr(number) 返回一个 Double,指定参数的平方根VarType(varname) 返回一个 Integer,指出变量的子类型Rnd(x)返回0-1之间的单精度数据,x为随机种子三.字符串函数Trim(string) 去掉string左右两端空白Ltrim(string) 去掉string左端空白Rtrim(string) 去掉string右端空白Len(string) 计算string长度Left(string, x) 取string左段x个字符组成的字符串Right(string, x) 取string右段x个字符组成的字符串Mid(string, start,x) 取string从start位开始的x个字符组成的字符串Ucase(string) 转换为大写Lcase(string) 转换为小写Space(x) 返回x个空白的字符串Asc(string) 返回一个 integer,代表字符串中首字母的字符代码Chr(charcode) 返回string,其中包含有与指定的字符代码相关的字符四.转换函数CBool(expression) 转换为Boolean型CByte(expression) 转换为Byte型CCur(expression) 转换为Currency型CDate(expression) 转换为Date型CDbl(expression) 转换为Double型CDec(expression) 转换为Decemal型CInt(expression) 转换为Integer型CLng(expression) 转换为Long型CSng(expression) 转换为Single型CStr(expression) 转换为String型CVar(expression) 转换为Variant型Val(string) 转换为数据型Str(number) 转换为String五.时间函数Now 返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。
VBA.数组详解
Excel VBA数组入门教程(共10集)[日期:2011-08-07] 来源:excel精英培训作者:兰色幻想[字体:大中小]1.前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。
2.数组的维数:Sub数组示例()Dim x As Long, y As LongDim arr(1 To 10, 1 To 3) '创建一个可以容下10行3列的数组空间For x = 1 To 4For y = 1 To 3arr(x, y) = Cells(x, y) '通过循环把单元格区域a1:c4的数据装进数组中Next yNext xMsgBox arr(4, 3) '根据提供的行数和列数显示数组arr(1, 2) = "我改一下试试"'你可以随时修改数组内指定位置的数据MsgBox arr(1, 2)End Sub总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。
而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素3.把单元格数据搬入内存:一、声明:Dim arr as Variant '声明一个变量,不能声明其他数据类型Dim arr(1 to 10, 1 to 2 ) ,这种声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据或:dim arr() 这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。
arr =range("a9:c100") '装入很简单,变量=单元格区域三、读出装入数组后的单元格数值,可以按数组名称(行数,列数)直接读取该位置的值,如下面的代码。
Msgbox arr(3,2) '就可以取出搬过去的而构成的数组第3行第2列的内容四、示例Sub s3()Dim arr() '声明一个动态数组(动态指不固定大小)Dim arr1 '声明一个Variant类型的变量arr = Range("a1:c7") '把单元格区域A1:C7的值装入数组arrarr1 = Range("a1:c7") '把单元格区域A1:C7的值装入数组arr1MsgBox arr(1, 1) '读取arr数组中第1行第1列的数值MsgBox arr1(2, 3) '读取arr1数组的第2行第3列的数值End Sub4.把单元格数据搬入内存:Sub test()Dim arr '声明一个变量用来盛放单元格数据Dim x As Integerarr = Range("a2:d5") '把单元格数据搬入到arr里,它有4列4行For x = 1 To 4 '通过循环在arr数组中循环arr(x, 4) = arr(x, 3) * arr(x, 2) '数组的第4列(金额)=第3列*第2例Next xRange("a2:d5") = arr '把数组放回到单元格中End SubDim arr(1 To 5) '声明一维数组For x = 1 To 5arr(x) = x * 2 '通过循环给每个位置赋值Next xRange("A1:E1") = arr '把数组导入到excel中的a1:e1单元格中Range("A1:A5") = Application.Transpose(arr) '如果是放在一列中,就需要对数组进行转置后再存放End Sub5.动态数组的声明:Sub darr()Dim arr() '声明一个动态的arr数组(不知道它能盛多少数据)Dim kk = Application.WorksheetFunction.CountIf(Range("a2:a6"), ">10") '计算大于10的个数ReDim arr(1 To k) '再次声明arr的大小,正好盛下k数量的值For x = 2 To 6If Cells(x, 1) > 10 Thenm = m + 1arr(m) = Cells(x, 1) '通过循环把大于10的数字装入数组End IfNext xMsgBox arr(2)End Sub6.动态数组的声明:arr(-19 to 8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8,如果用语句返回就是:Sub t1()Dim arr(-19 To 8)MsgBox UBound(arr) '返回最大编号,结果为8MsgBox LBound(arr) '返回最小编号,结果为-19End Sub如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例Sub t2()Dim arr(-19 To 8, 2 To 5)MsgBox UBound(arr) '返回第1维(行的)最大编号,结果为8MsgBox LBound(arr) '返回第1维(行的)小编号,结果为-19MsgBox UBound(arr, 2) '返回第2维(列的)最大编号,结果为5MsgBox LBound(arr, 2) '返回第2维(列的)最小编号,结果为2End SubSub t3()Dim arrarr = Sheets(1).UsedRange 'Usedrange的行数和列数是未知的MsgBox UBound(arr, 1) '可以计算这个区域有多少行MsgBox UBound(arr, 2) '可以计算出这个区域有多少列End Sub7.使用Array函数创建常量数组:使用Array函数创建数组1维常量数组:Array("A",1,"C")2维常量数组:Array(Array("a", 10), Array("b", 20), Array("c", 30))也可以调用excel工作表内存数组:1维数量:[{"A",1,"C"}]2维数量:[{"a",10;"b",20;"c",30}]内存常量数组有什么作用呢?1、简化赋值比如:我需要给数组arr分别赋值10 ,20,30,40,一般就需要分别赋值,即:arr(1)=10arr(2)=20arr(3)=30arr(4)=40而使用常量数量,只一句话:arr=array(10,20,30,40)2、调用工作表函数时使用:Sub mylook()Dim arrarr =[{"a",10;"b",20;"c",30}]MsgBox Application.VLookup("b", arr, 2, 0) '调用vlookup时可以作为第二个参数End Sub8.数组的合并和字符串拆分(Join & Split):多个字符的合并和字符串按规律的拆分是经常遇到的,如:A-REW-E-RWC-2-RWC按分隔符-拆分成6个字符放在一个数组中有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串上面两种情况VBA提供了一对函数,即:split(字符串,"分隔符")拆分字符串join(数组,"分隔符")用分隔连接数组的每个元成一个字符串Sub t1()Dim arr, myst As Stringmyst = "A-REW-E-RWC-2-RWC"arr = Split(myst, "-")'按-分隔成一组数装入数组中'MsgBox arr(0) '显示数组的第一个数(分隔后的数组最小下标为0,不是1),显示结果为AMsgBox Join(arr, ",") '再用","把数组的每个值连接成一个字符串,结果为"A,REW,E,RWC,2,RWC"End Sub值得注意的是:split和join只能对一维数组进行操作,如果是单元格或二维数组怎么办?只有一条途径,想办法转换为一维数组:Sub t2()Dim ARRARR = Application.Transpose(Range("a1:a3")) …用转置的方法,把单元格一列数据转换成一维数组MsgBox Join(ARR, "-")End Sub9. Filter函数实现数组筛选:数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的VBA函数是:Filter函数用法:Filter(数组,筛选的字符, 是否包含)Sub DD()arr = Array("ABC", "A", "D", "CA", "ER")arr1 = VBA.Filter(arr, "A", True) '筛选所有含A的数值组成一个新数组arr2 = VBA.Filter(arr, "A", False) '筛选所有不含A的数值组成一个新数组MsgBox Join(arr2, ",") '查看筛选的结果End Sub遗憾的是函数只能进行模糊筛选,不能精确匹配。
vba 数组函数
vba 数组函数
VBA是VisualBasicforApplications的缩写,是一种在Microsoft Office 应用程序中使用的编程语言。
VBA 提供了许多有用的函数和方法,其中包括一些用于处理数组的函数。
下面是一些常见的 VBA 数组函数:
1. LBound 函数:返回数组的下限。
2. UBound 函数:返回数组的上限。
3. Array 函数:创建一个数组。
4. Split 函数:将一个字符串分割成数组。
5. Join 函数:将一个数组合并成一个字符串。
6. Sort 函数:对数组进行排序。
7. Filter 函数:根据给定的条件过滤数组。
8. Redim 函数:调整数组的大小。
9. Copy 函数:复制数组。
10. Paste 函数:粘贴数组。
11. Reverse 函数:将数组中的元素反转。
12. IndexOf 函数:查找数组中指定元素的位置。
这些函数可以帮助您更轻松地处理数组,从而使您的 VBA 代码更加高效和简洁。
在编写 VBA 代码时,请务必考虑使用这些函数来优化您的代码。
- 1 -。
Excel VBA编程 典型实例——将数组赋值单元格
Excel VBA编程典型实例——将数组赋值单元格
在Excel中,主要操作都是在工作表中进行的,如输入数据等,同样也可以使用数组来实现该操作。
利用数组对单元格进行赋值可以减少劳动强度,而且还可以控制单元格的格式、字体或颜色。
1.练习要点
●使用数组赋值
●添加控件
2.操作步骤
(1)启动Excel 2007,打开【开发工具】选项卡。
在【开发工具】选项卡中,单击【插入】按钮,选择【表单控件】栏中的【按钮】控件,如图5-16所示。
选择
图5-16 插入按钮
(2)将控件放置到单元格中,此时弹出【指定宏】对话框,如图5-17所示,单击对话框中的【新建】按钮,弹出VBE窗口。
宏名单击
图5-17 指定宏窗口
(3)在VBE窗口中的【代码】编辑窗口内,如图5-18所示。
输入
图5-18 编写代码
编写的代码如下:
''定义了一个数组
Dim x%, y%, s(1 To 4, 1 To 5)
For x = 1 To 4
For y = 1 To 5
s(x, y) = x ^ y
Next y
Next x
'给单元格赋值
Sheets(1).Range("A1:E4") = s
'设置字体颜色
Range("A1:E4").Font.ColorIndex = 5
'设置字体背景色
Range("A1:E4").Font.ThemeColor = 8
(4)当单击按钮时,在工作表中的单元格将有数据出现。
VBA数组读写Excel行列单元格的值
VBA数组读写Excel行列单元格的值数组是一个相当好的变量集合,里面可以存放许多按实际要求但是不可意料其值的值!要使用数组,首先要定义数组,方能使用,如何定义,在上一篇已做了说明,在此不再阐述!数组根据不同的需求,可分为静态数组和动态数组,静态数组存储欲先设置话的值,相当于里面存储一个或多个静态变量的值;动态数组根据需要,可随时改变数组长度,并随时能修改存储的值;本文提供几个简单的例子,以方便各位的学习!代码一:将预定单元格的值存储到数组中----------------------------------------------------Sub ArrayGetValue() 'MyArray = Range("E3:E8")For i = 1 To 6MsgBox MyArray(i, 1)NextEnd Sub----------------------------------------------------代码解释:MyArray = Range("E3:E8") '将E3到E8单元格的值存储到数组MyArray中;For i = 1 To 6MsgBox MyArray(i, 1)Next'通过循环语句,读取MyArray的值并通过对话框形势显示出来;代码二:将一列数据存储到数组中----------------------------------------------------Sub ArrayGetValue() 'Dim MyArray() As StringDim iNum As IntegerDim i As IntegeriNum = Sheets("sheet1").[E65536].End(xlUp).RowReDim Preserve MyArray(iNum) As StringFor i = 1 To iNumMyArray(i - 1) = Sheets("sheet1").Range("E" & i).ValueMsgBox MyArray(5) '用于测试E6单元格的值,因为数组下标从0开始!End Sub----------------------------------------------------代码解释:iNum = Sheets("sheet1").[E65536].End(xlUp).Row '获取E列单元格的个数;ReDim Preserve MyArray(iNum) As String '重新定义数组的长度;以 iNum 为参考对象;Sub test()Dim myData(1 To 20)Dim i As IntegerFor i = 1 To 20myData(i) = Cells(i, 1).ValueNextRange("C1:C20").Value = Application.Transpose(myData) '垂直与水平一说见 Transpose 说明 End Sub。
一些有用的在VBA中处理数组的函数
一些有用的在VBA中处理数组的函数Array函数Array函数是一种使用值创建和填充数组的方法。
将所有的值作为参数传递给该函数,返回一个使用这些值作为元素的一维数组,数组值的顺序和传递给函数的数值的顺序相同。
第一个元素的索引值总是0,不依赖任何Option Base设置。
Sub TestArray()Dim myArray() As Variant'从逗号分隔的字符串列表中创建数组myArray = Array("One", "Two", "Three")'显示数组元素MsgBox myArray(0) & vbCr & myArray(1) & vbCr & myArray(2)'也可以使用数值作为参数myArray = Array(10, 20, 30)'显示数组元素MsgBox myArray(0) & vbCr & myArray(1) & vbCr & myArray(2)End SubArray函数总是返回Variant类型的数组,但元素的数据类型可以不同,取决于传递给该函数的数值的类型。
例如,Array(“One”, 2, 3.4)返回的数组,第一个元素是String 类型,第二个元素是Integer型,最后一个元素是Double型。
如果没有传递参数给Array函数,那么将返回一个空数组。
此时,数组的上界为-1,小于下界(总为0)。
例如,UBound(Array())将返回-1。
更多内容参见:Array函数。
Split函数如果所有的值都不是分开的,而是在一个字符串中,那么可以使用Split函数分开它们并创建一个一维字符串数组。
同样,结果数组的索引值总是以0开始。
可以指定字符串中分离值的分隔符,例如,逗号或分号。
如果没有指定分隔符,那么将通过空格分离字符串。
VBA进阶数组基础04:运用数组处理工作表数据
VBA进阶数组基础04:运用数组处理工作表数据本文系因违规而删除的2017年10月17日推送文章经修改后重新推送,已看过的朋友可直接飘过,免得浪费时间。
前面我们已经讲过,工作表就是一个二维数组,指定其水平维度(行)和垂直维度(列)就可以找到单元格,例如Cells(2,3)就是单元格C2。
而在二维数组中,使用其每一维的下标索引值即可从中获取元素,例如myArray(1,2)就是数组myArray的第2行第3列的元素。
在Excel中,可以将使用数组来存储单元格区域数据,并进行处理,然后再将数据输入到工作表,这比只是在工作表中处理数据更高效。
使用工作表数据填充数组如下图1所示的工作表。
图1使用下面的语句快速填充数组:Dim myArray AsVariantmyArray =Worksheets('Sheet1').Range('B2:C8')注意到,在声明数组变量时,并没有指定维数,也没有指定具体的数据类型,而是指定为Variant型。
因此,也可以使用下面的声明语句:Dim myArray下面的过程代码测试刚才创建的数组的维数及其上限和下限:Sub testArray()Dim myArray As Variant, vUBound As VariantDim i As Integer, str As StringmyArray =Worksheets('Sheet1').Range('B2:C8')i = 1Dostr = str & '第 ' & i& ' 维的下限 = ' & LBound(myArray, i) & _' 上限 = ' &UBound(myArray, i) & vbCr & vbCri = i 1On Error Resume NextvUBound = UBound(myArray, i)If Err.Number <> 0 Thenstr = str & '数组myArray包含的维数是: ' & i - 1Exit DoEnd IfOn Error GoTo 0LoopMsgBox strEnd Sub运行代码后的结果如下图2所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel VBA编程数组函数
在程序中,根据实际情况,需要判断某个变量是否为数组,或者数组的下标范围,可以使用系统提供的函数来进行这些操作。
下面分别介绍这些函数。
1.检测数组下标
利用Lbound与Ubound函数,可以返回指定数组中的最小或最大下标,即数组中的最小值和最大值。
格式:Lbound/Ubound(<数组名>[,<数组维序号>])
函数值为数组某维的下界(Lbound)或上界(Ubound),类型为Long,其中数组维序号为可选项,表示数组的指定维号,默认为1。
例如,显示数组中的数组元素,如图5-14所示。
显示
图5-14 显示的结果
其代码如下:
Sub 显示数组()
Dim A(-1 To 50, 10 To 30, -13 To 4, -5 To 15)
'显示最小下标
Debug.Print "第一维数组最小下标:" & LBound(A, 1)
Debug.Print "第二维数组最小下标:" & LBound(A, 2)
Debug.Print "第三维数组最小下标:" & LBound(A, 3)
Debug.Print "第四维数组最小下标:" & LBound(A, 4)
'显示最大下标
Debug.Print "第一维数组最大下标:" & UBound(A, 1)
Debug.Print "第二维数组最大下标:" & UBound(A, 2)
Debug.Print "第三维数组最大下标:" & UBound(A, 3)
Debug.Print "第四维数组最大下标:" & UBound(A, 4)
End Sub
2.判断数组
在实际应用中,数组和变量的区分不是很清晰,特别是定义的动态数组和变量更加难以区分。
为此VBA提供了isarray函数来判断是否是数组。
格式:isarray(变量名)
其值为逻辑型,指出指定的变量是否为一个数组.是则值为true,否则为false。
例如,声明数组s和变量a,b,判断其是否数组,其代码如图5-15所示。
显示
图5-15 显示效果
代码如下:
Sub 判断数组()
'声明数组变量
Dim s(1 To 5) As Integer, a, b
b = IsArray(a)
Debug.Print b
'使用数组函数
a = Array(1, 2, 3)
b = IsArray(s)
Debug.Print b
b = IsArray(a)
Debug.Print b
'Debug.Print s(1); a(1)
End Sub
3.数组的清除
对于静态数组,在创建完成后,其内存空间也分配完成,数组的大小将不能再改变。
如果需要清除数组的内容或对数组重新定义,可以使用erase语句来完成,其格式如下:格式:erase <数组变量名表列>
对指定的固定大小数组进行初始化,对指定的可调数组则释放其所占内存空间,数组变量名表列用来指定数组,由一个或多个用逗号隔开的数组变量名组成。
利用erase语句,可以对不同类型的静态数组产生不同的结果,如下表5-1所示。
表5-1 使用erase语句
例如,声明变量,然后使用erase语句清除。
Sub 清除数组()
'声明数组变量
Dim NumArray(10) As Integer
Dim StrVarArray(10) As String
Dim StrFixArray(10) As String * 10 Dim VarArray(10) As Variant
Dim DynamicArray() As Integer '分配存储空间
ReDim DynamicArray(10)
'将每个元素设为0。
Erase NumArray
'将每个元素设为零长度字符串Erase StrVarArray
'将每个元素设为0。
Erase StrFixArray
'将每个元素设为Empty
Erase VarArray
'释放数组所用内存。
Erase DynamicArray
End Sub。