【发布时间】:2017-04-23 11:08:55
【问题描述】:
我知道 range().HasFormulareturn 仅当范围内的每个单元格都有公式时才返回 True,否则它可以返回 False 或 Null(混合时)。但是没有像 HasNumber 这样的函数。所以要检查一个范围是否只包含数字,我必须这样做
Dim all_numeric As Boolean
all_numeric = True
For Each cell In Range()
If (Not IsNumeric(cell)) Or IsEmpty(cell) Then 'I also want to get rid of empty cell
all_numeric = False
Exit For
End If
Next cell
此外,WorksheetFunction.IsNumber 做了类似的事情,但仍需要循环遍历范围。 如果范围包含大量数字,我不确定这是否会非常慢。我想知道是否有更好的方法来检查 VBA 中范围对象的数值。
【问题讨论】:
-
可能是
all_numeric = (r.Cells.Count - Application.Count(r)) = 0(其中r是Range对象)? -
@YowE3K 嗯,漂亮!
-
这将是 Code Review 最擅长的。我实际上会包含函数的签名/整个主体;如果它只是更大程序的一部分,我会包括整个程序。如果该过程使用模块级变量,我将只包含整个模块。