Ir ao conteúdo

Posts recomendados

Postado

Pessoal, bom dia.

 

Sou novo no fórum e nas aventuras do VBA.

 

Gostaria de saber como faço um "loop" de maneira que ele fique limitado até a última linha visível preenchida.

 

Veja abaixo como fiz o código:


 

  ActiveSheet.Range("$A$1:$L$10276").AutoFilter Field:=4, Criteria1:="<>"

        Do Until ActiveCell.Value = "M305" Or _
        ActiveCell.Value = "M310"
            
            Dim BUSCA As Long
            For BUSCA = 1 To 48900
                  
            ActiveCell.Offset(1, 0).Select
            If Not ActiveCell.Rows.EntireRow.Hidden Then Exit For
            Next
            
            Loop

 

Desde já agradeço.

Postado

Olá, Luiz.

 

O código abaixo faz um Loop nas células visíveis da coluna A e sem o uso do comando Select. No entanto não é comum Loop em células visíveis, então se você nos informar qual o seu objetivo final talvez possam surgir outras ideias, se for do seu interesse.

 

 

 Dim c As Range
    For Each c In Range("A:A").SpecialCells(xlCellTypeVisible)
      'alguma ação
    Next c

 

Postado

@osvaldomp , Boa tarde.

 

Obrigado pelo retorno.

 

Então, estou trabalhando com uma planilha que contém os Registros "M300", "M305" e "M310" , porém existe ocasiões que não existe os Registros "M305" e "M310". Dessa forma, gostaria de uma macro que fizesse o loop na coluna "D" e que se for encontrado o Reg. "M305" ou Reg.  "M310", o filtro será ativado para eu poder excluir alguns valores constantes em outras linhas da planilha.

 

Não sei se consegui ser claro.

 

Obrigado, mais uma vez!

Postado

... porém existe ocasiões que não existe os Registros "M305" e "M310". Dessa forma, gostaria de uma macro que fizesse o loop na coluna "D" e que se for encontrado o Reg. "M305" ou Reg.  "M310"...

Fiquei confuso: você diz que os valores não existem e quer uma macro para encontrá-los :confused:

 

Você quer excluir as linhas que contenham na coluna D os valores "M300" ou "M305" ou "M310", é isso?

 

Será útil se você disponibilizar diretamente aqui no fórum uma amostra do seu arquivo Excel com apenas algumas linhas com dados e explicar/colocar na própria planilha o resultado desejado.

Postado

@osvaldomp

 

Então, vou tentar explicar a ideia da planilha pra ver se fica melhor...rs

 

Essa Planilha que tô elaborando é para verificar a apuração do IRPJ que extraio do arquivo "txt" da ECF.

 

Funciona assim:

 

a) Eu copio o "txt" para uma planilha denominada como "Base";

 

b) Depois de ter colado a informação, vou para outra planilha denominada como "PARTE A - LALUR". Nessa planilha, eu fiz uma macro padrão para pegar o Registro M300, M305 e M310 e colocá-los nos seus devidos campos;

 

c) Após esse processo, eu gero uma macro mestre para colocar nomes em colunas, separar os períodos e tratar ela de uma maneira que fique visual.

 

É ai nessa segunda parte (item c) que pode existir, ou não, os Registros M305 e M310. Isso porque, existem alguns clientes que geram esses registros e outros não geram. E eu gostaria de fazer uma planilha que abarcasse tanto as situações que ocorrem os Registros M305 e M310, quanto as que não ocorrem esses registros.

 

De toda forma, a planilha está anexada para melhor compreensão.

 

Obrigado.

LALUR - PARTE A.rar

Postado

Eu tentei racionalizar o seu código MacroRegeLALURPA mas confesso que não dei conta. Então elaborei um código (segue abaixo) para aplicar o filtro na coluna D com os critérios M305 e M310, um por vez, pois me parece que para cada critério o seu código faz operações diferentes.

Eu coloquei no código um comando para só aplicar o filtro se o critério existir na coluna e coloquei também o comando que eu sugeri no post #2 caso você ainda queira/precise navegar pelas células filtradas.

Sugiro que você tente aproveitar esse código e transfira para ele as operações com os critérios referidos acima que existem no código MacroRegeLALURPA. Mais do que isso eu não consigo te ajudar.


 

Sub AplicaAutoFiltro()
 Dim c As Range
  ActiveSheet.AutoFilterMode = False
 
  If Application.CountIf([D:D], "M305") Then 'verifica se exite M305 na coluna D
   ActiveSheet.Range("$A$1:$L$10276").AutoFilter Field:=4, Criteria1:="=M305" ' se existe, aplica o filtro
    'coloque aqui as operações que desejar
    
    'se precisar navegar pelas células filtradas da coluna D utilize o comando abaixo, se não, exclua essas linhas
     For Each c In Range("D:D").SpecialCells(xlCellTypeVisible)
       'coloque aqui as operações que desejar
     Next c
   ActiveSheet.AutoFilterMode = False
  End If
 
  If Application.CountIf([D:D], "M310") Then 'verifica se exite M310 na coluna D
   ActiveSheet.Range("$A$1:$L$10276").AutoFilter Field:=4, Criteria1:="=M310" ' se existe, aplica o filtro
    'coloque aqui as operações que desejar
    
    'se precisar navegar pelas células filtradas da coluna D utilize o comando abaixo, se não, exclua essas linhas
     For Each c In Range("D:D").SpecialCells(xlCellTypeVisible)
       'coloque aqui as operações que desejar
     Next c
   ActiveSheet.AutoFilterMode = False
  End If
 
End Sub

dicas:

1. no seu código MacroPadrão acrescente as linhas em vermelho conforme abaixo

' Replica as fórmulas constantes na planilha base
  Application.ScreenUpdating = False

 

    Range(Selection, Selection.End(xlDown)).Select
    Application.DisplayAlerts = False

 

  Application.DisplayAlerts = True
  Application.ScreenUpdating = True

End Sub

 

2. coloque Application.ScreenUpdating = False/True também no código MacroRegeLALURPA

 

3. a sua fórmula em A2 da planilha PARTE A:

=SE(BASE!A1="|M030";BASE!A1;SE(BASE!A1="|M300";BASE!A1;SE(BASE!A1="|M305";BASE!A1;SE(BASE!A1="|M310";BASE!A1;SE(BASE!A1="|M312";BASE!A1;SE(BASE!A1="|M315";BASE!A1;"™™"))))))

pode ser simplificada para:

=SE(OU(BASE!A1="|M030";BASE!A1="|M300";BASE!A1="|M305";BASE!A1="|M310";BASE!A1="|M312";BASE!A1="|M315");BASE!A1;"™™")

Idem para a fórmula em B2

Postado

Boa tarde!

 

Aproveitando o tópico, gostaria de saber como faço um "CountIf" em uma determinada coluna cujo valor esteja diferente de vazio, para assim eu poder fazer as fórmulas...

 

Segue o exemplo que estou desenvolvendo:

 

        Range("I1").Select
            Dim CONTADOR10 As Long
            For CONTADOR10 = 1 To 48900
        ActiveCell.Offset(1, 0).Select
        If Not ActiveCell.Rows.EntireRow.Hidden Then Exit For
        Next
            If Application.CountIf([G:G], IsNull) Then
            ActiveCell.FormulaR1C1 = _
              "=VLOOKUP(RC[-2],'J100'!R3C6:R1048576C7,2,FALSE)"
            ActiveCell.Select
            Selection.Copy
            Range(Selection, Selection.End(xlDown)).Select
            ActiveSheet.Paste
            Application.CutCopyMode = False
            End If

 

Desde já Agradeço.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!