防止Excel从VBA重新格式化科学记数法

时间:2014-07-28 17:47:35

标签: excel vba excel-vba

在你声称这可能是重复之前,请听我说。

我试图为我的公司编写一些代码,以便能够将数据解析到服务器上,为了做到这一点,我需要使用科学记数法。

我已经找到了如何使用Format()将常规数字转换为科学记数法,但我的问题是我需要Excel显示0.0000e + 00,而不是0.00e + 00

我的代码非常基础:

Sub ConvertScientific()
    Dim org, conv
    If IsNumeric(Range("a2").Value) = True Then
        org = Range("a2").Value
    Else
        MsgBox ("This is not a valid number!")
    End If
    conv = Format(org, "0.0000E+00")
    Range("b2").Value = conv
End Sub

其中大部分内容甚至不需要触摸,但我遇到的问题是,尽管我已将格式定义为"0.0000e+00",但它仍然会导致0.00e+00格式。

这对我的程序非常重要,主要是因为它意味着在没有定义的电子表格的情况下自动运行,其中十进制值在某些单元格上设置为4。我知道可以使用我想要的格式,但我能够做到的唯一方法就是手动完成。

非常感谢任何有建议的人。

编辑:

我发现重新格式化的一种可能方法是使用Range().NumberFormat属性,但是有两行代码似乎很傻,其中一行应该足够了。如果有人能解释为什么我的代码不能正常工作,请随时告诉我1+和/或有效答案。

1 个答案:

答案 0 :(得分:4)

为了让Excel按照你的描述进行显示,在将conv输入到B2之前,你可以将其格式化为四位小数科学或文本格式;或者您可以在conv之前使用单引号

选项1

With [B2]
    .numberformat = "@"
    .value = conv
end with

选项2

with [B2]
    .NumberFormat = "0.0000E+00"
    .Value = conv
end with

选项3

[B2].Value = "'" & conv

编辑:Excel会将数字值视为数字;它根据它正在使用的IEEE标准存储它们,并在它认为合适时显示它们。这就是您的参赛作品。为了控制Excel如何显示值,您必须输入值作为文本,或者根据需要格式化单元格。