Notifications
Clear all

Selecionar células até a ultima preenchida sem pular vazias

5 Posts
3 Usuários
0 Reactions
2,980 Visualizações
(@erikson)
Posts: 2
New Member
Topic starter
 

Bom dia Pessoal,
Preciso de uma macro que selecione de uma determinada linha até a ultima linha que contenha dados, porem se nesse intervalo houver linhas vazias, a macro deve conciderar e manter a seleção da determinada linha até a ultima que conter dados, ficando assim uma única seleção.

Pesquisei e o maximo que consegui foi esse código:

Sub Selecionar()
    Dim Intervalo As Range
   
    Set Intervalo = [B8:C5000].SpecialCells(xlTextValues)
    Intervalo.Select
    Selection.Copy
End Sub

Porem o código acima termina a seleção quando há um linha vázia e começa outra seleção a partir da proxima que conter dados, criando várias seleções.

 
Postado : 27/06/2012 5:07 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite,

Pelo que entendi, o seu código pode ser alterado para ficar assim:

Sub Selecionar()
    Dim Intervalo As Range
   
    Set Intervalo = Range("B8:C" & [B8:C5000].SpecialCells(xlCellTypeLastCell).Row)
    Intervalo.Select
    Selection.Copy
End Sub

Eu utilizaria o mesmo código de forma mais "enxuta":

Sub Selecionar()
    Range("B8:C" & [B8:C5000].SpecialCells(xlCellTypeLastCell).Row).Select
End Sub

Uma outra forma, com uma sutil diferença:

Sub Selecionar()
    Range(Cells(8, 2), Cells([B8:C5000].SpecialCells(xlCellTypeLastCell).Row, [B8:C5000].SpecialCells(xlCellTypeLastCell).Column)).Select
End Sub

Na última opção, se o último valor preenchido estiver na coluna "B", não vai haver seleção de nenhum valor na coluna "C".

Abraço

 
Postado : 27/06/2012 5:23 pm
(@benzadeus)
Posts: 78
Trusted Member
 
Sub Selecionar()
    Dim lRowLast As Long
    
    lRowLast = WorksheetFunction.Max( _
      RowLast(Columns("B")), _
      RowLast(Columns("C")))
   
    Range("B8:C" & lRowLast).Select
End Sub

Function RowLast(rng As Range) As Long
    'Retorna o valor da última linha povoada do intervalo rng
    With rng
        On Error Resume Next
        RowLast = .Find(What:="*" _
          , After:=.Cells(1) _
          , SearchDirection:=xlPrevious _
          , SearchOrder:=xlByColumns _
          , LookIn:=xlFormulas).Row
        If RowLast = 0 Then RowLast = rng.Cells(1).Row
    End With
End Function
 
Postado : 27/06/2012 6:47 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite, segue em anexo.

att MarkoSoftware

 
Postado : 27/06/2012 7:42 pm
(@erikson)
Posts: 2
New Member
Topic starter
 

benzadeus que inteligência kkk obrigado.
A dica do benzadeus é exatamente o que eu precisava, mas obrigado tambem aos outros colegas que deram sua contribuição.
Ficará como a planilha que o markosoftware anexou.

 
Postado : 28/06/2012 7:47 pm