Notifications
Clear all

ocultar linha que contenha parte do nome

7 Posts
2 Usuários
0 Reactions
1,948 Visualizações
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Oi amigos.
Tudo bem?
Nenhuma adaptação minha está funcionando.
Já pedi ajuda uma vez mas não deu nada certo.
Tenho aqui 4 macros mas nenhuma resolve.
Vou postá-las.

Sub ocultar_linhas_do_relatorio_do_plano_de_contas()

Plan15.Select

For i = 1 To 1000
If Range("B" & i) = "*categoria*" Then
Range("B" & i).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True
End If
Next
End Sub

Sub alexandrevba()
    Application.ScreenUpdating = False
Plan15.Select
    With ActiveSheet
        For Each cell In Range("B9:B1000")
            If cell.Value = "*categoria*" Then
                cell.EntireRow.Hidden = True
            End If
        Next
    End With
     
    Application.ScreenUpdating = True
End Sub
Sub teste()
Dim LR1, LR2, i As Long
LR1 = Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To LR1
    LR2 = Plan15.Range("B" & Rows.Count).End(xlUp).Row
    If InStr(Cells(i, 1).Value, "categoria") > 0 Then
                cell.EntireRow.Hidden = True
    End If
Next i
End Sub

Sub test()
    Plan15.Select
    With ActiveSheet
        .AutoFilterMode = False
        With Range("B1", Range("B" & Rows.Count).End(xlUp))
            .AutoFilter 1, "*categoria*"
            On Error Resume Next
            .Offset(1).SpecialCells(12).EntireRow.Hidden = True
        End With
        .AutoFilterMode = False
    End With
    End Sub

Como vocês podem ver, preciso ocultar a linha que na coluna B tenha o texto "categoria".
Só que categoria é apenas parte do texto. Nas células onde tem "categoria", ela faz parte de uma frase. Por exemplo: "sub-categoria indefinida".
Então esgostei minhas possibilidades, e por isso recorro a voces, pois algumas dessas macros retirei aqui do fórum mesmo.
Obrigado, pessoal.

Um abraço.

 
Postado : 08/02/2015 8:24 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Sub NaoTestado()
    Dim Str As String
    Dim c As Range
    Dim SrchRng As Range
     
    Str = InputBox("Digite o texto a procurar")
    Set SrchRng = ActiveSheet.Range("B1", ActiveSheet.Range("B65536").End(xlUp))
    Set c = SrchRng.Find(Str, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.EntireRow.Hidden = True
            Set c = SrchRng.FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
     
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/02/2015 8:51 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia,

Segue minha sugestão:

Sub OcultarLinhas()
    For i = 1 To [B1].CurrentRegion.Rows.Count
        If InStr(1, Cells(i, 2), "categoria") > 0 Then
            Rows(i).Hidden = True
        End If
    Next
End Sub

Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/02/2015 6:59 am
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Oi Alexandre e JValq. Obrigado pela ajuda!
O código do JValq não funcionou.
=/
O código do Alexandre funcionou, até certo ponto. Ele fez todas as ocultações. Mas ao final, ele deu erro: "Erro em tempo de execução 91. A variável do objeto ou a variável do bloco 'with' não foi definida."
Acho que é alguma coisa relacionada ao fim do loop.
Além disso, Alexandre,
(1) seria possível fazer isso sem o uso de INPUTBOX?
(2) como eu tenho 1000 linhas com dados, e mais ou menos 200 delas serão ocultadas, existe algum código mais rápido? É que ele levou 25 minutos pra finalizar...

Obrigado!!!!

 
Postado : 09/02/2015 10:36 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 
'Fernando Fernandes
'fernando.fernandes@outlook.com.br

Option Explicit
Public Sub OcultarCategorias()
Dim Planilha        As Excel.Worksheet
Dim rngOcultar      As Excel.Range
Dim arrColunaB      As Variant
Dim cnt             As Long
Dim UltimaLinha     As Long
    
    Set Planilha = Worksheets("Sua Planilha")
    With Planilha
        If .AutoFilterMode Then .AutoFilter.ShowAllData
        UltimaLinha = .Cells(.Rows.Count, 2).End(xlUp).Row
        arrColunaB = .Range("B1:B" & UltimaLinha).Value
        
        'acumulando todas as linhas com *categoria* num único range
        For cnt = 1 To UBound(arrColunaB, 1)
            If VBA.InStr(1, arrColunaB(cnt, 1), "categoria") > 0 Then
                If rngOcultar Is Nothing Then
                    Set rngOcultar = .Rows(cnt)
                Else
                    Set rngOcultar = Application.Union(rngOcultar, .Rows(cnt))
                End If
            End If
        Next cnt
        
        'se houve linhas com categoria na coluna B, essas linhas serão escondidas aqui, de uma só vez.
        If Not rngOcultar Is Nothing Then
            rngOcultar.EntireRow.Hidden = True
        End If
        
    End With
    
    'limpando a memória
    Set rngOcultar = Nothing
    Set Planilha = Nothing
End Sub

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/02/2015 11:09 am
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

meu amigo seu Fernando!!
Simplesmente e absolutamente fantástico!!!
Tudo que eu queria!
Sem palavras pra te agradecer.
Obrigado, mesmo!
Obrigado aos outros por também tentarem.
Vocês são demais!!!
Um abraço!!!

Júlio.

 
Postado : 09/02/2015 11:21 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ok, aeee q bom que funfou...

Agora clique na mãozinha pra indicar o agradecimento (pra todos) e clique no botão verde do lado da mãozinha, na resposta que te atendeu, no caso a minha!

Valeu brother!

abs,

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/02/2015 11:23 am