Excel VBA: pule uma linha inteira do processamento se a condição for atendida

Excel VBA: pule uma linha inteira do processamento se a condição for atendida

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 Cellslinha Rowse usar a condição para decidir se a linha deve ser executada. Na verdade, você divide Rowsprimeiro e faz o Cellsde cada linha. Isso é feito mais facilmente se você souber onde Missing Dataaparecerá.

Códigoinclui suas condições e adiciona um loop externo para percorrer Selectionby 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

antes depois

Observe que executei esse código com a NumberFormatcondiçã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 Dataestá 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.).

informação relacionada