变量类型
用TypeName()函数可以判断变量类型。
TypeName(i)="Single" 就是单精度浮点数
TypeName(i)="String" 就是字符串
另外
IsNumeric
判断变量的值是否为数值
isdate
判断变量的值是否为日期
isnull
判断变量的值是否包含任何有效数据
isempty
判断变量的值是否为空
IsArray
判断出变量是否为一个数组。
IsError
判断变量是否返回的是一个错误值
IsObject
判断变量是否表示对象变量
【变量的类型指定格式】
private 或 public 或 Dim 变量名 as 数据类型
例子
Dim var12 as String
Dim var as Integer
Dim old as Integer, name as Object
常量的类型指定格式
(private 或 public 或无)Const 常量名 as 数据类型 = 値
【快速声明】
变量符号
例子:n%,表示n变量为整型数据。
字符串处理
len()==>一个参数,用 len() 函数获得一个字符串长度
使用 instr() ==>两个参数,第一个参数为需要判断的字符串,第二个参数为需要查找的字符串,判断是不是含某个字符,如果有,就会返回该字符出现的位置
使用 left() mid() ,right() 截取字符串. 用法同Excel函数
使用 replace() ==>三个参数,第一个参数为要处理的字符串,第二个参数为需要查找的旧字符串,第三个参数为需要替换为的新字符串。把字符串中的某个字符替换成其它字符. 接下来把字符串中的an 替换成love
使用 split() ==>三个参数,第一个参数为需要处理的字符串,第二个参数为需要分割的字符串标识(即需要按照什么分割),第三个一半为-1或者省略,把字符串按某个字符分割
常用函数的话还有 trim() ==>一个参数,可以把字符串前后的空字符串去掉,用法同Excel
StrReverse==>一个参数将字符串倒序排列。源:如果不能从右向左查找,那么先把字符串反过来,在从左向右查找不就行了,可是,怎么把字符串反过来呢? 就可以用这个
但是如果不想反过来,就可以从右向左取值,则可以使用Split + UBound即可,如下代码
Sub test()
Arr = Split("C:\Users\Bocheng\Desktop\1-200.txt", "\")
str1 = Arr(UBound(Arr))
MsgBox (str1)
End Sub
数组
动态数组中用REDIM改变数组最后一维的大小,但是如果数组中已经有了数据,如果只用redim的形式的话,数组中原有的数组就会丢失,为了保留数据,就需要加preserve关键字。
dim 我们见过,它在vba中可以声明变量
redim呢?是重新声明动态数组,以确定动态数组的大小,如
dim arr() '声明arr为一动态数组
声明后是不能直接用的,如 arr(1)=100 这样是错的,必须要声明arr数组的大小和维数才可以装入值,即
redim arr(1 to x)
这里x即可以是一个变量,也可以是一个数字,但变量必须是已确定值大小的,如:
x=range("a").end(xldown).row '先计算出a列的非值单元格的行数
redim arr(1 to x) '把行数作为动态数组的下标
说了这么多,主人公还没登场,别急,马上就来了
redim可以声明数组大小,但声明后数组大小是固定的,但如果数组的大小是变动的,我们不知道数组要填入多少值,如果我们还用redim 声明,是可以改变数组的大小,但原来输入的值全部都没有了。如果我们即要保留原来的值,又可以不断扩展数组的大小,该怎么办呢?于是preserve关键字就闪亮登场了。
一般情况下,我们常用下面的结构
dim arr()
for .......设置一个for循环
If .........IF条件判断符合条件的
k=k+1 变量k这里是一个计数器,统计符合条件的个数
redim preserve arr(1 to k) 重新定义数组的大小,又可以保留数组内现有的值
end if
next
注意:redim preserve 只能对数组的最后一维进行扩充,
千万不要这样 redim preserve arr(1 to k,1 to 2)
应该这样: redim preserve arr(1 to 2,1 to K)
如果需要扩充的是第一维怎么办,那就先如扩充第2维,最后用application.transpose转置一下就OK了
最后给大家提供一个示例吧,希望大家对动态数组的扩充有一个初步的理解。如果有哪里说的不对,请大家多多批评改正。
Sub test() ‘把A列大于50的数字装入数组中’
Dim arr(), x, k
For x = 1 To 34
If Cells(x, 1) > 50 Then
k = k + 1
ReDim Preserve arr(1 To k)
arr(k) = Cells(x, 1)
End If
Next x
End Sub