
Tengo algunas columnas, entre las que destacan:Tareas,Prioridad,Estado.
Quiero todas las filas de registros dondeprioridaddice "Alto" para actualizarse automáticamente y aparecer en la parte superior de otros registros.
Mi conocimiento de VB se limita a abrir el editor de VB. Por favor ayuda.
EDITAR
Aquí hay una captura de pantalla de lo que estoy tratando de hacer. Ya configuré algún formato condicional para resaltar todas las filas dondeprioridadse muestra comoalto. Ahora necesito que todos esos registros (y los nuevos registros con prioridad "alta" cada vez que se agreguen) aparezcan automáticamente encima de otros registros.
Respuesta1
Habilite el filtrado automático de tablas.
Establezca el formato condicional para la columna Estado, marque los valores Altos con un color de fondo agradable.
Inserte el siguiente código en el módulo de la hoja de trabajo. Edite el número de columna, la dirección de la celda del encabezado y el valor del color de fondo en el código según sea necesario.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then With AutoFilter.Sort .SortFields.Clear .SortFields.Add(Range("B1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue.Color = RGB(242, 242, 242) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If End Sub
Ahora cada cambio en la columna B reordenará su tabla de datos.
PD. El orden final de las filas y la posesión de la fila modificada son impredecibles... Puede refinar el orden final estableciendo criterios de clasificación más detallados.
PPP. Por supuesto, no puede utilizar formato condicional y ordenar por valor directamente. Utilice esta publicación como muestra, no como solución.
Respuesta2
Me gustaría sugerir un conjunto de VBA (Macro), que le ayudará a ordenar las filas.Altoen orden ascendente y luego rellénelo con el color de fondo.
Antes de ordenar:
Después de haber sido ordenado:
- O presioneAlt+F11oBotón derecho del ratónelPestaña Hojapara abrir el editor VB.
Copie y pegue este código VBA como módulo estándar.
Sub SortDataWithoutHeader() Range("Test12A.xlsm!Newdata1").Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlYes Call Highlight End Sub
Sub Highlight()
Dim LastRow As Long, c As Range
Dim MyRange As Range
LastRow = Cells(Cells.Rows.Count, "C").End(xlUp).Row
Set MyRange = Range("C2:C" & LastRow)
For Each c In MyRange
If c.Value = "High" Then
c.EntireRow.Interior.Color = vbGreen
Else
c.EntireRow.Interior.Color = xlNone
End If
Next
End Sub
NÓTESE BIEN
- En esta línea,
Range("Test12A.xlsm!Newdata1")
,Nuevos datos1es elRango con nombre, evitará editarRango para ordenarcada vez que se ingresará una nueva fila. Interior.Color = vbGreen
,vbVerdees editable.
Editado:
Este código ordenará y organizará automáticamente el conjunto de datos en cada nueva entrada y solo las celdas resaltadas tienen textoAlto.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C:C")) Is Nothing Then
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Call Highlight
Application.EnableEvents = False
End If
End Sub
Sub Highlight()
Dim cell As Range
For Each cell In Range("C:C")
If cell.Value = "High" Then
cell.Interior.Color = XlRgbColor.rgbLightGreen
Else
cell.Interior.Color = xlNone
End If
Next cell
End Sub
Ajuste las referencias de celda en el código VBA según sea necesario.
Respuesta3
Intente utilizar la función Sortby(). Funcionó muy fácilmente. El código VBA para alguien como yo (usuario novato de Excel) fue muy desalentador.