Excel 如果单元格长度为5,则添加0前缀,否则保持原样,循环

Excel 如果单元格长度为5,则添加0前缀,否则保持原样,循环,excel,vba,loops,Excel,Vba,Loops,我们有需要审查的序列号,其中一些序列号是5位数,但在数据库中有一个0前缀,这当然不是我们收到的格式。因此,使用其他VBA的一些片段,我得到了下面的代码,它不会循环,也不会改变任何东西 我错过了什么/做错了什么 Sub SNoReview() Dim METER As String Dim SQL_STRING As String Dim ANSWER As String

我们有需要审查的序列号,其中一些序列号是5位数,但在数据库中有一个0前缀,这当然不是我们收到的格式。因此,使用其他VBA的一些片段,我得到了下面的代码,它不会循环,也不会改变任何东西

我错过了什么/做错了什么

Sub SNoReview()

    Dim METER                   As String
    Dim SQL_STRING              As String
    Dim ANSWER                  As String
    Dim CELLADDRESS             As Variant


    Application.ScreenUpdating = True
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    Sheets("Sheet1").Activate
    Range("N6").Select

    Do Until IsEmpty(ActiveCell)

        CELLADDRESS = ActiveCell.Address
        METER = ActiveCell.Value

        If Len(METER) = 5 Then
            METER = "0" & (METER)
        Else: METER = (METER)
        End If

        ActiveCell.Offset(1, 0).Select

    Loop

End Sub

似乎您可以一次对整个范围应用一个数字格式。不需要在这里循环

Sub sNoReview()

    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("N6:N" & ws.Range("N" & ws.Rows.Count).End(xlUp).Row).NumberFormat = "000000"

End Sub
这不会更改LEN>6的任何数字的格式

000001 From 1
000011 From 11
000111 From 111
001111 From 1111
011111 From 11111
111111 From 111111

你的代码
宏无法工作的原因是您从未更改过格式。excel的默认设置是删除前导0,因此您的代码添加它们只是为了让excel立即删除它们。肯定是时候了。

首先承认@Urderboy在这里做了艰苦的工作(调查)

就答案而言,假设长度小于6的任何数据都是数字或文本数字。。。然后可能是这样的转换和格式化(从N6开始):

选项显式
子SNoReview()
将vSheet设置为工作表
调暗vCell作为范围
设置vSheet=此工作簿。工作表(“Sheet1”)
对于vSheet.Range(“N6:N”和vSheet.Range(“N”和vSheet.Rows.Count)中的每个vCell.End(xlUp).Row)
如果Len(vCell)<6,则
用vCell
vCell.NumberFormat=“000000”
vCell=Val(vCell)
以
如果结束
下一个
端接头
之前

之后


您的专栏是否包含数字?如果您只是试图强制所有数字的长度为6位,那么您可以直接格式化它们。内部管理:避免
激活
&
选择
。这在这里是不必要的。在结束sub之前,您没有重新启用屏幕更新/警报。该列是序列号,可以是我处理的数据中的10个或更多字符。它只是5位数的旧数据,在我们要查询的表中,实际上是6位数,前缀为零,Excel非常喜欢丢失这些零。您尝试下面的解决方案吗?是的。没有效果。数据从40453到XKF06944,谢谢。这适用于它的主要功能。然后我发现它干扰了一个辅助功能,但能够修改它,以得到我想要的结果。谢谢大家
Option Explicit

Sub SNoReview()

    Dim vSheet As Worksheet
    Dim vCell As Range

    Set vSheet = ThisWorkbook.Worksheets("Sheet1")
    For Each vCell In vSheet.Range("N6:N" & vSheet.Range("N" & vSheet.Rows.Count).End(xlUp).Row)
        If Len(vCell) < 6 Then
            With vCell
                vCell.NumberFormat = "000000"
                vCell = Val(vCell)
            End With
        End If
    Next

End Sub