locked
Validação de Dados (tá difícil) RRS feed

  • Pergunta

  • Alguém sabe uma forma de selecionar e deletar automaticamente os dados inválidos de uma planilha do Excel?

    Exemplo

    Inseri uma lista na validação de Dados, entretanto, esta lista é modificada regularmente, e os dados que anteriormente adicionados na célula corretamente utilizando a validação, neste momento, já não são mais válidos (tendo em vista que a lista de origem com validação de dados foi alterada).

    Preciso criar uma macro que exclua esses dados inválidos, sem eu precisar ir selecionando uma a uma, pois a única forma que encontrei de fazer isso foi utilizando o "Circular Dados Inválidos" da "Auditoria de fórmulas" (nesse caso as células inválidas são circuladas em vermelho, daí vou deletando, entretanto esse método é muito demorado).

    Desde já agradeço a quem possa me ajudar.

    Daniel Hugo

    sexta-feira, 31 de agosto de 2007 20:57

Todas as Respostas

  • Hugo,

     

    Fiz um protótipo simples por VBA onde o Excel solicita à você qual o dado inválido, qual o dado a ser colocado no lugar deste dado inválido, e qual a letra correspondente à coluna à ser verifcada, em todas suas células, a invalidez.

    Deu pra entender meu objetivo?
    Dessa maneira acredito que vc tenha uma flexibilidade maior na correção de suas planilhas, onde você mesmo pode determinar qual o dado inválido (claro, acreditando que vc saiba).

    Vou colocar a linha de código comentada abaixo. Espero realmente que seja uma solução.
    Caso seja uma solução coerente à seu problema, basta apenas fazer algumas adaptações e mandar bala.

     

    Qualquer dúvida referente, retorne!

    Forte abraço,

     

    Sub DeletarInvalidacoes()

    '*===================================================*'
    '*  Autor:                  ELBER GUIMARÃES CARRETONI                       *'
    '*  Em contribuição à:  FÓRUM MSDNBRASIL                                    *'
    '*  Data:                   03/09/2007                                                *'
    '*  Necessidade:        Deletar/Substituir dados                                *'
    '*                             inválidos de uma coluna,                              *'
    '*                             conforme determinação e                             *'
    '*                             referência do usuário!                                  *'
    '====================================================*'

    Dim vInvalido As Variant
    Dim vColuna As String
    Dim vValido As Variant
    'manda uma inputbox, perguntando qual o dado inválido
    vInvalido = InputBox("Informe o Dado Inválido:", "Deletar Invalidações")

    'manda uma inputbox, perguntando qual o dado de substituição
    vValido = InputBox("Informe o Dado Válido à substituir o Inválido:", "Deletar Invalidações")

    'manda uma inputbox, perguntando qual a coluna à ser verificada
    vColuna = InputBox("Informe a coluna à ser trabalhada:", "Deletar Invalidações")
       
        'vai para a última linha preenchida da coluna A
        ActiveSheet.Range(vColuna & "65536").End(xlUp).Select
       
        Dim vLinha As Integer
        Dim vNumCorrecoes As Integer
        'armazena o número da linha atual e _
        faz um loop, célula por célula da coluna, _
        deletando o valor da célula caso o dado seja inválido
        For vLinha = ActiveCell.Row To 1 Step -1
            If Range(vColuna & vLinha).Value = vInvalido Then
                Range(vColuna & vLinha).Value = vValido
                'incrementa em +1 o valor para vNumCorrecoes
                vNumCorrecoes = vNumCorrecoes + 1
            End If
        Next vLinha
       
        'manda mensagem de finalização para o usuário:
        If vNumCorrecoes = 0 Then
            MsgBox "Nenhuma invalidação foi encontrada na referência de coluna '" & vColuna & "'" & vbCrLf & _
                    "com o parâmetro '" & vInvalido & "'!", vbInformation, "Deletar Invalidações"
        Else
            MsgBox "Foram corrigidas " & vNumCorrecoes & " invalidações na referência de coluna '" & vColuna & "'" & vbCrLf & _
                    "com o parâmetro '" & vInvalido & "'!", vbInformation, "Deletar Invalidações"
        End If

     

    End Sub


     

    segunda-feira, 3 de setembro de 2007 16:38