Ordena una tabla de datos mediante una macro

Tengo una tabla de la columna B a la BC
Y de la fila 12 a la 61.
En la columna BB, se van a generar una serie de datos, en porcentaje, Lo que yo necesito que haga la macro es que me ordene todo en base a esa columna.
El archivo es de "Priorización de proyectos", y si resulta que un proyecto que esta en la fila 10 tiene 70%, y otro que esta en la fila 2 Tiene 12% de Prioridad, toda la fila 10 debe pasar a tomar una posición más arriba que la fila 2, y la Fila 2 deberá tomar la posición que le corresponda.
Es decir el criterio para ordenar es la columna BB, pero debe ordenar la fila completa por que son datos relacionados como: Nombre del proyecto (columna B), Clave del proyecto (columna C), etc.
Este es el código que yo hice, el cual ya ocupe en otro archivo que también ordenaba y funciono perfecto, pero aquel archivo solo tenia columnas de la A a la DE, siento que ahí es donde este no me funciona, pero no se como corregir el error.
El código aparte de ordenar. Esconde aquellas Filas que el resultado en BB fue 0% y pone color a la columna BC, si es "Muy Importante" color Rojo, si es "Importante", color naranja.
ETC.
Por favor! No me vayas a decir que con irme al menú ordenar lo podría hacer, por que ya me han respondido eso, y yo lo que busco es que con un botón, me ordene, me esconda las columnas sin datos, y me ponga el formato de color.
Mil Gracias!
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For fila = 12 To 61
If Cells(fila, 57).Value = " " Then
Rows(fila).Hidden = True
Else
Rows(fila).Hidden = False
End If
Next fila
Dim celdaFinal As String
Sheets("Priorización").Select
ActiveSheet.Range("BD12").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
ActiveCell.Offset(-1, -57).Activate
celdaFinal = ActiveCell.Address
Range("BD11").Select
Range("BD11:" & celdaFinal).Sort Key1:=Range("BD12"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Range("BE12").Select
For Each c In Range("BE12:BE61")
Select Case c.Value
Case "Muy Alta"
c.Interior.ColorIndex = 3
Case "Alta"
c.Interior.ColorIndex = 46
Case "Media"
c.Interior.ColorIndex = 6
Case "Baja"
c.Interior.ColorIndex = 43
Case "Muy Baja"
c.Interior.ColorIndex = 33
Case Else
c.Interior.ColorIndex = 0
End Select
Next c
Application.ScreenUpdating = True
ActiveSheet.Protect
End Sub

1 respuesta

Respuesta
1
La macro que tu tienes está bien, el único inconveniente que tienes es el código que estás utilizando para ordenar la tabla, ya que en el código sólo tienes en cuenta una parte de la tabla, debería seleccionar toda la tabla y luego ordenar, en lugar de poner:
Range("BD11:" & celdaFinal).Sort Key1:=Range("BD12"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Podrías colocar:
range(cells(12,2),cells(61,55)).select ' Esto es lo mismo que range("B12:BC61").select
selection.Sort Key1:=Range("BD12"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Intenta cambiar esta parte del código y me comentas
Hola, antes que nada muchas gracias por tu tiempo.
Ya modifique la tabla y funciono muy bien siempre y cuando no tenga celdas combinadas, pero tengo muchas combinadas, ¿no hay alguna forma para que pueda ordenarlas sin importar que estén combinadas?
Gracias
Lo siento, pero mientras tengas celdas combinadas en tus datos, la opción de ordenar tablas te va a sacar error. Lo mejor es que determines si es necesario la utilización de celdaas combinadas y en caso de ser necesario (títulos, subtitulos) deberías considerar hacer la ordenación para cada rango. La otra opción sería quitar la combinación de celdas en el rango que estás ordenando antes de hacer la ordenación con la instrucción:
Selection. UnMerge

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas