如何使每个单元格的长度为5?

New*_*New 4 excel vba

我有一列有 7000 多个名字。我想让每个名字的长度不超过5. 这是我尝试过但不起作用的方法

Sub del()
    Dim myCell
    Set myCell = ActiveCell
    Dim count As Integer

    count = Len(ActiveCell)

    While count > 5
        myCell = Left(myCell, Len(myCell) - 1)
        myCell.Offset(1, 0).Select
        Set myCell = ActiveCell
    Wend
End Sub
Run Code Online (Sandbox Code Playgroud)

Sid*_*out 5

不需要VBA。您可以使用公式 ,=Left(A1,5)来获取5单元格的第一个字符。只需自动填充公式。

在此处输入图片说明

如果您仍然需要 VBA,那么您也不需要循环。请参阅此示例。有关说明,请参阅将整个范围转换为大写而不遍历所有单元格

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim rng As Range
    
    '~~> Change this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
            
        Set rng = .Range("A1:A" & lRow)
        rng = Evaluate("index(left(" & rng.Address(External:=True) & ",5),)")
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我假设数据ASheet1. 根据情况更改。

在行动

在此处输入图片说明

  • 我做了一个快速测试。我在 `A1:A1048576` **1.** `Evaluate` 和 `Array` 上的测试结果都用了 4 秒。因此,由于代码行较少,我更喜欢在这种情况下使用“评估”。**2.** 循环遍历范围需要 1 分 50 秒。 (2认同)