none
excluir linhas com planilha intercalada RRS feed

  • Pergunta

  • Pessoal, eu tenho uma planilha como a imagem a abaixo.Porém ela tem no total mais de 8000 linhas.Eu precisava colocar um "x" na respectiva célula da coluna G para toda linha que for vazia ou que tiver valor somente na coluna A.Até aí eu consigo fazer, o problema é que se eu fizer um "For Each Cell" para toda coluna, a macro vai demorar horas, pois acabará colocando x até a linha limite do Excel 2007 (que é 1048576).
    Como percebe-se na imagem, existem linhas em branco durante a tabela (na verdade elas não são intercaladas).Eu precisava inserir um x na col G até a última linha que tiver algo escrito na respectiva célula da coluna A.

    Como posso fazer isso?

    sexta-feira, 13 de julho de 2012 18:41

Respostas

  • Sobre obter a última linha, fiz uma discussão do assunto aqui:

    Uma solução para o que deseja pode ser:

    Sub Exemplo1()
        Dim lLast As Long
        Dim rng As Range
        
        With Workbooks("lx09.XLS").Sheets(1)
            lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            For Each rng In .Range("A1:A" & lLast)
                If IsEmpty(rng) Then
                    rng = "x"
                End If
            Next rng
        End With
    End Sub

    Pessoalmente, prefiro usar a forma abaixo:

    Sub Exemplo2()
        Dim lLast As Long
        Dim lRow As Long
        
        With Workbooks("lx09.XLS").Sheets(1)
            lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            For lRow = 1 To lLast
                If IsEmpty(.Cells(lRow, "A")) Then
                    .Cells(lRow, "A") = "x"
                End If
            Next lRow
        End With
    End Sub

    Para esse caso particular, você poderia usar:

    Sub Exemplo3()
        Workbooks("lx09.XLS").Sheets(1).UsedRange.SpecialCells(xlCellTypeBlanks) = "x"
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 18 de julho de 2012 21:42
    Moderador

Todas as Respostas

  • Qual é o código que você está utilizando? Gostaria de comentar.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 13 de julho de 2012 22:51
    Moderador
  •  Meu código é esse abaixo.O problema é que ele acaba lendo até a linha 1048576.Eu queria o comando que lesse (até a última linha escrita da coluna A).   

        For Each Celula_nd In Workbooks("lx09.XLS").Sheets(1).Range("A:A")
         If Celula_nd = "" Then
             Celula_nd.Value = "x"
         End If
        Next Celula_nd


    Eu qeuria fazer algo do tipo

        For Each Celula_nd In Workbooks("lx09.XLS").Sheets(1).Range("A:A" & lastRow)
         If Celula_nd = "" Then
             Celula_nd.Value = "x"
         End If
        Next Celula_nd

    Porém não funciona...

    • Editado dmfmakko segunda-feira, 16 de julho de 2012 10:50
    segunda-feira, 16 de julho de 2012 10:32
  • Sobre obter a última linha, fiz uma discussão do assunto aqui:

    Uma solução para o que deseja pode ser:

    Sub Exemplo1()
        Dim lLast As Long
        Dim rng As Range
        
        With Workbooks("lx09.XLS").Sheets(1)
            lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            For Each rng In .Range("A1:A" & lLast)
                If IsEmpty(rng) Then
                    rng = "x"
                End If
            Next rng
        End With
    End Sub

    Pessoalmente, prefiro usar a forma abaixo:

    Sub Exemplo2()
        Dim lLast As Long
        Dim lRow As Long
        
        With Workbooks("lx09.XLS").Sheets(1)
            lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            For lRow = 1 To lLast
                If IsEmpty(.Cells(lRow, "A")) Then
                    .Cells(lRow, "A") = "x"
                End If
            Next lRow
        End With
    End Sub

    Para esse caso particular, você poderia usar:

    Sub Exemplo3()
        Workbooks("lx09.XLS").Sheets(1).UsedRange.SpecialCells(xlCellTypeBlanks) = "x"
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 18 de julho de 2012 21:42
    Moderador