首页 > 解决方案 > 将文本转换为数字的宏会产生不一致的结果

问题描述

我的个人工作簿中有一个宏,我用它来将文本转换为数字,因为数据加载到我们的一个 SQL 服务器时存在一些问题。问题是它产生了不一致的结果。代码是:

Sub ConvertTextToNumber()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Dim DataRange As Variant
    Dim r As Range
    Dim i As Long
    Dim lrow As Long
    Dim lcol As Integer
    Dim MyVar

    DataRange = Range("A1:FZ6000").Formula

    For lrow = 1 To 6000
        For lcol = 1 To 156
        MyVar = DataRange(lrow, lcol)
        If IsNumeric(MyVar) Then
            MyVar = Val(MyVar)
            DataRange(lrow, lcol) = MyVar
        End If
        Next lcol
    Next lrow
    Range("A1:FZ6000").Formula = DataRange

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub

大多数情况下这是有效的;但是,我今天注意到一些格式化为文本的值没有正确转换。

CellQ33的值为 ,105,238CellQ35的值为689,563。当我运行宏时,这两个单元格被转换为零。我打开了一个新工作簿来测试这个问题,放入'128,899CellA1以便将其格式化为文本,运行我的宏,然后将其转换为128.

考虑到返回值的差异,我找不到导致它的原因或原因,我希望有人有更好的方法或以前处理过这个问题。

感谢你们提供的任何帮助!

标签: vbaexcel

解决方案


您已经知道范围Range("A1:FZ6000"),我不知道您为什么要设置lrowlcol而且第 156 列是 EZ 列而不是 FZ。话虽如此,您不必遍历所有列,下面是将文本转换为数字的简单方法。

With Range("A1:FZ6000")
    .NumberFormat = "General"
    .Value = .Value
End With 

推荐阅读