在 VBA 環境中,我們可以使用 IsNumeric 函數,預先判斷變數是否可以轉為數字,避免變數文字轉數字時發生錯誤。本文以範例說明如何操作 IsNumeric 函數,並介紹 IsNumeric 函數跟 IsNumber 函數的差異。
內容目錄
IsNumeric 語法說明
IsNumeric 函數會檢查輸入的變數是否能轉為數字,並返回布林值(TRUE 或 FALSE)。如果可以轉為數字,回傳 True; 否則,回傳 False
IsNumeric( variable )
備註:變數(variable)類型可以是”字串”或是”數字”
IsNumeric 使用範例
以下範例,我們使用 IsNumeric 函數判斷 variable 變數是否可以轉為數字,並將回傳值輸入至 bl 布林變數,最後呼叫 MsgBox 顯示 bl 變數回傳值
Sub IsNumeric_exapmle()
Dim variable As String
Dim bl As Boolean
variable = "123"
bl = IsNumeric(variable)
MsgBox "variable值:" & variable & vbCrLf & "IsNumeric 函數回傳:" & bl
End Sub
行數 | 說明 |
---|---|
2 | 宣告字串變數 |
3 | 宣告布林變數 bl。後續會將 IsNumeric 回傳的布林值,輸入至變數 bl |
5 | variable 變數輸入”123” |
6 | 呼叫 IsNumeric,將回傳值輸入至 bl 變數 |
8 | 呼叫 MsgBox,顯示 bl 變數回傳值 |
特殊情況
使用 IsNumeric 函數時,要特別注意以下三種變數資料
空白值
使用 IsNumeric 函數時,我們需要注意“空白”並不等於零(0),空白被視為非數字,IsNumeric(“”) 回傳 False。因此,如果要將空白視為數字,需要使用條件判斷式來處理
Sub IsNumeric_space()
Dim variable As String
Dim bl As Boolean
variable = ""
bl = IsNumeric(variable)
MsgBox "variable值:" & variable & vbCrLf & "IsNumeric 函數回傳:" & bl
End Sub
日期
IsNumeric 函數的另一個特殊情況是”日期”。在 VBA 中,IsNumeric 函數將日期視為非數字,IsNumeric(“2022/1/16”) 回傳 False
我們以 DateSerial 函數輸出日期格式,IsNumeric 函數仍然回傳 False,IsNumeric(DateSerial(2022, 1, 16)) 回傳 False
Sub IsNumeric_date()
Dim variable As String
Dim dVariable As Date
Dim text1, text2 As String
variable = "2022/1/16"
dVariable = DateSerial(2022, 1, 16)
text1 = "variable值:" & variable & vbCrLf & "IsNumeric 函數回傳:" & IsNumeric(variable)
text2 = "dVariable值:" & dVariable & vbCrLf & "IsNumeric 函數回傳:" & IsNumeric(dVariable)
MsgBox text1 & vbCrLf & vbCrLf & text2
End Sub
時間
IsNumeric 函數對”時間”判斷較複雜,共有三種情況:
- 字串類型的時間,回傳 False
- 時間類型的時間,回傳 False
- 儲存格內的時間,回傳 True
以下為上述情況範例:
Sub IsNumeric_time()
Dim variable As String
Dim tVariable As Date
Dim cellVariable As String
Dim text1, text2, text3 As String
variable = "10:00:00 AM"
tVariable = TimeSerial(10, 0, 0)
cellVariable = ActiveWorkbook.Sheets(1).Cells(1, 1)
text1 = "variable值:" & variable & vbCrLf & "IsNumeric 函數回傳:" & IsNumeric(variable)
text2 = "tVariable值:" & tVariable & vbCrLf & "IsNumeric 函數回傳:" & IsNumeric(tVariable)
text3 = "cellVariable值:" & cellVariable & vbCrLf & "IsNumeric 函數回傳:" & IsNumeric(cellVariable)
MsgBox text1 & vbCrLf & vbCrLf & text2 & vbCrLf & vbCrLf & text3
End Sub
在 VBA 中呼叫 Excel 工作表函數 IsNumber()
IsNumeric 函數的替代方法,是呼叫 Excel 工作表函數 IsNumber()
Sub IsNumber_example()
Dim variable As String
Dim bl As Boolean
variable = "123"
bl = Application.WorksheetFunction.IsNumber(variable)
MsgBox "variable值:" & variable & vbCrLf & "IsNumber 函數回傳:" & bl
End Sub
IsNumber 和 IsNumeric 差異
IsNumber 為 Excel 函數,目的在檢查儲存格的值是否為數字;IsNumeric 為 VBA 函數,目的在檢查值是否可以轉換為數字。
舉例來說,如果我們分別用 IsNumber、IsNumeric 檢查空白儲存格,IsNumber 會回傳 FALSE;IsNumeric 會回傳 TRUE。
我們需要注意這兩個函數不同的特性,並決定在哪些情況下使用 IsNumber 或 IsNumeric。以下為兩個函數的比較表
資料 | 資料型態 | IsNumeric 回傳值 | IsNumber 回傳值 |
---|---|---|---|
123 | 數字 | True | True |
“123” | 字串 | True | False |
2022/1/16 | 日期 | False | True |
“2022/1/16” | 字串型態的日期 | False | False |
DateSerial(2022, 1, 16) | 日期型態的日期 | False | False |
10:00:00 AM | 儲存格內的時間 | True | True |
“10:00:00 AM” | 字串型態的時間 | False | False |
TimeSerial(10, 0, 0) | 時間類型的時間 | False | False |
“”(空白值) | 字串 | False | True |
如果本篇文章有幫助到你,請在下方拍手圖示按 5 下。只要花幾秒鐘登入 Google 或 FB 帳號,不需任何花費就能提供我實質的回饋,支持我繼續創作,謝謝