将Excel电子表格中的值(使用VBA代码,非,通过导出到CSV)导出到文本文件时,我遇到了问题。
使用这些数字:
- (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
答案 0 :(得分: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
答案 1 :(得分:0)
使用Format
函数表示您的值
来自Excel帮助
返回Variant(String),其中包含根据格式表达式中包含的指令格式化的表达式。
格式(表达式[,格式[,firstdayofweek [,firstweekofyear]]])
答案 2 :(得分: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