VBA 当数字包含逗号时,数字格式为文本的问题
VBA Issue with Number formatted as text when numbers include comma
我使用 vba 脚本打开另一个工作簿。此工作簿的格式为 .XLS,数据库中的内容存储如下:
"Name1" "0" "7,98"
"Name2" "5" "1"
"Name3" "2" "7,1"
使用 VBA 脚本打开工作簿时,每个包含逗号的单元格都被解释为文本并显示此警告:
此单元格中的数字格式为文本或以撇号开头
奇怪的是,如果我通过双击打开文件,数字只是格式化为文本并且没有显示任何错误。我想,Excel 正在做一些口译,但没有用。
我的代码是:
Dim WorkBookImport As Workbook
Name = Application.GetOpenFilename()
If Name <> False Then
Set WorkBookImport = Workbooks.Open(Filename:=Name)
End If
我尝试了以下所有方法:
Range(mycolumn).Value = Range(mycolumn).Value
使用 CDbl(.Value) 的 For 循环
范围(我的列).TextToColumns ...
没有任何效果 ;( 请帮忙!
单元格的格式有问题。您应该使用 NumberFormat 来更改它。
Sub FormatNumber()
ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange") = CDbl(ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange"))
ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange").NumberFormat = "General"
End Sub
如果遇到相反的问题,您也可以使用 NumberFormat 将其更改为文本,在这种情况下,您可以使用 NumberFormat = "@"
Option Explicit
Sub edksg()
Dim c As Range
Set c = Sheet1.Range("D3")
c.Value2 = CDbl(c.Value2)
End Sub
当工作表的单元格 D3 格式设置为文本时,对我来说工作正常。
当然,我的位置使用逗号作为小数点分隔符,因此如果您的位置使用不同的标准,则可能存在问题。在这种情况下,执行类似 CDbl(Replace(c.Value2, ",", Application.DecimalSeparator, 1, -1, vbBinaryCompare))
的操作可能会解决部分问题。
如果您想遍历整个某些列,最终结果可能看起来像这样,假设您要转换为数字的值在列 C 中。
Option Explicit
Sub edksg()
Dim c As Range
Dim r As Range
Set r = Sheet1.Range("C1:C" & Sheet1.Range("C" & Sheet1.Rows.Count).End(xlUp).Row)
For Each c In r
If Len(c) > 0 Then
c.Value2 = CDbl(Replace(c.Value2, ",", Application.DecimalSeparator, 1, -1, vbBinaryCompare))
End If
Next c
End Sub
我使用 vba 脚本打开另一个工作簿。此工作簿的格式为 .XLS,数据库中的内容存储如下:
"Name1" "0" "7,98"
"Name2" "5" "1"
"Name3" "2" "7,1"
使用 VBA 脚本打开工作簿时,每个包含逗号的单元格都被解释为文本并显示此警告:
此单元格中的数字格式为文本或以撇号开头
奇怪的是,如果我通过双击打开文件,数字只是格式化为文本并且没有显示任何错误。我想,Excel 正在做一些口译,但没有用。
我的代码是:
Dim WorkBookImport As Workbook
Name = Application.GetOpenFilename()
If Name <> False Then
Set WorkBookImport = Workbooks.Open(Filename:=Name)
End If
我尝试了以下所有方法:
Range(mycolumn).Value = Range(mycolumn).Value
使用 CDbl(.Value) 的 For 循环
范围(我的列).TextToColumns ...
没有任何效果 ;( 请帮忙!
单元格的格式有问题。您应该使用 NumberFormat 来更改它。
Sub FormatNumber()
ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange") = CDbl(ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange"))
ThisWorkbook.Worksheets("YourWorkbook").Range("YourRange").NumberFormat = "General"
End Sub
如果遇到相反的问题,您也可以使用 NumberFormat 将其更改为文本,在这种情况下,您可以使用 NumberFormat = "@"
Option Explicit
Sub edksg()
Dim c As Range
Set c = Sheet1.Range("D3")
c.Value2 = CDbl(c.Value2)
End Sub
当工作表的单元格 D3 格式设置为文本时,对我来说工作正常。
当然,我的位置使用逗号作为小数点分隔符,因此如果您的位置使用不同的标准,则可能存在问题。在这种情况下,执行类似 CDbl(Replace(c.Value2, ",", Application.DecimalSeparator, 1, -1, vbBinaryCompare))
的操作可能会解决部分问题。
如果您想遍历整个某些列,最终结果可能看起来像这样,假设您要转换为数字的值在列 C 中。
Option Explicit
Sub edksg()
Dim c As Range
Dim r As Range
Set r = Sheet1.Range("C1:C" & Sheet1.Range("C" & Sheet1.Rows.Count).End(xlUp).Row)
For Each c In r
If Len(c) > 0 Then
c.Value2 = CDbl(Replace(c.Value2, ",", Application.DecimalSeparator, 1, -1, vbBinaryCompare))
End If
Next c
End Sub