防火门能安装锁吗:一些有用的在VBA中处理数组的函数

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 02:55:49

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 Sub

Array函数总是返回Variant类型的数组,但元素的数据类型可以不同,取决于传递给该函数的数值的类型。
例如,Array(“One”, 2, 3.4)返回的数组,第一个元素是String类型,第二个元素是Integer型,最后一个元素是Double型。
如果没有传递参数给Array函数,那么将返回一个空数组。此时,数组的上界为-1,小于下界(总为0)。例如,

UBound(Array())

将返回-1。
更多内容参见:Array函数。

Split函数

如果所有的值都不是分开的,而是在一个字符串中,那么可以使用Split函数分开它们并创建一个一维字符串数组。同样,结果数组的索引值总是以0开始。
可以指定字符串中分离值的分隔符,例如,逗号或分号。如果没有指定分隔符,那么将通过空格分离字符串。
如果将一个空字符串传递给Split函数,那么将返回一个空数组。与Array函数一样,如果为空则返回的数组上界为-1。
当给Split函数传递一个字符串且没有包含分隔符时,不会获得一个空数组。此时,返回的数组包含一个元素,就是字符串本身。
Split函数功能相对的函数是Join函数。该函数接受一组字符串作为参数,并返回包含数组所有元素所组成的字符串。可以指定分隔符,这样将在每个值之间添加该分隔符。
如果给Join函数传递一个空数组,那么将返回一个空字符串。

Sub TestSplitJoin()Dim myStr As StringDim myArray() As String '由逗号分隔的字符    myStr = "A1,B2,C3"'将字符串分成一组子字符串    myArray = Split(myStr, ",")'显示数组元素    MsgBox myArray(0) & vbCr & myArray(1) & vbCr & myArray(2)'将数组的所有元素合成一个字符串    '使用 " and " 连接    myStr = Join(myArray, " and ")'显示字符串    MsgBox myStrEnd Sub

Filter函数

如果想检查是否某项存在于一组字符串中,则可以遍历所有项并和匹配的字符串相比较,但此时也可以使用Filter函数。

Filter(myArray, myMatch, myInclude)

接受myArray,并将其元素中的每一项与myMatch中的字符串相比较,取决于myInclude是True(缺省的)或False,返回一个数组,包含myArray中包含myMatch的所有元素,或者不包含myMatch的所有元素。
查找是区分大小写的,因此如果myMatch是小写,那么不会查找包含该字母大写形式的元素,反之亦然。
由于该函数返回一个包含所找到的元素的新数组,不能够在查找到的数组里获得元素的索引值。该函数仅告诉你元素是否存在,即包含/不包含匹配字符串,是哪个而不是在哪儿。
如果没有找到匹配的元素,那么Filter函数返回一个没有元素的数组,其上界值是-1。
Filter函数的另一个限制是不能要求它仅查找完全匹配项,它总是返回包含匹配字符串的所有的元素,换句话说,比较而不是检查。
这个函数总是比较字符串,因此如果你筛选一个数值数组,那么它将数值转换成字符串,然后检查它们。因为它不会仅查找完全匹配项,所以查找一个数值将不仅返回等于该匹配的元素,而且也包含将该数值作为一部分的元素,例如:

Filter(Array(1, 10, 210), 1)

将返回该数组中的所有元素,因为每个数值里面都有1。
测试Filter函数的示例:

Sub TestFilter()Dim myArray() As VariantDim myFilteredArray As Variant '创建数组    myArray = Array("One", "Two", "Three") '筛选数组中包含"T"的元素    myFilteredArray = Filter(myArray, "T", True)'显示结果    MsgBox "在数组(""One"", ""Two"", ""Three"")中 " & _"筛选含有 ""T"" 的元素将返回" & _vbCr & Join(myFilteredArray, vbCr)'筛选数组中不包含 "T" 的元素    myFilteredArray = Filter(myArray, "T", False)'显示结果    MsgBox "在数组(""One"", ""Two"", ""Three"")中 " & _"筛选不含有 ""T"" 的元素将返回" & _vbCr & Join(myFilteredArray, vbCr)'筛选数组中含有 "t" 的元素    myFilteredArray = Filter(myArray, "t", True)'显示结果    MsgBox "在数组(""One"", ""Two"", ""Three"")中 " & _"筛选含有 ""t"" 的元素将返回" & _vbCr & Join(myFilteredArray, vbCr)'在数值数组中筛选数字 "1"    myArray = Array(1, 2, 3, 10)myFilteredArray = Filter(myArray, 1)'显示结果    MsgBox "在数值数组(1, 2, 3, 10)中 " & _"筛选含有 1 的数组元素返回" & _vbCr & Join(myFilteredArray, vbCr)End Sub

下面的代码示例展示如何仅获取完全匹配的元素:

Sub FilterExactly()Const myMarker As String = "!"Const myDelimiter As String = ","Dim myArray() As VariantDim mySearchArray As VariantDim myFilteredArray As Variant '创建数组    myArray = Array(1, 2, 3, 10)'预先在数组中筛选包含1的元素    myFilteredArray = Filter(myArray, 1) If UBound(myFilteredArray) > -1 Then'标记每个找到的元素的开始和结束        'myMarker和myDelimiter必须是字符        '且该字符不会出现在数组的任何元素中!        mySearchArray = Split(myMarker & Join(myFilteredArray, myMarker & _myDelimiter & myMarker) & myMarker, myDelimiter)'下面筛选修改后的数组        myFilteredArray = Filter(mySearchArray, _myMarker & "1" & myMarker)'从结果中移除标记        myFilteredArray = Split(Replace(Join(myFilteredArray, _myDelimiter), myMarker, ""), myDelimiter)End If'显示结果    MsgBox "筛选数组(" & Join(myArray, ", ") & _") 以获得含有1的完全匹配的元素将返回:" & _vbCr & Join(myFilteredArray, vbCr)End Sub
 
数组的实参在函数中怎么使用? vb中函数的参数如何使用多维数组? 主函数定义数组a[10],从键盘输入十个数,然后调用自定义函数求出最小的元素,最后在主函数中输出结果 excel的vba中绘图的一些问题 c语言中如何判断一数是否在一已知数组中?有没有这样的函数 VBA编程中求某列的最大值的函数 在一个函数中用malloc()函数申请了一个int数组的空间,然后做了一些运算,后来,调用free()报错。为什么 在delphi中可以用多维动态数组作函数的参数吗?语法是怎样的? VB中有没有和 VBA中 Nz()函数功能类似的方法呢? C++程序语言中处理数据的函数 数组、函数、指针的综合应用 excel中VBA的问题 如何在函数中引用多维数组中的一维? 数组需要在析构函数中释放空间么? 在excel的VBA中计算某列中数据的最大值!!!! c++中希望用数组作为函数的引用参数的代码该怎么写 关于在powerpoint中使用vba的问题 编写一个函数,求出一维整型数组a[n]中所有元素的平方和。 如何用VBA编写一个自定义函数,使它可以从关闭的文件中搜索数字或文本,而且该函数在工作表公式中必须可用 使用函数模板,编写可以实现对数组Array排序4操作的程序(数组的输入和输出在main函数种实现 求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 java 里有没有判断一个数在一个数组内的函数 由N个变量元素组成的数组怎样定义和在函数里使用?