Necesitarás 2 columnas auxiliares a continuación de la última de tu tabla, o sea O:P
La macro quedó así:
Sub ORDENAR()
Sheets("PRODUCTOS").Select
'ActiveSheet.Unprotect Password:="contraseña"
Dim rangoDatos As Range
Dim campoOrden As Range
Dim ultimaFila As Long
ultimaFila = Sheets("PRODUCTOS").Range("A" & Rows.Count).End(xlUp).Row
'colocar fórmula y pasarla a valor
With Sheets("PRODUCTOS")
.Range("O" & ultimaFila).FormulaR1C1 = "=IF(LEFT(RC[-14],3)=""NCA"",LEFT(RC[-14],4),LEFT(RC[-14],3))"
.Range("P" & ultimaFila).FormulaR1C1 = _
"=IF(LEFT(RC[-15],3)=""NCA"",VALUE(MID(RC[-15],5,LEN(RC[-15])-4)),VALUE(MID(RC[-15],4,LEN(RC[-15])-3)))"
.Range("O" & ultimaFila & ":P" & ultimaFila).Copy
.Range("O" & ultimaFila).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End With
Set rangoDatos = Range("A1:P" & ultimaFila)
Set campoOrden = Range("O1")
Set nroOrden = Range("P1")
rangoDatos.Sort key1:=campoOrden, order1:=xlAscending, Header:=xlYes, key2:=nroOrden, order2:=xlAscending
Sheets("PRODUCTOS").Select
'ActiveSheet.Protect Password:="contraseña"
End Sub
Habilitá nuevamente las líneas con el password. Y si te es necesario declará la variable nroOrden.
Lo que hace la macro es colocar fórmulas en col O:P para extraer la parte numérica de la de texto. Luego se guarda como solo valores y se ordena la tabla por esas 2 col.
Sdos y no olvides valorar la respuesta.
Elsa
http://aplicaexcel.com/manuales.htm