Welcome to the board.
Function PadNum(sInp As String, Optional ByVal iLen As Long = 1) As String
' shg 2003
' Expands numbers in a string to iLen characters for sorting; e.g.,
' PadNum("13A1U3", 2) = "13A01U03"
' PadNum("1.2.3.15", 3) = "001.002.003.015"
' Numbers are not shortened below their minimal representation:
' PadNum("1.123.2.3", 2) = "01.123.02.03"
' Returns unpadded values if iLen = 1 or omitted
' PadNum("01.123.02.03") = "1.123.2.3"
' All characters other than digits 0-9 are returned as-is
Dim sFmt As String
Dim iChr As Long
Dim sNum As String
Dim sChr As String
Dim bNum As Boolean
sFmt = String(IIf(iLen < 1, 1, IIf(iLen > 15, 15, iLen)), "0")
For iChr = 1 To Len(sInp) + 1 ' the +1 flushes a trailing number
sChr = Mid(sInp, iChr, 1)
If sChr Like "#" Then
bNum = True
sNum = sNum & sChr
Else
If bNum Then
bNum = False
PadNum = PadNum & Format(CDbl(sNum), sFmt)
sNum = vbNullString
End If
PadNum = PadNum & sChr
End If
Next iChr
End Function
Use the UDF in a different column and sort by that column:
Row\Col |
A |
B |
C |
D |
1 |
WBS |
Description |
Sort By |
|
2 |
6.1 |
Whatever |
06.01 |
C2: =padnum(A2, 2) |
3 |
6.1.1 |
Whatever |
06.01.01 |
|
4 |
6.1.2 |
Whatever |
06.01.02 |
|
5 |
6.1.3 |
Whatever |
06.01.03 |
|
6 |
6.1.4 |
Whatever |
06.01.04 |
|
7 |
6.1.5 |
Whatever |
06.01.05 |
|
8 |
6.1.6 |
Whatever |
06.01.06 |
|
9 |
6.1.7 |
Whatever |
06.01.07 |
|
10 |
6.1.8 |
Whatever |
06.01.08 |
|
11 |
6.1.9 |
Whatever |
06.01.09 |
|
12 |
6.1.10 |
Whatever |
06.01.10 |
|
13 |
6.2 |
Whatever |
06.02 |
|
14 |
6.3 |
Whatever |
06.03 |
|
15 |
6.4 |
Whatever |
06.04 |
|
16 |
6.5 |
Whatever |
06.05 |
|
17 |
6.6 |
Whatever |
06.06 |
|
18 |
6.7 |
Whatever |
06.07 |
|
19 |
6.8 |
Whatever |
06.08 |
|
20 |
6.9 |
Whatever |
06.09 |
|
Bookmarks