............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Macro ordenar mis datos de forma ascendente o desendente

Ir abajo

Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Sáb Nov 18, 2017 10:24 am

Buenas, como puedo ordenar datos de mi celda, tengo celdas combinadas, les dejo el archivo:
[Tienes que estar registrado y conectado para ver este vínculo]

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por moises melgar el Dom Nov 19, 2017 12:42 am

hola buenas noches

algo rapido y sencillo es descombinar todas las celdas con:
Código:
Sub unmerge()
    Columns("A:J").Select
    Selection.UnMerge
End Sub
luego ordenas con la opcion de orden personalizado de excel y una vez ordenado vuelves a combinar las celdas como las tenias con:
Código:
Sub merge()
For x = 1 To Range("A" & Rows.Count).End(xlUp).Row
    Range("B" & x & ":D" & x).Merge
    Range("E" & x & ":F" & x).Merge
    Range("G" & x & ":H" & x).Merge
    Range("I" & x & ":J" & x).Merge
Next x
End Sub

no conosco cual es la columna que usarias como criterio de ordenacion, pero si es posible hacer todo el proceso con una sola macro  ejemplo:
ordenar columna "E" (1er Trimestre) de menor a mayor
Código:
Sub ordenar_columna_1er_ascedente()
Application.ScreenUpdating = False
'descombinamos:
Columns("A:J").unmerge
'ordenamos:
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("E2:E" & Range("A" & Rows.Count).End(xlUp).Row), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("A2:J" & Range("A" & Rows.Count).End(xlUp).Row)
        .Apply
    End With
'volvemos a combinar:
For x = 1 To Range("A" & Rows.Count).End(xlUp).Row
    Range("B" & x & ":D" & x).merge
    Range("E" & x & ":F" & x).merge
    Range("G" & x & ":H" & x).merge
    Range("I" & x & ":J" & x).merge
Next x
End Sub
esperado que sea de tu ayuda y cualquier duda o comentario para la adaptacion de la macro a tu necesidad aqui estamos
saludos
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 572
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Mar Nov 21, 2017 6:51 am

Gracias moises son grande, me sirvio de mucho tu ayuda, pero no habra una forma para que lo haga automaticamente si nesecidad de precionar o hacer un boton para ejecutar la macro.
gracias

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Mar Nov 21, 2017 6:54 am

[Tienes que estar registrado y conectado para ver este vínculo]

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por moises melgar el Mar Nov 21, 2017 8:47 pm

si se puede con botón, seria lo mas conveniente, que se haga sola ....tendría que hacer alguna prueba antes de afirmar esto
pero para que te pueda ayudar con la macro hay que aclarar estas dudas que me surgen:

la numeración de la columna "A",¿que representa? ¿es una matricula o numero de control por alumno? o es el orden del lugar que les toca (1er lugar, 2do lugar,..etc) para saber si esos datos se tienen que mover  o no

¿la base de datos se incrementara?, es decir por ejemplo pueda ser una de 20 o una de 30 personas etc

¿Cual es el criterio para ordenarlos?
segun nombre apellido (columna B) o desde el mas alto al mas bajo del 1er trimestre (columna E) o desde el mas alto al mas bajo del 2do trimestre o que la misma macro te pueda hacer decidir que columna ordenar y si es ascedente /decendente

al rato hare un ejemplo de una idea
saludos
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 572
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Vie Nov 24, 2017 3:45 pm

Hola Moises Melgar te cuento que use tus codigos pero hoy lo quise utilizar pero ya no me funcionan lo puedes ver?, lo quiero ordenar por orden de nombre de a-z.
te dejo el archivo no se los otros que te pase no abren lo subi a otro servidor de archivos:
[Tienes que estar registrado y conectado para ver este vínculo]
Gracias.

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por moises melgar el Vie Nov 24, 2017 4:02 pm

ahhh, agregare la condicion para ordenar alfabeticamente ya que uso filtros y solo ordena por valores numericos

saludos
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 572
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Vie Nov 24, 2017 4:04 pm

Bueno esperare tu ayuda.

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por moises melgar el Vie Nov 24, 2017 4:53 pm

con la gradadora de macros y un poco adaptada:
lo que veo que sale identica solo variando la columna a ordenar que en este caso es "B"
Código:
Sub ordenar2()
Application.ScreenUpdating = False
'descombinamos:
Columns("A:J").UnMerge
    
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    With ActiveSheet.Sort
        .SetRange Range("A2:J" & Range("A" & Rows.Count).End(xlUp).Row)
        .Apply
    End With
For x = 1 To Range("A" & Rows.Count).End(xlUp).Row
    Range("B" & x & ":D" & x).Merge
    Range("E" & x & ":F" & x).Merge
    Range("G" & x & ":H" & x).Merge
    Range("I" & x & ":J" & x).Merge
Next x

End Sub
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 572
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Vie Nov 24, 2017 11:48 pm

Hola moises melgar, gracias de nuevo funciona bien. pero quiero aplicarlo en mi otra platilla y no funciona:

Gracias ante mano.

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por moises melgar el Sáb Nov 25, 2017 5:50 am

ya vi tarde la imagen por lo que muy tarde termine esta macro:
lo primero que vi es que talvez no adaptaste la macro para los nuevos rangos, por que el ejemplo adjuntado en excel al principio del post el rango a filtar empieza en la fila 2 y el de la imagen empieza en la fila 6

¿que hace la macro?
en esta macro copio los datos a ordenar en la columna Q (en tu imagen la info de A6:M17 se copian en Q6:V17 )
los datos copiados se ordenan (con orden personalizado) segun los criterior elegidos ya que no contienen celdas combinadas
ya una vez ordenados, estos son regresados "copiados" en los datos originales (sustituyendolos) (Q6:V17 se "copian" en A6:M17 )
finalmente elimino los datos de la columna Q (se borra los datos de Q6:V17)
con esto busque no alterar el formato de las celdas origen sobre todo el color de relleno
menciono "copiar" pero en verdad solo se modifican los valores

dentro de la macro coloco 2 comentarios (col_criterio y orden_criterio) para poder hacer mas facil que la macro ordene los datos (segun columna y ascendente o descendente)
y en la parte inferior explico como hacer para que los valores de alguna columna de datos no se muevan (use la columna "No" de ejemplo en la macro)

Código:

Sub ordenar()
Dim fila_F, col_criterio, orden_criterio, A, B, origen
Application.ScreenUpdating = False
origen = ActiveCell.Address
A = Array("Q", "R", "S", "T", "U", "V") '0,1,2,3,4,5
B = Array(xlAscending, xlDescending)

fila_F = Range("A" & Rows.Count).End(xlUp).Row
If fila_F < 6 Then Exit Sub

'''''''''''¿Cual es la Columna a ordenar?'''''''''''''''''''''''''''''''
'colocar dentro de A(aqui va el numero) cualquiera de los sig numeros: '
'                                                                      '
'  "No" colocar                = 0 ----------->col_criterio = A(0)     '
'  apellidos y nombres colocar = 1 ----------->col_criterio = A(1)     '
'  1er bimestre colocar        = 2 ----------->col_criterio = A(2)     '
'  2do bimestre colocar        = 3 ----------->col_criterio = A(3)     '
'  3er bimestre colocar        = 4 ----------->col_criterio = A(4)     '
'  Observaciones colocar       = 5 ----------->col_criterio = A(5)     '
col_criterio = A(1) '                                                  '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


'''''''''''¿Cual es el criterio de ordenacion?''''''''''''''''''''''''''
'colocar dentro de B(aqui va el numero) cualquiera de los sig numeros: '
'                                                                      '
'  Ascedente  (A-Z)(menor a mayor)  = 0 ------>orden_criterio = B(0)   '
'  Descedente (Z-A)(mayor a menor)  = 1 ------>orden_criterio = B(1)   '
orden_criterio = B(0) '                                                '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'paso los datos a otras celdas para su ordenacion
For x = 6 To fila_F
Range("Q" & x).Value = Range("A" & x).Value
Range("R" & x).Value = Range("B" & x).Value
Range("S" & x).Value = Range("E" & x).Value
Range("T" & x).Value = Range("F" & x).Value
Range("U" & x).Value = Range("G" & x).Value
Range("V" & x).Value = Range("I" & x).Value
Next x
'aqui ordeno los datos usando los datos "copiados"
Range("Q6:V" & fila_F).Sort Key1:=Range(col_criterio & "6:" & col_criterio & fila_F), Order1:=orden_criterio, Header:=xlGuess

'Aqui la base original recibe los datos ya ordenados:
'nota: para que alguna columna no se actualice (mueva) al ordenar desactivar el renglor correspondiente
For y = 6 To fila_F
'Range("A" & y).Value = Range("Q" & y).Value'< ----Ejemplo desactivado actualizacion de "No" (para que se actualice conjunto a la ordenacion quitar el ' al principo del renglon)
Range("B" & y).Value = Range("R" & y).Value '<-----apellidos y nombres
Range("E" & y).Value = Range("S" & y).Value '<-----1er bimestre
Range("F" & y).Value = Range("T" & y).Value '<-----2do bimestre
Range("G" & y).Value = Range("U" & y).Value '<-----3er bimestre
Range("I" & y).Value = Range("V" & y).Value '<-----Observaciones
Next y
Range("Q6:V" & fila_F).ClearContents
Range(origen).Select
End Sub


Última edición por moises melgar el Dom Nov 26, 2017 9:51 pm, editado 1 vez
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 572
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Dom Nov 26, 2017 11:36 am

Hola moises no pillo este "V17" en tu codigo para reemplazarlo por M17. Q6 lo pille y lo reemplaze por A6 que es de donde empieza.
Un saludo.

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por moises melgar el Dom Nov 26, 2017 11:55 pm

Antes de probar una macro siempre tener una copia del archivo de Excel, con las macros no existe deshacer cambios
adjunto ejemplo:
son 3 partes importantes que hace la macro
1 escribir los datos a ordenar en columnas que no esten combinadas y sean consecutivas para el ejemplo escogi (Q,R,S,T,U,V)

"No" se escribe en "Q" (A6 en Q6, A7 en Q7...etc)
"Apellidos y nombres" se escriben en "R" (B6 en R6, B7 en R7...etc)
"1er bimestre" se escriben en "S" (E6 en S6, E7 en S7...etc)
"2er bimestre" se escriben en "T" (F6 en T6, F7 en T7...etc)
"3er bimestre" se escriben en "U" (G6 en U6, G7 en U7...etc)
"observaciones" se escriben en "V" (I6 en V6, I7 en V7...etc)
(en el ejemplo aparece de amarillo)
por esto en la macro aparecen:

Código:
....
A = Array("Q", "R", "S", "T", "U", "V") '<--(columnas donde transfiero los datos)
.....
......
....
For x = 6 To fila_F'<---"6" fila inicial de los datos
Range("Q" & x).Value = Range("A" & x).Value'Q recibe el valor de A
Range("R" & x).Value = Range("B" & x).Value'R recibe valore de B
Range("S" & x).Value = Range("E" & x).Value'etc....
Range("T" & x).Value = Range("F" & x).Value
Range("U" & x).Value = Range("G" & x).Value
Range("V" & x).Value = Range("I" & x).Value
Next x
.....

2. Con la informacion escrita en las columnas Q, R, S, T, U, V usamos "filtrar y ordenar" de excel

"rango a ordenar".Sort Key1:="columna base para ordenar" , Order1:="criterio de ordenacion", Header:=xlGuess (xlGuess por que en mi caso  es porque la seccion copiada es sin encabezados)
por eso en la macro dice:
Código:
fila_F = Range("A" & Rows.Count).End(xlUp).Row'<--para saber la ultima fila con datos de la columna "A"
A = Array("Q", "R", "S", "T", "U", "V") '<--(columnas a ordenar)
B = Array(xlAscending, xlDescending)'<--criterios de ordenacion posibles
.....
.....
col_criterio = A(1) 'en la macro explico por que 1
....
....
orden_criterio = B(1)'en la macro explico por que 1
.....
'aqui ordeno los datos "copiados" en las columnas elegidas de Q-V (el es es porque 6 es la 1ra fila con datos a ordenar)
Range("Q6:V" & fila_F).Sort Key1:=Range(col_criterio & "6:" & col_criterio & fila_F), Order1:=orden_criterio, Header:=xlGuess

3. Ya ordenados los datos los transfiero de regreso, eliminando la evidencia donde copie los datos en  (Q,R,S,T,U,V)
por eso
cada renglon representa los campos (el campo "No" lo desactive no se si debe o no ordenar en conjunto a los datos)
Código:
For y = 6 To fila_F
'Range("A" & y).Value = Range("Q" & y).Value'< ---- "No" (para que se ordene en conjunto con los datos quitar el ' al principo del renglon)
Range("B" & y).Value = Range("R" & y).Value '<-----apellidos y nombres
Range("E" & y).Value = Range("S" & y).Value '<-----1er bimestre
Range("F" & y).Value = Range("T" & y).Value '<-----2do bimestre
Range("G" & y).Value = Range("U" & y).Value '<-----3er bimestre
Range("I" & y).Value = Range("V" & y).Value '<-----Observaciones
Next y
Range("Q6:V" & fila_F).ClearContents '<-----eliminacion de los datos en QRSTUV

Para que no se vea todo el proceso desactivo la actualizacion automatica de la pantalla
Código:
....
Application.ScreenUpdating = False
....

coloque de amarillo la zona comentada pero no necesita estar "sombrada", al escribir los datos ordenados no altero el formato de las celdas con relleno
Plus+:
agrego dos botones uno con la pura macro y otro donde aparece un formulario para que al agregar los datos se vayan ordenando automaticamente (el valor de "No" no se si es consecutivo o no, pero se agrega   un numero consecutivo y se ordena tambien) y desactive unos renglones los cuales hacen pedir una confirmacion antes de agregar un dato
codigos simples del formulario
Código:
Private Sub CommandButton1_Click()
Dim Nfila_F, confirmar
Nfila_F = Range("A" & Rows.Count).End(xlUp).Row + 1
If TextBox1.Text = "" Then
MsgBox "sin datos para agregar"
Exit Sub
End If
'nota en la parte de abajo en verde:codigo para mensaje de confirmacion antes de agregar desactivado

'confirmar = MsgBox("confirma agregar", vbYesNo, "CONFIRMACION")
'If confirmar = vbYes Then
Range("A" & Nfila_F).Value = Nfila_F - 5
Range("B" & Nfila_F).Value = TextBox1.Text
Range("E" & Nfila_F).Value = TextBox2.Text
Range("F" & Nfila_F).Value = TextBox3.Text
Range("G" & Nfila_F).Value = TextBox4.Text
Range("I" & Nfila_F).Value = TextBox5.Text
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = Range("A" & Rows.Count).End(xlUp).Row - 4
Application.Run ("ordenar")
'End If
End Sub

Private Sub UserForm_Activate()
Me.Caption = "Aqui el titulo"
TextBox6.Text = Range("A" & Rows.Count).End(xlUp).Row - 4
End Sub

Archivo:
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 572
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Lun Nov 27, 2017 7:09 am

Hola moises de verdad que es un meollo muy complicado no?.
Nunca pense que hiba a ser complicado; no se si podes colocarlo o añadirlo los codigos a mi archivo de excel te agradeceria mucho, pues la verdad no entiendo nada y estoy realmente confundido.

[Tienes que estar registrado y conectado para ver este vínculo]

Gracias ante mano Moises. . .

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por 6luishao6 el Miér Dic 06, 2017 9:40 am

Hola Moises pue lo q pasa q todos los datos de las celdas las estoy llamando de otra hoja.

6luishao6

Masculino Cantidad de envíos : 32
Edad : 30
Ciudad - Pais : venezuela
Version de Excel : 2007 - 2010
Fecha de inscripción : 18/04/2015

Volver arriba Ir abajo

Re: Macro ordenar mis datos de forma ascendente o desendente

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.