vba - 检查范围内的数据类型

标签 vba excel excel-2010

我正在尝试使用 VBA 函数验证用户选择范围内所有单元格的数据类型是否相同。我有以下代码(简化),它在大多数情况下都有效:

Dim vTempRange As Variant
Dim vCell As Variant

    vTempRange = DataRange.Value

    For Each vCell In vTempRange
        If Len(vCell) > 0 Then
            'Use TypeName(vCell)
            'Complete validation here
        End If
    Next vCell

有时用户可以选择一列百分比,有时选择一列十进制值,有时选择时间值(与日期无关)。 VBA 似乎将所有这三个都视为 Double ,这在技术上是不正确的。问题是,选择的格式将被用作最终输出的一部分,所以 12:00:00应该这样显示,而不是 0.50 ,目前就是这样。

我研究过结合使用这样的东西:
Dim vCell As Variant

    For Each vCell In DataRange
        If Len(vCell) > 0 Then
            'Use vCell.NumberFormat
            'Complete validation here
        End If
    Next vCell

但是 NumberFormat不一致。例如,用户可能将百分比列为 0%0.000%或时间为 h:m:shh:mm:ss ,所以我认为很难正确捕获这个值。

有没有办法准确判断无需用户干预何时选择时间与其他类型之一?确定百分比值与 0<x<1十进制值也很好,但不是必需的。

我可以使用其他选项,例如忽略最终输出中的格式(真的不可取)或明确要求用户识别类型(但这既不像我想要的那样干净也不自动)。

最佳答案

尝试这个。将其粘贴到模块中。然后,您可以将其用作工作表公式。

我的数据库中有此代码,该代码取自 here我对其进行了修改以满足您的需求。

Public Function CellType(c)
    Application.Volatile
    Select Case True
        Case IsEmpty(c): CellType = "Blank"
        Case Application.IsText(c): CellType = "Text"
        Case Application.IsLogical(c): CellType = "Logical"
        Case Application.IsErr(c): CellType = "Error"
        Case IsDate(c): CellType = "Date"
        Case InStr(1, c.Text, ":") <> 0: CellType = "Time"
        Case InStr(1, c.Text, "%") <> 0: CellType = "Percentage"
        Case IsNumeric(c): CellType = "Value"
    End Select
End Function

截图

enter image description here

您可以进一步修改它以添加 IF Case IsNumeric(c): CellType = "Value" 内的子句使用 INSTR 检查小数、科学记数法等

关于vba - 检查范围内的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980484/

相关文章:

excel - 枢轴名称未分配,如何调试?

vba - 在vba中将powerpoint演示文稿另存为pdf

excel - 在VBA中粘贴特殊值

ruby-on-rails - Rails + 电子表格 gem : How to push row into sheet without index?

c# - 封闭的 XML。将 DataTable 添加到现有 Excel 工作表

excel - Excel 2010 中出现错误,Range 类的 PasteSpecial 方法在宏内失败

javascript - VBA 检查网页上的警报 <li> </li> 并在检测到时运行 Sub

excel - 嵌套 IFERROR、VLOOKUP、IF VBA 代码 + 向下复制

excel - 如何使用excel vba获取href属性

excel-2010 - Excel 2010 中的 SUMIF 错误