Macro para ordenar datos alfanuméricos correctamente

Quiero una macro para ordenar datos alfanuméricos automáticamente pero tengo el detalle que se muestra en las celdas de color rojo de la imagen, los códigos NCAF01 al NCAF10 se ordenan bien pero después en lugar de NCAF11 me pone el NCAF100 espero que la macro me ayude con este problema. De ante mano gracias.

1 respuesta

Respuesta
1

Pregunto:

- ¿Hay otras siglas o serán siempre las mismas (NCAF)?

- ¿Se puede disponer de una col adicional? ¿En ese caso en qué col terminan tus datos?

- ¿Tiene qué ser por macro o puede ser con las opciones de ordenación?

Espero tus aclaraciones.

Uso alp, caf y ncaf 

La única columna que uso para códigos es la A y quiero que se ordene automáticamente. Así es como lo estoy usando

Private Sub worksheet_change(ByVal Target As Range 

If Target.Column = 7 Then
Call ORDENAR
End If

On Error GoTo Whoa

Application.EnableEvents = False

If Not Target.Cells.CountLarge > 1 Then
If Not Intersect(Target, Columns(1)) Is Nothing Then
Target.Offset(, 1).Select
ElseIf Not Intersect(Target, Columns(1)) Is Nothing Then
Target.Offset(, 1).Select
ElseIf Not Intersect(Target, Columns(7)) Is Nothing Then
Target.Offset(1, -6).Select
End If
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description

Resume Letscontinue
End Sub

La macro es esta 

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
Set rangoDatos = Range("A2:A" & ultimaFila)
Set campoOrden = Range("A1")

rangoDatos.Sort key1:=campoOrden, order1:=xlAscending, Header:=xlYes


Sheets("PRODUCTOS").Select
ActiveSheet.Protect Password:="contraseña"

End Sub

Reitero:

- ¿Hay otras siglas o serán siempre las mismas (NCAF)? ... Rpta: hay otras.

- ¿Se puede disponer de una col adicional? ¿En ese caso en qué col terminan tus datos?

- ¿Tiene qué ser por macro o puede ser con las opciones de ordenación?

Sdos!

Uso tres tipos de códigos NCAF, CAF y ALP  La ultima columna donde terminan mis datos es la N y con respecto a la ultima pregunta lo que quiero es que se vayan ordenando los datos automáticamente y lo hagan bien usted me dira cual me recomiendo si macro o opciones de ordenación. Le explico como lo estoy usando actualmente. Escribo desde la celda A1 hasta G1 y al oprimir enter se dirige automáticamente a la fila A2 y se empieza a ordenar, lleno las celdas de la fila 2 oprimo enter y baja a A3 y así sucesivamente. Puedo estar usando los códigos NCAF, CAF o ALP y si los ordena por las siglas pero en la numeración lo hace como en la imagen. Espero haber contestado sus preguntas?

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

Si me funciono nada más que hay un detalle cuando se ordenan no se queda en la fila A2 como se ve en la imágenes son 25 productos tendrían que ordenarse y quedarse de A2 a A25 pero se ordeno hasta abajo

   

Le agradezco mucho su ayuda. Nada más me podría decir porque tengo el detalle de porque cuando se ordena la información se va hasta la ultima fila y no a la primera que seria la A2

Porque está considerando que la última fila es la que acabas de ingresar ... siempre y cuando no haya nada más hacia abajo ;(

ultimaFila = Sheets("PRODUCTOS").Range("A" & Rows.Count).End(xlUp).Row

Así estaba en tu macro.

Si no lo podés resolver tendrás que enviarme tu hoja para ajustar el código... así con las imágenes solo puedo imaginar la situación.

Sdos!

Ok. Le envié la hoja a su correo de aplica excel para que vea el detalle. muchas gracias

Libro enviado.

Lo que sucede es que tenés otra macro en la hoja y un Fto condicional que llega hasta la fila 90 por lo que ese es siempre el fin de rango.

Además a tu hoja le faltaban los datos de las col auxiliares. No olvides que ahora se ordena por estas columnas.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas