1

将值(使用 VBA 代码,而不是通过导出到 CSV)从 Excel 电子表格导出到文本文件时出现问题。

使用这些数字:

     -            (formatted so 0 displays as "-")
    0.10000000 
    0.0166666666666667 

If I debug.print the .Text then .Value property of each cell, the results are:
    -           --> 0
    0.10000000  --> 0.1
    0.01666667  --> 1.66666666666667E-02 

我的问题是,我想避免发生 0.0166666666666667 (在电子表格单元格中)-> 1.66666666666667E-02 (在单元格的 .Value 属性中)发生转换。

如果我改为读取 .Text 属性,结果会根据需要以小数形式出现,但问题是格式化为“-”的 0 被导出为“-”。

是否有一种“正确”的方法可以在所有情况下都有效地处理这个问题?
我必须在多个电子表格中使用最终解决方案,并且我无法控制每个电子表格中的显示格式设置或每个单元格的内容(即:不保证是数字数据)

示例代码

Public Function test()
    Dim cell As Range: Set cell = Worksheets("Sheet1").Range("A1")
    Dim i As Integer

    Dim vSingle As Single
    Dim vVariant As Variant
    Dim vDouble As Double

    For i = 0 To 4
        vSingle = cell.Offset(i, 0).Value
        vVariant = cell.Offset(i, 0).Value
        vDouble = cell.Offset(i, 0).Value
        Debug.Print cell.Offset(i, 0).Text & " --> " & cell.Offset(i, 0).Value & " : " & vSingle & " : " & vVariant & " : " & vDouble
    Next
End Function

结果是:

                                          -  --> 0 : 0 : 0 : 0
0.10000000  --> 0.1 : 0.1 : 0.1 : 0.1
0.01666667  --> 1.66666666666667E-02 : 1.666667E-02 : 1.66666666666667E-02 : 1.66666666666667E-02
 -->  : 0 :  : 0
 -->  : 0 :  : 0
4

3 回答 3

0

我无法复制您的问题,但也许您可以使用以下代码来提供帮助。基本上,您可以检查它是否为数字,然后将其存储到强类型变量中,然后将其导出。你可以使用这样的东西:

Dim num As Double

Do
    If (IsNumeric(Selection.Value)) Then
        num = Selection.Value
        ' Export num
    Else
        ' Export Selection.Value
    End If
Loop Until True
于 2012-04-11T19:29:02.207 回答
0

使用Format函数来表示你想要的值

从 Excel 帮助

返回包含根据格式表达式中包含的指令格式化的表达式的 Variant(字符串)。

格式(表达式[,格式[,firstdayofweek [,firstweekofyear]]])

于 2012-04-11T19:53:00.410 回答
0

我有一个类似的问题,因为我正在处理可以是字符串或数字的零件目录号。我的 VBA 代码从 Excel 源中获取一个值并将其分配到 Excel 目标模板中,然后由将其插入表中的应用程序进行处理。问题是大“数字”被转换成指数符号。但是,Acme Part# 847000003 <> Acme Part# 8.47E+08。我的解决方案是创建一个函数来测试输入值,将其格式化为通用数字并将其作为强制字符串(带有前缀撇号)返回。

Public Function ConvertExponentialNumber(p_strCatalogueNbr As String) As String

Dim varTemp As Variant

If IsNumeric(p_strCatalogueNbr) Then

    varTemp = Format(p_strCatalogueNbr, "General Number")

    ConvertExponentialNumber = Chr(39) & varTemp

Else

    ConvertExponentialNumber = p_strCatalogueNbr

End If

End Function
于 2017-06-01T17:03:55.277 回答