Notifications
Clear all

Ocultando linhas com valor 0.

4 Posts
3 Usuários
0 Reactions
974 Visualizações
(@jonathanr)
Posts: 7
Active Member
Topic starter
 

Bom dia galera.

Estou usando uma macro para ocultar linhas cujo valor é 0. Porém ela oculta as linhas uma por uma.
Essa é a macro.

Sub Oculta2()
Dim Linha, LinhaFinal As Integer
  LinhaFinal = Range("b104").End(xlUp).Row
  For Linha = 7 To LinhaFinal
    If Range("b" & Linha).Value = 0 Then
    Range("b" & Linha).EntireRow.Hidden = True
    Else
    End If
  Next Linha
End Sub

Alguma ideia para ocultar de uma vez só?
Obs: Ela funciona.

Obrigado pelo apoio.

 
Postado : 27/06/2017 7:38 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

JonathanR,

Bom dia!

Por gentileza, solicitamos que da próxima vez que inserir código VBA aqui no fórum, utilizar a TAG CODE existente no início da caixa de mensagens. Isso manterá o fórum de forma organizada.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 27/06/2017 7:57 am
(@jonathanr)
Posts: 7
Active Member
Topic starter
 
Sub Oculta2()

Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("01")
      .Cells.EntireRow.Hidden = False
          For i = 7 To 105
            Select Case .Range("B" & i).Value
              Case 0
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub

Achei uma macro melhor, só que nessa parte With Sheets("01") preciso que aplique em 31 planilhas.
Alguma sugestão?

 
Postado : 27/06/2017 9:06 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

JonathanR, boa tarde!

Aqui vai um "gambiarrex"...

Sub OcultaLinhas()
  Dim ws As Worksheet, rgTotal As Range, rgNaoOculta As Range
  Application.ScreenUpdating = False
  For Each ws In ThisWorkbook.Worksheets
    Set rgTotal = ws.Range("B7", ws.Range("B104").End(xlUp))
    With rgTotal
      .EntireRow.Hidden = False
      If Application.WorksheetFunction.CountIf(rgTotal, 0) > 0 Then
        Set rgNaoOculta = .ColumnDifferences(.Find(What:="0", After:=rgTotal(.Cells.Count), _
                            LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext))
        rgNaoOculta.EntireRow.Hidden = True
        .SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
        rgNaoOculta.EntireRow.Hidden = False
      End If
    End With
  Next ws
  Application.ScreenUpdating = True
End Sub

Funcionamento:

Em cada planilha da pasta, para o range de B7 até a célula mais próxima acima de B104 que possui dados, o código primeiro conta se nesse range contém pelo menos um zero, que são as linhas que você quer ocultar. Se tiver, busca onde está um deles para usar no método ColumnDifferences. Isto permite achar o intervalo oposto primeiro, ou seja, o que não deverá ser ocultado. Contrariando isso, este último é primeiramente ocultado para poder usar o método SpecialCells só com as células visíveis, as quais, estas sim, só possuem zeros. Elas são finalmente ocultadas e o range que não deveria ficar oculto é reexibido.

Como este procedimento não usa loops pelos ranges, talvez fique mais rápido.

Testa aí e dê retorno...

 
Postado : 27/06/2017 10:07 am