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
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