excel 文本到数字崩溃大文件

xtfmy6hx  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(140)

下面的代码将文本转换为数字,前缀为0的值除外。002A。
此代码适用于小数据文件,但在大文件上崩溃Excel,即使我在代码运行前关闭计算。
vba

Sub Text2Number()
    On Error GoTo EH

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

Set Rng = ActiveSheet.UsedRange

Rng.Cells(1, 1).Select

For i = 1 To Rng.Rows.Count
    For j = 1 To Rng.Columns.Count
        If Rng.Cells(i, j) <> "" Then
            Union(Selection, Rng.Cells(i, j)).Select
        End If
    Next j
Next i
For Each c In Rng.Cells
    If IsNumeric(c.Value) And Left$(c.Value, 1) <> "0" Then
        c.NumberFormat = "General"
     c.Value = c.Value
    End If
Next
Rng.HorizontalAlignment = xlLeft
CleanUp:
    On Error Resume Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
Exit Sub
EH:
    ' Do error handling
    Resume CleanUp
End Sub
pu3pd22g

pu3pd22g1#

使用下面的代码,你不必一个接一个地转换数字,它肯定会挂起你的工作簿
一个更好的方法是在您使用的范围的每一列上使用一个虚拟的“texttocolumn”
我使用的标签作为delim这是不通常存在于excel文本,如果它是目前您可以使用一些其他的分隔符

Sub Text2Number_v2()

Application.Calculation = xlCalculationManual
last_col = ActiveSheet.UsedRange.Columns.Count

For col = 1 To last_col

    Columns(col).TextToColumns Destination:=Cells(1, col), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True
    
Next

Application.Calculation = xlCalculationAutomatic

End Sub
k10s72fa

k10s72fa2#

下面是我如何驯服这个宏并阻止它崩溃的。

Sub Text2Number()
    On Error GoTo EH

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

Dim Rng As Range

Set Rng = Application.Selection
Set Rng = Application.InputBox("Range", xTitleId, Rng.Address, Type:=8)

For Each c In Rng.Cells
    If IsNumeric(c.Value) And Left$(c.Value, 1) <> "0" Then
        c.NumberFormat = "General"
     c.Value = c.Value
    End If
Next
Rng.HorizontalAlignment = xlLeft
CleanUp:
    On Error Resume Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
Exit Sub
EH:
    ' Do error handling
    Resume CleanUp
End Sub

相关问题