
Olá a todos, sou relativamente novo na codificação VBA no Excel (versão atual 2010) e estou tentando melhorar um programa simples que suprime pequenos valores nas tabelas que minha organização lança. O formato dos meus dados é o seguinte.
Na coluna mais à esquerda (geralmente C), tenho os rótulos das linhas (por exemplo, Hospital, Casa, Outros, Dados ausentes). Na coluna seguinte temos o número de registros dessa categoria. Na última coluna temos um valor percentual para aquela linha.
Ao relatar os resultados, sempre suprimimos os tamanhos das células de 1 a 5. No entanto, não suprimimos o número de registros na linha "Dados ausentes".
Eu gerei a seguinte macro com a ajuda de outros usuários deste fórum, um programa que substitui todos os valores n em nossas tabelas por "<6". A razão para a declaração de formato é que não quero suprimir porcentagens e elas são sempre formatadas como numéricas com um único ponto decimal.
Sub SuppressN()
Dim rng As Range, cell As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
For Each cell In rng.Cells
If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And
cell.Value <= 5 Then cell.Value = "<6"
Next
End Sub
O que eu gostaria de fazer é informar ao Excel que, se encontrar a string "Dados ausentes", não execute o código paratodos os valores nessa linha.
Agradeço qualquer ajuda que você possa fornecer. Obrigado!
Responder1
Se quiser pular uma linha, você pode dividir a Cells
linha Rows
e usar a condição para decidir se a linha deve ser executada. Na verdade, você divide Rows
primeiro e faz o Cells
de cada linha. Isso é feito mais facilmente se você souber onde Missing Data
aparecerá.
Códigoinclui suas condições e adiciona um loop externo para percorrer Selection
by Rows
.
Sub SuppressN()
Dim rng As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
'go through by rows first
Dim rng_row As Range
For Each rng_row In rng_data.Rows
If rng_row.Cells(1, 1) <> "Missing Data" Then
'if good keep going on all the cells
Dim cell As Range
For Each cell In rng_row.Cells
If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And cell.Value <= 5 Then
cell.Value = "<6"
End If
Next
End If
Next
End Sub
A imagem mostra o antes e depois
Observe que executei esse código com a NumberFormat
condição excluída, pois não queria emular isso. Coloquei-o de volta no código final para que você não precise mudar as coisas.
Este código requer que você tenha alguma maneira confiável de verificar se algum lugar da linha Missing Data
está presente. Acabei de verificar a primeira célula da coluna (que parece ser a que você tem), mas você pode fazer essa verificação de várias outras maneiras (por exemplo, usando Find
, fazendo um loop e verificando valores, etc.).