Я давно использую свою собственную функцию IsNumber именно из-за этой ситуации. IsNumeric также может возвращать true для определенных денежных символов, например: IsNumeric ("$ 34.20").
Моя функция IsNumber выглядит следующим образом:
Public Function IsNumber(ByVal Data As String) As Boolean
If Data = "" Then
IsNumber = False
Exit Function
End If
IsNumber = IsNumeric(Data & "e0")
End Function
Идея здесь в том, что ... если в данных уже есть e или d, добавление другого приведет к тому, что данные НЕ будут числовыми с помощью проверки IsNumeric. Вы можете легко изменить эту функцию, чтобы разрешить только целые числа, заменив «e0» на «.0e0». Хотите только натуральные числа? затем используйте это: IsNumeric ("-" & Data & ".0e0")
Единственным недостатком этого метода является то, что пустая строка обычно не является числовой, но когда вы добавляете к ней «e0», она становится числовой, поэтому вам нужно добавить проверку для этого, как я сделал в своем коде.