Tenho algumas colunas, sendo importantes entre elas:Tarefas,Prioridade,Status.
Quero todas as linhas de registros onde oprioridadediz "Alto" para se atualizarem automaticamente e aparecerem no topo de outros registros.
Meu conhecimento de VB se limita a abrir o editor VB. Por favor ajude.
EDITAR
Aqui está uma captura de tela do que estou tentando fazer. Já defini alguma formatação condicional para destacar todas as linhas ondeprioridademostra comoalto. Agora preciso que todos esses registros (e os novos registros com prioridade "alta" sempre que adicionados) apareçam automaticamente no topo dos outros registros.
Responder1
Ative a filtragem automática de tabelas.
Defina a formatação condicional para a coluna Status, marque os valores altos com uma cor de fundo agradável.
Insira o código abaixo no módulo da planilha. Edite o número da coluna, o endereço da célula do cabeçalho e o valor da cor de fundo no código conforme necessário.
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
Agora, cada alteração na coluna B reordenará sua tabela de dados.
PS. A ordem final das linhas e a posse da linha alterada são imprevisíveis... Você pode refinar a ordem final definindo critérios de classificação mais detalhados.
PPS. Claro, você não pode usar formatação condicional e classificar diretamente pelo valor. Portanto, use esta postagem como um exemplo, não como uma solução.
Responder2
Eu gostaria de sugerir um conjunto de VBA (Macro), irá ajudá-lo a classificar as linhas que possuemAltoem ordem crescente e depois preencha com a cor de fundo.
Antes de classificar:
Depois de classificado:
- PressioneAlt+F11ouClique com o botão direitooGuia Folhapara abrir o editor VB.
Copie e cole este código VBA como módulo padrão.
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
Observação
- Nesta linha,
Range("Test12A.xlsm!Newdata1")
,Novos dados1é oIntervalo Nomeado, evitará a ediçãoIntervalo para classificartoda vez que uma nova linha for inserida. Interior.Color = vbGreen
,vbVerdeé editável.
Editado:
Este código classificará e organizará automaticamente o conjunto de dados em cada nova entrada e apenas as células destacadas terão 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 as referências de células no código VBA conforme necessário.
Responder3
Tente usar a função Sortby(). Funcionou tão facilmente. O código VBA para alguém como eu (usuário novato do Excel) era muito assustador.