Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com macro -excel


MetallicA_cps

Pergunta

Bom Dia a todos,

sou novo no forum, porém estou tendo uma dificuldade com uma macro no excel.

Vamos lá

Eu tenho uma planilha base: que é a que está demonstrada abaixo

claro que possui mais informações, mas as relevantes para mim seriam essas mostradas na figura

essa planilha em média tem 5.000 linhas.

porém eu preciso filtrar esses dados, pois nem todos eles são uteis para mim.

Assim fiz um filtro através de uma formula, onde na coluna for igual ao número "3" o excel iria copiar e e colar em uma nova planilha

ele iria iniciar sempre na celula G4 a verificação da condiçao se 3 ou 1, pois é o formato do arquivo que eu importo.

exemplo que eu tenho que fazer:

ele irá comparar o valor da coluna G, se for igual a 1 ele NÃO faz nada. ai passa para a celula abaixo da coluna G, que se for igual a 3 ele irá copiar as celulas de A até F e colocar na nova planilha.

Assim sendo na nova planilha só teria os valores que eu queria.(que são os valores que são iguais a 3)

Ps. tem que separar esses dados em uma nova planillha, não posso manter na mesma planilha

também se eu for fazer do inicio para fim, depois de executado. a minha primeira célula copiada será a última, então devo começar da celula G5000 até a celula G4.

eu tentei fazer por "For-Next" as num funcionou.

excel1lv7.th.jpgthpix.gif

para colocar a formula nas celulas eu já tenho uma macro de inicio, pois a planilha q eu importo é grande, ai a macro limpa e coloca a condição. agora só falta copiar para outra planilha as celulas desejadas

sub teste()
    Columns("G:AD").Select
    Selection.ClearContents
    Range("B2").Select
    Selection.ClearContents
    Range("G4").Select <- seleciona a Celula
    ActiveCell.FormulaR1C1 = _
        "=IF(OR(RC[-3]<=Consolidado!R1C[4],RC[-3]=RC[-1]),""1"",""3"")" <- insere a formula da condiçãp
    Selection.AutoFill Destination:=Range("G4:G5000")
    Range("G4:G5000").Select
    Range("G4").Select

end sub

Se alguém puder me ajudar

já estou :wacko: com isso.

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Bom dia MetallicA_cps,

Experimente com este programa

Sub ProCopia()
Dim ProcLinha As Integer
Dim CopPaLinha As Integer
Dim ProcNum As String
    On Error GoTo Err_Execute
ProcNum = InputBox("Escolha o valor a procurar.", "Procure o número")
    ProcLinha = 4     'Começa a procurar na linha 4
    CopPaLinha = 2     'Copia para a linha 2 da Sheet2
    While Len(Range("A" & CStr(ProcLinha)).Value) > 0 'Enquanto a coluna A for maior que 0
        If Range("G" & CStr(ProcLinha)).Value = ProcNum Then    'Se na coluna G encontrar copia
            Rows(CStr(ProcLinha) & ":" & CStr(ProcLinha)).Select
                Selection.Copy
            Sheets("Sheet2").Select             'e passa para a Sheet2
            Rows(CStr(CopPaLinha) & ":" & CStr(CopPaLinha)).Select
                ActiveSheet.Paste
            CopPaLinha = CopPaLinha + 1     'Vai à linha seguinte
            Sheets("Sheet1").Select     'Seleciona a Sheet1 de novo
        End If
    ProcLinha = ProcLinha + 1
    Wend
    Application.CutCopyMode = False
    Range("A3").Select
MsgBox "FEITO."
    Exit Sub
Err_Execute:
    MsgBox "Ocorreu um erro."
End Sub

PS. Não se esqueca de utilizar uma cópia quando utiliza um programa que não sabe o que vai provocar...

Link para o comentário
Compartilhar em outros sites

  • 0

bom dia zav60

eu tentei utilizar e o número que eu escolhi foi o 3, ele copiou as celulas para a nova planilha, porém ele travou após ter copiadoa primeira vez. ou seja, não passando para verificar a célula seguinte da primeira planilha.

nela eu tenho 2 planilhas a loginlogout que é onde colo os dados. ai eu fiz uma pequena macro que cola a minha formula com as condições e depois já copia para a outra planilha organizando de forma descrescente pela coluna do logout.

acho que fica mais fácil se você ver a planilha.

http://rapidshare.com/files/166929371/teste3.xls.html

desde já, já agradeço pela ajuda.

Editado por MetallicA_cps
Link para o comentário
Compartilhar em outros sites

  • 0
Olá MetallicA_cps,

Você pretende copiar de que sheet (planilha?) para que sheet?

Será da Login_logout2 para a Plan1? Para a Plan2?

Para que precisa da Login_logout2?

Boa noite !

eu pretendo copiar do login_logout para login_logout2

Bom, primeiro eu preciso filtrar meus dados que são somente os que forem iguais o número 3.

Feito ese filtro eu preciso em uma nova planilha desses dados organizados por ordem de logout(coluna F)

assim sendo, eu teria:

planilha Login_logout = todos os dados(local onde eu vou inserir minha base)

Planilha Login_logout2 = somente os dados que na planilha login_logout forem iguais a 3, os iguais 1 eu não preciso

em uma nova planilha(ex: login_logout3) = os mesmos dados da login_logou2 SÓ que organizados pela coluna F( do maior para o menor logout)

Também funcionaria, em vez de copiar os números iguais a 3 eu poderia apagar os que forem iguais a 1

Abraços~

Link para o comentário
Compartilhar em outros sites

  • 0

Zav agradeço pela ajuda até o momento !

a macro funcionou até um certo ponto.

não entendi a diferença do botão "15 segundos" para "13 segundos".

na sheet, loginlogou(exp) eu não consigo colocar nenhum valor e mesmo digitando manualmente nada acontece na planilha(exp2)

a parte de copiar para uma nova planilha ordenando está funcionando certinho, mas antes de copiar eu deveria "filtrar" os dados. a formula q eu uso para filtrar o que eu quero é:

=SE(OU(D6<=Consolidado!K$1;D6=F6);"1";"3")

se o login for igual ao logout OU se o meu valor de login for menor ou igual ao valor dessa célula(Consolidado!K$1**)

quandouma dessas condições for verdadeira em Gx eu não posso pegar essa linha, eu devo apagar da coluna Ax até a coluna Fx

assim onde essa condição for verdadeira ela apaga os dados de Nome do Agente,Ramal,Horário do Login e Horário do Logout

só falta essa parte para q eu possa filtrar esses dados, pois preciso filtrar eles antes de copiar para loginlogout2

** na planilha q te passei o valor de Consolidado!K$1 está em braco(zerado) mas normalmente é um valor que variade relatório para relatório. mas nesse exemplo pode assumir o valor de Consolidado!K$1 = 0

Agradeço sua ajuda,

Abraços~

Editado por MetallicA_cps
Link para o comentário
Compartilhar em outros sites

  • 0

MetallicA_cps,

Sou o zav60...

Estou a ter dificuldades em utilizar este fórum.

Já mudei de login mas continuo a não conseguir mandar-lhe algumas emendas que entretanto fiz.

Amanhã tentarei enviá-las a partir do meu escritório...

Se lhe der mais geito usar o e.mail, o meu endereço é zavzav@dsf.gov.mo. Use-o

Link para o comentário
Compartilhar em outros sites

  • 0

Mais uma tentativa…

Antes não considerei a situação de >= Consolidado!K1, porque V. não tinha nada nessa célula.

Assim alterei o programa “Num” de modo a ter essa situação

Vá ao programa “Num” e apague-o e insira antes este

Sub Num()
Dim ProcLinha As Integer
    On Error GoTo Err_Execute
    'A linha seguinte cria na E3 a formula =Consolidado!K1
    Worksheets("Login_logout1").Range("E3").FormulaR1C1 = "=Consolidado!R[-2]C[6]"
    ProcLinha = 4
    While Len(Range("A" & CStr(ProcLinha)).Value) > 0
    'As linhas seguintes inserem a sua formula para criar os 1s e os 3s
        If Range("D" & CStr(ProcLinha)).Value > Range("C" & CStr(ProcLinha)).Value Or Range("D" & CStr(ProcLinha)).Value > Range("E3").Value Then
            Range("E" & CStr(ProcLinha)).Value = "3"
        Else
            Range("E" & CStr(ProcLinha)).Value = "1"
        End If
    ProcLinha = ProcLinha + 1
    Wend
    Exit Sub
Err_Execute:
    MsgBox "Ocorreu um erro."
End Sub
Se pretender que na planilha “Login_logout1” fique lá se é 1 ou 3, apague o programa “Final” e substitua-o por este
Sub Final()
    'Worksheets("Login_logout1").Range("E:E").Delete  'Inutilizei esta ordem que apagava os 1s e 3s
    Worksheets("Login_logout2").Range("E:E").Delete
    Worksheets("Login_logout2").Range("A1:D65536").Sort Key1:=Worksheets("Login_logout2").Range("D1"), Order1:=xlDescending, Header:=xlGuess
End Sub

Espero ter sido útil... Diga qualquer coisa

Link para o comentário
Compartilhar em outros sites

  • 0
Mais uma tentativa…

Antes não considerei a situação de >= Consolidado!K1, porque V. não tinha nada nessa célula.

Assim alterei o programa “Num” de modo a ter essa situação

Vá ao programa “Num” e apague-o e insira antes este

Sub Num()
Dim ProcLinha As Integer
    On Error GoTo Err_Execute
    'A linha seguinte cria na E3 a formula =Consolidado!K1
    Worksheets("Login_logout1").Range("E3").FormulaR1C1 = "=Consolidado!R[-2]C[6]"
    ProcLinha = 4
    While Len(Range("A" & CStr(ProcLinha)).Value) > 0
    'As linhas seguintes inserem a sua formula para criar os 1s e os 3s
        If Range("D" & CStr(ProcLinha)).Value > Range("C" & CStr(ProcLinha)).Value Or Range("D" & CStr(ProcLinha)).Value > Range("E3").Value Then
            Range("E" & CStr(ProcLinha)).Value = "3"
        Else
            Range("E" & CStr(ProcLinha)).Value = "1"
        End If
    ProcLinha = ProcLinha + 1
    Wend
    Exit Sub
Err_Execute:
    MsgBox "Ocorreu um erro."
End Sub
Se pretender que na planilha “Login_logout1” fique lá se é 1 ou 3, apague o programa “Final” e substitua-o por este
Sub Final()
    'Worksheets("Login_logout1").Range("E:E").Delete  'Inutilizei esta ordem que apagava os 1s e 3s
    Worksheets("Login_logout2").Range("E:E").Delete
    Worksheets("Login_logout2").Range("A1:D65536").Sort Key1:=Worksheets("Login_logout2").Range("D1"), Order1:=xlDescending, Header:=xlGuess
End Sub

Espero ter sido útil... Diga qualquer coisa

bom dia !

eu te respondi no seu email, espero que tenha visto

abraços~

Link para o comentário
Compartilhar em outros sites

  • 0
Olá MetallicA_cps,

Desculpe-me mas como lhe disse aquele endereço é o do meu local de trabalho, e hoje aqui aonde vivo (+11 horas), já é sábado.

Se pode esperar até segunda-feira eu verifico o que me enviou senão utilize este fórum.

Abraços e desculpe-me mais uma vez

tudo bem, vou colocar o q te mandei por email:

realizando alguns testes tá ótimo, só tenho a te agradecer, mas só falta um detalhe.

a condição de ser menor q o valor da outra planilha tá funcionando.

agora quando ele faz a comparação de login com logout. se um for igual ao outro ele tem q considerar como 1 e ele ta considerando como 3.

login = logout tem que mostrar o número 1, essa condição ele num ta obedecendo.

só falta esse pequeno detalhe, de resto tá funcionando muito bem aparentemente.

Abraços~

Link para o comentário
Compartilhar em outros sites

  • 0

MetallicA_cps

Experimente com este novo Num

Sub Num()
Dim ProcLinha As Integer
    On Error GoTo Err_Execute
    'A linha seguinte cria na E3 a formula =Consolidado!K1
    Worksheets("Login_logout1").Range("E3").FormulaR1C1 = "=Consolidado!R[-2]C[6]"
    ProcLinha = 4
    While Len(Range("A" & CStr(ProcLinha)).Value) > 0
    'As linhas seguintes inserem a sua formula para criar os 1s e os 3s
        If Range("D" & CStr(ProcLinha)).Value = Range("C" & CStr(ProcLinha)).Value Or Range("D" & CStr(ProcLinha)).Value <= Range("E3").Value Then
            Range("E" & CStr(ProcLinha)).Value = "1"
        Else
            Range("E" & CStr(ProcLinha)).Value = "3"
        End If
    ProcLinha = ProcLinha + 1
    Wend
    Exit Sub
Err_Execute:
    MsgBox "Ocorreu um erro."
End Sub

Peço-lhe desculpa mas o erro foi meu... entre as minhas obrigações laborais e a ajuda que lhe tento prestar, às vezes presto menos atenção aqui...

Desta vez, programei para ser: se o valor que está na célula da coluna D for igual ao que está na coluna C - OU - Se o valor que está na célula da coluna D for maior ou igual ao que está na coluna E, escreve 1, senão escreve 3 ---- ou como V. pediu: =SE(OU(D6<=Consolidado!K$1;D6=F6);"1";"3")

Penso que é isto que deseja...

Disponha sempre que precisar de ajuda agora que tem o meu endereço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...