将一个数字添加到单元格中的一个4位数字的末尾,同时忽略每个其他数字

我试图添加一个数字到一个单元格中的一个4位数字的末尾,而忽略每一个其他的数字。

在这里输入图像说明

该代码将零添加到所有内容,我想省略所有5位数字。

Sub leadingzeros() Dim cel As Range, rg As Range Dim zc As Double Application.ScreenUpdating = False Set rg = Range("G2") 'First cell to be converted Set rg = Range(rg, rg.Worksheet.Cells(Rows.Count, rg.Column).End(xlUp)) 'all data in that column rg.NumberFormat = "@" On Error Resume Next For Each cel In rg.Cells If IsNumeric(cel.Value) Then d = Val(cel.Value) cel.Value = Format(d, "00000") cel.Value = "0" & d End If Next On Error GoTo 0 End Sub 

这应该这样做,如果你唯一的问题是遗漏任何长度为5的东西。

 Sub leadingzeros() Dim cel As Range, rg As Range Dim zc As Double Application.ScreenUpdating = False Set rg = Range("G2") 'First cell to be converted Set rg = Range(rg, rg.Worksheet.Cells(Rows.Count, rg.Column).End(xlUp)) 'all data in that column rg.NumberFormat = "@" On Error Resume Next For Each cel In rg.Cells If IsNumeric(cel.Value) and Len(cel.Value) <> 5 Then 'This could be changed to be less than 5, or equals 4, or whatever the true criteria is d = Val(cel.Value) cel.Value = Format(d, "00000") cel.Value = "0" & d End If Next On Error GoTo 0 End Sub 

简单的简化你的macros,稍微改变一下Format语句,它就可以正常运行:不需要IfOnError等等


 Option Explicit Sub leadingzeros() Dim cel As Range, rg As Range Dim zc As Double Application.ScreenUpdating = False Set rg = Range("G2", Cells(Rows.Count, "G").End(xlUp)) rg.NumberFormat = "@" For Each cel In rg cel.Value = Format(cel, "00000") Next cel End Sub 

当然,如果您只需要显示,而不是实际的单元格内容具有五位数字,您可以简单地自定义格式的列而不将值更改为文本。

这不是一个基于VBA的解决scheme,但是如果你想直接在Excel中做到这一点:

 =text(G2, "00000") 

或者,如果这是一个表格:

 =text([@ZIP], "00000") 

我意识到这意味着添加一个列,但也许简单和透明的优点使它值得。

如果您可以使用相同的值,但具有前导零的显示,则在“特殊”格式下有一个邮政编码格式。 这与具有“00000”的自定义格式相同。