Excel VBA-检查值是否为双精度类型

Excel VBA-检查值是否为双精度类型,vba,excel,Vba,Excel,我有一列数字,我使用VBA将它们除以1000。但是,我只想在没有小数点的情况下这样做。也就是说,像10093、20398、2039348、298、299、10这样的数字都会被1000除,但2938.392883.2、.2不会 我想创建一个循环,检查单元格值是否为DOUBLE,如果是,跳过它-否则,除以 所以,我认为这可能有效,但它没有: For Each cel In importWS.Range(Cells(2, 2), Cells(dataLastRow - datafirstrow + 1

我有一列数字,我使用VBA将它们除以1000。但是,我只想在没有小数点的情况下这样做。也就是说,像10093、20398、2039348、298、299、10这样的数字都会被1000除,但2938.392883.2、.2不会

我想创建一个循环,检查单元格值是否为DOUBLE,如果是,跳过它-否则,除以

所以,我认为这可能有效,但它没有:

For Each cel In importWS.Range(Cells(2, 2), Cells(dataLastRow - datafirstrow + 1, 2))
    If Not CDbl(cel.Value) Then
        cel.Value = cel.Value / 1000
    End If
Next cel

有什么想法吗

CDbl将该值转换为双精度值

试一试


或者,检查整数:

With cel
    .Value = IIF(CLng(.Value)=.Value, .Value / 1000, .Value)
End With
这表示:如果它是整数/长(无小数),则除以1000,否则使用原始的
cel.Value

注意:这不适用于非常大的整数(任何大于
Long
数据类型的数据都会引发溢出错误)。

查找句号:

If IsNumeric(cellValue) And InStr(1, cellValue, ".") > 0 then isDouble = true

啊,谢谢你关于“CDbl”的留言。不幸的是,该语句总是正确的(对于293483类型和29.39类型)。它可能是“货币”,所以替代方法是:如果TypeName(cel.value)=“Double”,或者如果TypeName(cel.value)=“Currency”,那么……这与其他地区不兼容
If IsNumeric(cellValue) And InStr(1, cellValue, ".") > 0 then isDouble = true