gpt4 book ai didi

excel - 加快 Cell 更换 VBA

转载 作者:行者123 更新时间:2023-12-04 22:18:54 27 4
gpt4 key购买 nike

我有一个小代码可以在一列中格式化电话号码,从某种意义上说:
-如果中间有空格,则将其删除
- 之后,从右边开始取 9 个数字,并检查它是否为整数,如果是,则将其放入单元格中。
问题是完成所有替换需要将近 6-7 秒(3000 个单元格,其中大部分是空白的)。知道如何加快速度吗?
非常感谢

targetSheet.Columns("M:M").Cells.Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False


For i = 2 To targetSheet.Range("M" & Rows.Count).End(xlUp).Row
If Len(targetSheet.Cells(i, 13).Value) > 9 Then
Phone = Right(targetSheet.Cells(i, 13).Value, 9)
If IsNumeric(Phone) = True Then
targetSheet.Cells(i, 13).Value = Phone
Else
targetSheet.Cells(i, 13).Value = ""
End If
End If
Next i```

最佳答案

使用数组替换单元格

  • 您可以将空格的删除“应用”到范围。对于剩余的工作,将范围值写入数组,修改它们并将它们写回范围。

  • 编辑:
  • 请注意,我添加了三个缺失的 ReplaceFalse 以来的参数不是它们的默认值:MatchCase当然,最后两个不清楚。 SearchOrderMatchByte在这种情况下并不重要。了解更多信息 here .

  • 代码
    Option Explicit

    Sub test()
    Dim trg As Range
    With targetSheet.Range("M2")
    Set trg = .Resize(.Worksheet.Rows.Count - .Row + 1) _
    .Find("*", , xlFormulas, , , xlPrevious)
    If trg Is Nothing Then Exit Sub
    Set trg = .Resize(trg.Row - .Row + 1)
    End With
    trg.Replace What:=fnd, Replacement:=rplc, LookAt:=xlPart, _
    MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Dim Data As Variant: Data = trg.Value
    Dim cValue As Variant
    For i = 1 To UBound(Data, 1)
    cValue = Data(i, 1)
    If Not IsError(cValue) Then
    If Len(cValue) > 9 Then
    cValue = Right(cValue, 9)
    If IsNumeric(cValue) Then
    Data(i, 1) = cValue
    Else
    Data(i, 1) = ""
    End If
    'Else ' Len(cValue) is lte 9
    End If
    'Else ' error value
    End If
    Next i
    trg.Value = Data
    End Sub

    关于excel - 加快 Cell 更换 VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66124424/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com