Q:在使用Excel時(shí)經(jīng)常聽到單元格為空或空白,這樣的說法有區(qū)別嗎?
A:在Excel中,單元格為空(empty)或空白(blank)似乎可以互用,但它們有不同的含義:
空單元格指沒有包含任何內(nèi)容的單元格,在其中沒有常量、沒有公式、沒有前綴字符。
空白單元格指該單元格可以是空單元格、可以包括前綴字符或者空字符串(公式結(jié)果為空或者常量值)
在工作表中,檢查單元格為空的最好方法是使用ISBLANK工作表函數(shù),如下所示。
在中,第4行使用公式=COUNTBLANK(單元格)=1判斷指定單元格是否為空白單元格;在單元格B6中使用公式=COUNTBLANK(B3:E3)統(tǒng)計(jì)單元格區(qū)域B3:E3中空白單元格數(shù)。
在VBA中,可以使用Range.Value(或Range.Value2)屬性與vbNullString常量相比較的結(jié)果來判斷單元格是否為空白單元格:
SubCheckIsBlank()
Debug.PrintIsBlank(Sheet1.Range(“B3”)) ‘結(jié)果為False
Debug.PrintIsBlank(Sheet1.Range(“C3”)) ‘結(jié)果為True
Debug.PrintIsBlank(Sheet1.Range(“D3”)) ‘結(jié)果為True
Debug.PrintIsBlank(Sheet1.Range(“E3”)) ‘結(jié)果為True
End Sub
FunctionIsBlank(ByRef rngCheck As Range) As Boolean
IsBlank = (CStr(rngCheck.Cells(1).Value2) =vbNullString)
End Function
還有一個(gè)更有效的方法是調(diào)用工作表函數(shù)COUNTBLANK函數(shù):
Sub IfIsBlank()
Debug.PrintIfBlank(Sheet1.Range(“B3”)) ‘結(jié)果為False
Debug.PrintIfBlank(Sheet1.Range(“C3”)) ‘結(jié)果為True
Debug.PrintIfBlank(Sheet1.Range(“D3”)) ‘結(jié)果為True
Debug.PrintIfBlank(Sheet1.Range(“E3”)) ‘結(jié)果為True
End Sub
FunctionIfBlank(ByRef rngCheck As Range) As Boolean
IfBlank =(Application.WorksheetFunction.CountBlank(rngCheck.Cells(1)) = 1)
End Function
最后,再談?wù)効兆址?兆址且粋€(gè)長(zhǎng)度為的字符串,可以包含常量或者公式結(jié)果(為空)。例如,公式=””返回一個(gè)空字符串。如果你復(fù)制這個(gè)公式并粘貼為值時(shí)單元格中包含的空字符串為常量,有時(shí)從外部數(shù)據(jù)源導(dǎo)入數(shù)據(jù)時(shí)也會(huì)得到空字符串。
下面的HasNullString函數(shù)在單元格中包含空字符串時(shí)返回True。如果想要忽略公式結(jié)果(例如,僅檢查常量),那么給參數(shù)blnConstantsOnly傳遞True。如果單元格中有前綴字符,那么該函數(shù)返回False。
Public FunctionHasNullString( _
ByRef rngToCheck As Range, _
Optional ByVal blnConstantsOnly AsBoolean = False) _
As Boolean
Dim rngFirstCell As Range
Dim strToCheck As String
Dim varToCheck As Variant
Set rngFirstCell = rngToCheck.Cells(1)
varToCheck = rngFirstCell.Value2
If Not IsEmpty(varToCheck) Then
If blnConstantsOnly Then
strToCheck = rngFirstCell.Formula
Else
strToCheck = CStr(varToCheck)
End If
If strToCheck = vbNullString Then
HasNullString =(LenB(rngFirstCell.PrefixCharacter) = )
End If
End If
End Function