EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等

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

EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等_第1张图片

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

EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等_第2张图片

测试代码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

EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等_第3张图片

你可能感兴趣的:(VBA,#,VBA实验,EXCEL,vba,excel)