EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等
原文链接:https://blog.csdn.net/xuemanqianshan/article/details/111415364
1 EXCEL里的几种空值:blank,“” , 0
1.1 EXCEL里,一般有两种空值:blank,“”
1.1.1 空值blank
空值:blank ,一般指完全没有内容 / 没有用过 /没有初始化过/ 被删除单元格内容后的状态
判断函数,isblank()
1.1.2 excel里的特殊假空值 “” (本质是空字符串吧)
假空值:“” , EXCEL里常用的空值,空值判断,
常这么用,但是其实不太精确,一般意义上,我觉得可以认为是 “""只是代表 一个空字符串而已”
判断函数套用if: if(a1=“”,true,false)即可判断
1.1.3 excel里的函数返回值0,部分情况下
0,我觉得不能被当成空值
这个0,可能是用户输入的数字0,但这里说的不是这个
0 和空值没啥关系,权且最多被当成一种函数的特殊返回值吧
为什么说到EXCEL空值的时候,说到0呢?
因为很多EXCEL内置函数的返回值也会返回0,比如 “= 等号” ,当 =引用到一个空单元格时会返回0,
函数直接引用或间接引用空单元格的值,返回的是0
EXCEL里引用空单元格,如果经过函数的引用了,返回的就不会是空值了,而是0
比如EXCEL的直接引用 = ,会自动返回0
间接引用 =indirect() 引用的空单元格,会自动返回0
1.2 EXCEL里,那些情况会被识别为 blank?
blank() 识别为true的情况,比 识别"" 更严格
其实EXCEL用户平时很少用到 blank 这种空值!一般都是所见即所得,判断 if=""了!
EXCEL的真正空值是 blank
只能用=isblank() 来判断
> 只有下面2种情况EXCEL里 isblank() 返回为true
1 单元格确实没内容 ,用isblank()判断为true
2 EXCEL的内置函数一般不能返回空值,但是用函数缺省的办法,可以返回 blank
比如 isblank(if(1=1,)) ,用isblank()判断为true
1.3 EXCEL里,那些情况会被识别为 “” ?
我认为 “” 就是EXCEL 里使用比较频繁的一种空值, 大家叫习惯了
使用EXCEL时,大多数情况下只需要判断 if(A1=“”,true,false) 即够用了
实际就是空 字符串"" ,并不是真的空值,是一种假的空,是有东西的(东西就是空字符串"")
只是EXCEL 默认单元格里的 “” 显示上看不见,即EXCEL用户理所当然的认为是 空的
单元格没有内容,EXCEL用户一般用 if=“” 来判断,
一般来说可以被识别是blank的都可以识别为"",反之则不行
1.4 EXCEL内置函数对空值的处理能力
函数无法返回真正的blank
函数可以写成返回值是""
函数直接引用或间接引用空单元格的值,返回的是0
1.5 EXCEL里测试 blank , “” 和 0
2 VBA的 “空值”
2.1 VBA里几种不同的空值
VBA里所谓的 “空值” 是指 变量为空,而这和变量类型密切相关
数据类型
1 数值型的变量 默认 0
2 字符串 string 默认"" 就是空。
3 Variant类型变量 默认用 null 但其他类型变量不能这样用。
4 object 类 默认 nothing,对象类型记得用set XXX= 这样赋值,而不是let 或者省略!比如 image1.picture = nothing
2.2 判断各种空值的VBA函数
VBA函数
IsEmpty(expression) 测试变量是否已经被初始化
如果一个变量没有被初始化,dim a ,那么判断一般是isempty(a)=true
但是如果设置了a=null,而判断isempty(a)=false
IsNull(expression)
Null 值指出变量不包含有效数据。
指明 expression 是否包含任何有效数据(Null)。
测试可发现 变量=“” 是len=0的空字符串,也不是null
if len() =0 也可以判断,内容长度为0
类 空 “” 等很多都可以这样判断
这种并不是真的空,只是一种快捷的判断
测试代码1
Sub ttff1()
Dim a
Debug.Print "Dim a"
Debug.Print "IsEmpty(a)=" & IsEmpty(a)
Debug.Print "IsNull(a)=" & IsNull(a)
'Debug.Print Isblank(a) 'isblank()是EXCEL的函数,VBA里没有
Debug.Print ""
a = Null
Debug.Print "a=null"
Debug.Print "IsEmpty(a)=" & IsEmpty(a)
Debug.Print "IsNull(a)=" & IsNull(a)
Debug.Print ""
a = ""
Debug.Print "a="""""
Debug.Print "IsEmpty(a)=" & IsEmpty(a)
Debug.Print "IsNull(a)=" & IsNull(a)
Debug.Print ""
a = 1
Debug.Print "a=1"
Debug.Print "IsEmpty(a)=" & IsEmpty(a)
Debug.Print "IsNull(a)=" & IsNull(a)
Debug.Print ""
End Sub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
测试代码2
Sub t1t1()
Dim a As Integer
Dim strb As String
Dim wb As Object
Dim x As Variant '或 dim x 默认就是variant类型的变量
a = 100
b = "abc"
Set wb = ThisWorkbook
x = Array(1, 2, 3)
Debug.Print a
Debug.Print b
Debug.Print wb.Name
Debug.Print x(0)
Debug.Print
Debug.Print "-------按变量类型给置空后--------"
a = 0
b = ""
Set wb = Nothing
x = Null
Debug.Print a
Debug.Print b
'Debug.Print wb '对象置空后好像不能这样debug.print
Debug.Print x
'a = Null '非variant变量,不能置为null
'Debug.Print a
End Sub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
————————————————
版权声明:本文为CSDN博主「奔跑的犀牛先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xuemanqianshan/article/details/111415364