something like "AHU-1 Return Air Damper End Switch Setpoint"
which should be converted to AHU_1_RAD_ES_SP
OK. That is different from what I thought you said in your first post. The VBAX_Abbreviation's codes won't return that. Your second loop should usually return the correct result. . . IF your Point Library was sorted by word count descending.
Function Abbreviate(ByVal sInput As String)
Dim vList() As Variant
Dim l As Long
With Sheet2
For l = LBound(vList) To UBound(vList)
sInput = Replace(UCase(sInput), vList(l, 1), vList(l, 2))
Next l
End With
Abbreviate = Replace(Replace(Trim(sInput), " ", "_"), "-", "_")
End Function
Run these, Arrange Sheet2, then try the above
Sub FixList()
Dim Cel As Range
For Each Cel In Sheet2.Range("A2").CurrentRegion
Cel = Trim(Cel)
Next
End Sub
Sub FixList2()
Dim Cel As Range
For Each Cel In Sheet2.Range("A2").CurrentRegion
Cel = Replace(Cel, " ", " ")
Next
End Sub
Sub SortByWordCount()
Dim List
Dim Words
Dim Sorted
Dim Cnt As Long
Dim i As Long, j As Long, k As Long
List = Sheet2.Range("A2").CurrentRegion.Offset(1)
For i = LBound(List) To UBound(List)
Words = Split(Trim(List(i, 1)), " ")
Cnt = WorksheetFunction.Max(Cnt, UBound(Words))
Next i
Sorted = List 'Set Size of Sorted
k = LBound(Sorted)
For j = Cnt + 1 To 0 Step -1
For i = LBound(List) To UBound(List)
Words = Split(Trim(List(i, 1)), " ")
If UBound(Words) = j Then
Sorted(k, 1) = List(i, 1)
Sorted(k, 2) = List(i, 2)
k = k + 1
End If
Next i
Next j
Sheet2.Range("D2").Resize(UBound(Sorted) + 1, 2) = Sorted
End Sub