VBA 判斷數字 | IsNumeric 函數使用說明

vba-IsNumeric

在 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
5variable 變數輸入”123”
6呼叫 IsNumeric,將回傳值輸入至 bl 變數
8呼叫 MsgBox,顯示 bl 變數回傳值
isnumeric_example

特殊情況

使用 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_space

日期

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_date

時間

IsNumeric 函數對”時間”判斷較複雜,共有三種情況:

  1. 字串類型的時間,回傳 False
  2. 時間類型的時間,回傳 False
  3. 儲存格內的時間,回傳 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
isnumeric_time

在 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_example

IsNumber 和 IsNumeric 差異

IsNumber 為 Excel 函數,目的在檢查儲存格的值是否為數字;IsNumeric 為 VBA 函數,目的在檢查值是否可以轉換為數字。

舉例來說,如果我們分別用 IsNumber、IsNumeric 檢查空白儲存格,IsNumber 會回傳 FALSE;IsNumeric 會回傳 TRUE。

我們需要注意這兩個函數不同的特性,並決定在哪些情況下使用 IsNumber 或 IsNumeric。以下為兩個函數的比較表

資料資料型態IsNumeric 回傳值IsNumber 回傳值
123數字TrueTrue
“123”字串True False
2022/1/16日期FalseTrue
“2022/1/16”字串型態的日期FalseFalse
DateSerial(2022, 1, 16)日期型態的日期FalseFalse
10:00:00 AM儲存格內的時間TrueTrue
“10:00:00 AM”字串型態的時間 FalseFalse
TimeSerial(10, 0, 0)時間類型的時間FalseFalse
“”(空白值)字串FalseTrue

如果本篇文章有幫助到你,請在下方拍手圖示按 5 下。只要花幾秒鐘登入 Google 或 FB 帳號,不需任何花費就能提供我實質的回饋,支持我繼續創作,謝謝

發表迴響