Excel VBA-检查值是否为双精度类型
我有一列数字,我使用VBA将它们除以1000。但是,我只想在没有小数点的情况下这样做。也就是说,像10093、20398、2039348、298、299、10这样的数字都会被1000除,但2938.392883.2、.2不会 我想创建一个循环,检查单元格值是否为DOUBLE,如果是,跳过它-否则,除以 所以,我认为这可能有效,但它没有: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
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