VBA-常用小知识点-长期更新(自用)

  • 变量类型 
用TypeName()函数可以判断变量类型。
TypeName(i)="Single" 就是单精度浮点数
TypeName(i)="String" 就是字符串

另外
IsNumeric
判断变量的值是否为数值
isdate
判断变量的值是否为日期
isnull
判断变量的值是否包含任何有效数据
isempty
判断变量的值是否为空
IsArray       
 判断出变量是否为一个数组。
IsError
判断变量是否返回的是一个错误值
IsObject
判断变量是否表示对象变量

 

数据类型英文声明符占用字节(byte)范围备注
整型Integer%2-32768~32767小数点四舍五入
长整型Long&4-2147483648~2147483647小数点四舍五入
单精度浮点型Single!4负数:-3.402823e38~-1.401298e-45运算比上面慢
正数:1.401298e-45~3.402823e38
双精度浮点型Double#8300多位 
字符串型String$最多20亿个字符 区分大小写
字节型Byte 10~255常储存二进制数据
布尔型Boolean 2只有True或False 
变体型Variant   变量的默认类型
日期型Date 8100.0101~9999.12.31 
货币型Currency@8 小数点左边4位,右边15位
【变量的类型指定格式】

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值