Excel 如果单元格长度为5,则添加0前缀,否则保持原样,循环
我们有需要审查的序列号,其中一些序列号是5位数,但在数据库中有一个0前缀,这当然不是我们收到的格式。因此,使用其他VBA的一些片段,我得到了下面的代码,它不会循环,也不会改变任何东西 我错过了什么/做错了什么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
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