简体   繁体   中英

Convert selection to Leading zero format

I am trying to build a simple macro that converts a selected range with numeric values to a "0000" format (eg 50,75,888, 1000 would be 0050,0075, 0888, 1000) ie it picks up each value in each cell and and returns a string value back to the sheet which can then be manipulated in Excel

Almost there (I think..) I just need help with the the $format function

Sub LeadingZero()
Dim RngSelected As Range
Dim R As String
Dim RCell As Range
Dim Rrng As Range
Dim RevNum As Long

On Error Resume Next
Set RngSelected = Application.InputBox("Please select a range of cells you want to convert to 0000 format", _
                                          "SelectRng", Selection.Address, , , , , 8)

R = RngSelected.Address
Set Rrng = Range(R)

For Each RCell In Rrng.Cells
    RCell.Value = Format$(RCell, "0000")    'this is the line I want to work!
    'RCell.Value2 = Format$(RCell, "0000")  doesn't seem to work either
    Next RCell
End Sub

Thanks

Sub LeadingZero()
Dim RngSelected As Range
Dim R As String
Dim RCell As Range
Dim Rrng As Range
Dim RevNum As Long

On Error Resume Next
Set RngSelected = Application.InputBox("Please select a range of cells you want to convert to 0000 format", _
                                          "SelectRng", Selection.Address, , , , , 8)

R = RngSelected.Address
Set Rrng = Range(R)

For Each RCell In Rrng.Cells
    RCell.NumberFormat = "000#"
Next RCell
End Sub

Thanks to Assaf and Dan Donoghue:

Sub LeadingZero2()
'Takes a range with numbers between 1 and 9999 and changes them to text string with "0000" format

Dim RngSelected As Range
Dim RCell As Range
Dim Rrng As Range

On Error Resume Next
Set RngSelected = Application.InputBox("Please select a range of cells you want to convert to 0000 format", _
                                          "SelectRng", Selection.Address, , , , , 8)

Set Rrng = Range(RngSelected.Address)

For Each RCell In Rrng.Cells
RCell.NumberFormat = "@"

RCell = CStr(Array("000", "00", "0")(Len(RCell) - 1) & RCell)

Next RCell

End Sub

Did you specifically want to do it with formatting? If you actually want to convert the value (useful for lookup and the like) then this function will do what you want.

Function FourDigitValues(InputString As String)
Dim X As Long, MyArr As Variant
MyArr = Split(InputString, ",")
For X = LBound(MyArr) To UBound(MyArr)
    MyArr(X) = Right("0000" & MyArr(X), 4)
Next
FourDigitValues = Join(MyArr, ",")
End Function

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM