将一个数字添加到单元格中的一个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
语句,它就可以正常运行:不需要If
, OnError
等等
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”的自定义格式相同。