Ir ao conteúdo

Posts recomendados

Postado

 = SE (CONT.SE (C3:C6, "novo"), "Sim", "Não")

 

Criei um arquivo novo, coloquei alguma bobagens em C3,C4,C5,C6, mas em C6 digitei a palavra novo

Aí numa outra célula qualquer coloquei a fórmula acima. Mas dá erro. Não diz qual, mas seleciona C6 indicando algum erro ali, mas qual erro seria ?

Postado

Show. Deu certo. Mas que coisa...quem ía saber deste detalhe.

 

Mas tem um detalhe: Se dentro do intervalo C3:C6 não tiver nada, ou seja, se eu apagar de propósito alguma célula, digamos que eu apague a C4, o resultado continua sendo "sim". Ao meu ver tinha que mudar para "não" pois vazio é diferente "novo".

 

Tem algum macete para mostrar "não" neste caso ?

Postado

Patropi, veja minha planilha em anexo. Tô quebrando a cabeça aqui com fórmulas. Mas acho que uma simples macro é que resolveria o problema. É um pequeno controle de presença de 16 alunos. À esquerda tenho um retângulo com borda espessa que começa vazio sem

nenhum dado. As células da direita são fixas. E esta planilha, pela data, refere-se ao mês de agosto indo do dia 01-08 a 31-08.

 

Quando eu colar as informações dentro do retângulo, nada acontece. Cola mas não faz nada. Se eu pressionar o botão, aí sim a macro varre a coluna ID (coluna K), e vai localizando a linha que corresponde aos alunos. Aí na linha de cada aluno preenche P na célula da data também correspondente (data que foi colada na coluna F. Se um aluno não estiver nos dados colados, aí escreve Faltou na célula correspondente.

 

Eu dei exemplo da Aluna Clara Almeida (ID12), que faltou.

 

 

 

EXCELTESTE.xlsx

  • Membro VIP
Postado
Citação

Mas tem um detalhe: Se dentro do intervalo C3:C6 não tiver nada, ou seja, se eu apagar de propósito alguma célula, digamos que eu apague a C4, o resultado continua sendo "sim". Ao meu ver tinha que mudar para "não" pois vazio é diferente "novo".

 

Se você apagar apenas um "novo" vai continuar retornando sim, porque a função cont.SE continua contando o "novo" que ainda resta, pois ele está testando o intervalo e não apenas a célula que foi apagada.

Na planilha que postei se você apagar os 2 "novo" das células C3 e C5, daí sim vai alterar para NÃO

Postado

Colegas,

 

Depois de muito pesquisar consegui fazer a planilha em anexo no meu post anterior ter pelo menos uma funcionalidade via macro. A macro que eu criei segue num TXT em anexo neste post. Ela funciona assim: De inicio as variáveis aluno e lista começam valendo 2 pois na tabela os dados começam na linha 2. Aí entra num FOR onde lista vai da linha 2 a linha 17. Cada vez que o valor de linha incrementa 1 a macro compara o valor da coluna B com coluna K, se for igual escreve 'presente' na coluna U na frente da respectiva linha. Tá funcionando beleza.

 

O problema é que quando termina este FOR eu preciso que o valor da variável aluno passe para 3 e faça uma nova varredura com a variável lista valendo novamente 2 a 17. E depois aluno tem que valer 4, depois 5, depois, 6 até 17 também.

 

Mas o problema é que quando o laço FOR acaba, sai do laço, e volta lá em cima reiniciando a macro e as variáveis.

 

Alguém sabe como eu resolvo isso ? Mas só falar como fazer não vai dar certo, tem que pôr o código (quem não quiser ajudar assim peço que nem comente este post para não constranger quem de fato quiser ajudar).

 

Ateste.txt

Eu já coloquei que If lista = 17 then aluno = aluno + 1

 

Mas não deu certo porque recomeça e zera as variáveis. E se eu colocar isso dentro do laço FOR aí ele não varre até 17 com aluno valendo 2. primeiro tem varrer até 17 com aluno = 2, depois tornar a varrer de 2 a 17 com aluno valendo 3, e assim por diante até aluno = 17.

Postado
Sub PresenteOuAusente()
 Dim d As Range
  Set d = Rows(1).Find([F2])
  If Not d Is Nothing Then
   d.Offset(1).Resize(16).FormulaR1C1 = _
    "=IF(COUNTIF(R2C2:R17C2,RC11),""P"",""Faltou"")"
   d.Offset(1).Resize(16).Value = d.Offset(1).Resize(16).Value
  Else: MsgBox "DATA DE F2 NÃO ENCONTRADA NA LINHA 1"
  End If
End Sub

 

Postado

OREIAG, show. Deu certo. Grato D+. Só tem um detalhe, veja o print de tela em anexo. Note que eu excluí da lista à esquerda o aluno Kaique Mendes, ID = 8. E de fato o campo que antes era P foi preenchido com Faltou. Perfeito. Aí eu decidi mudar a data da aluna Maria Sophia Correia, cortou no print. Mudei de 01-08-2022 para 02-08-2022, neste caso a célula a ser preenchida com P ou Faltou seria a V11 pois V1 é a coluna da data 02-08-2022. Ou seja, a célula a ser preenchida corresponde ao aluno e também a data. Só falta isso.

 

 

TesteVBA.jpg

OreiaG. Eu quis dizer que a coluna V é a responsável pelas Datas (escrevi V1 no post anterior). No caso vai de U até AY, este intervalo cobre o mês de Agosto que é um mês 'grande' que tem 31 dias. Ou seja, não vai ter mês maior que isso. Desculpa, realmente não falei isso no meu primeiro post de hoje.

 

 

OreiaG, se não for trivial o tal ajuste, deixa pra lá. Eu posso sem dúvida mudar meu jeito de colar os dados de tal forma que faça a colagem por data, ou seja, todos com a mesma data. Depois se houver mais dados será mais um conjunto com a mesma data e assim por diante. Sua ajuda já foi sensacional. Muito grato mesmo.

 

Postado
53 minutos atrás, eletron1791 disse:

Aí eu decidi mudar a data da aluna Maria Sophia Correia, cortou no print. Mudei de 01-08-2022 para 02-08-2022,...

 

Eu considerei que todas as datas seriam iguais, como está na sua planilha, pois a coluna G traz uma sequência de horários, o que passa a impressão que trata-se de um controle de presença, obtido de outro programa que faz o registro de entrada dos alunos por dia.

 

Confirme se ao "colar as informações dentro do retângulo" poderá ocorrer "mistura" de datas na coluna F, assim poderemos ajustar o código.

Postado

Você considerou de forma totalmente correta e inteligente, eu é que não expliquei este detalhe da possibilidade dos dados virem com datas misturadas. Pode acontecer sim. Mas basta mudarmos nossa forma de alimentar a planilha. Eu coloquei um botão para rodar a sua macro. Assim eu vou colando os dados por data e pressionando o botão. Vou pensar sobre como pôr uma msgbox que abra caso a demais datas da coluna F sejam diferente da F2, aí abre um alerta na tela. Aí eu excluo a linha diferente e torno a agrupar as linhas que tenham a mesma data.

 

 

Postado

Considerando a possibilidade de datas diferentes na coluna F, o código abaixo irá lançar "P" para os IDs da coluna B nas respectivas datas da coluna F.

Sub Presentes()
 Dim k As Long, rID As Range, rD As Range
  For k = 2 To Cells(Rows.Count, 2).End(xlUp).Row
   Set rID = [K:K].Find(Cells(k, 2), Lookat:=xlWhole)
   Set rD = Rows(1).Find(Cells(k, 6))
   If Not rID Is Nothing And Not rD Is Nothing Then
    Cells(rID.Row, rD.Column) = "P"
   End If
  Next k
End Sub

 

Quanto ao lançamento das faltas, uma solução seria o código abaixo, executado da seguinte maneira:  após sucessivas operações de "colar as informações dentro do retângulo" e executar o código acima, os lançamentos de "P" no dia 01 por exemplo, estarão esgotados pois não mais aparecerá dia 01 na coluna F, e as células que restarem vazias naquele dia corresponderão às faltas. Então selecione a célula U1 e execute o código abaixo para lançar as faltas do dia 01. Igual para os demais dias do mês.

Sub Faltas()
 ActiveCell.Offset(1).Resize(Cells(Rows.Count, 12).End(xlUp).Row - 1).SpecialCells(4) = "Faltou"
End Sub

 

Você pode associar o código acima a um atalho de teclado, por exemplo Ctrl+f, assim não precisará "deslizar" a planilha na tela em busca de um botão para executar a macro, bastará selecionar U1, ou outro dia qualquer na linha 1, e teclar o atalho.

Para criar o atalho >> Alt + F8 >> selecione Faltas >> Opções >> no campo Ctrl+ digite f.

 

Ou, se você tiver outra ideia para lançar as faltas, vamos considerar.

Postado

Testei aqui, destaco esta parte do seu texto: "e as células que restarem vazias naquele dia corresponderão às faltas" pois eu excluí 2 alunos e  mesmo assim esta macro coloca P em todos. Mas de fato agora ela coloca P na célula correspondente também a data. Mas além de colocar P em todos, U2 a U17 (mesmo nos alunos que eu exclui), a macro também coloca P em B18. Aí não cheguei a testar a macro das faltas pois não havia célula vazia na data 01-08-2022 que é a respectiva coluna U.

 

Mas já pensei em guardar bem esta nossa conversa pois mais adiante eu penso em incluir 6 aulas para cada dia. Aí a planilha saberia que aula é pelo horário. Teria uma tabela de referência com horários e assim pegaríamos também os horários na coluna G e preencheria "P" ou "Faltou" na célula correspondente a cada aula. Mas isso é depois e envolverá, é claro, a sua vontade e disponibilidade. Tipo assim:

Aula 1: 07:00:01 a 07:40:00

Aula 2: 07:40:01 a 08:20:00

Aula 3: 08:20:01 a 09:00:00

Aula 4: 09:20:01 a 10:00:00

Aula 5: 10:00:01 a 10:40:00

Aula 6: 10:40:01 a 11:20:00 

 

Mas voltando à nossa situação de agora eu ainda fico com a sua primeira opção pois é bem fácil ordenar a lista por data e ir colando somente as datas iguais. Entretanto posso continuar fazendo mais testes se for o caso.

 

Grato D+

 

Segue a planilha mais recente. O P que é lançado em B18 só aparece se excluir um aluno qualquer da lista, excluir uma linha inteira, no caso eu dou um CTRL X recortando e colocando a linha mais abaixo só para testar.

 

http://www.fileconvoy.com/dfl.php?id=ge2984dbff6445c711000445421e558825ab395dc1a

Postado
1 hora atrás, eletron1791 disse:

... pois eu excluí 2 alunos e  mesmo assim esta macro coloca P em todos.

O código verifica os IDs da coluna B, então se você excluiu o nome do aluno na coluna C e manteve o ID, ele será processado. Para não processar certo aluno exclua o seu ID.

 

... a macro também coloca P em B18.

Isso ocorre se as células com o ID e com a data estiverem vazias.  Para prevenir coloquei abaixo uma condição para não processar se a célula da coluna B estiver vazia (sem ID). >>> If Not rID Is Nothing And Not rD Is Nothing And Cells(k, 2) <> "" Then

 

Aí não cheguei a testar a macro das faltas pois não havia célula vazia na data 01-08-2022 que é a respectiva coluna U.

Para testar basta apagar alguns Ps na coluna U, ou colocar datas diferentes em F, assim ficarão células vazias em U.

 

 

Nota - para anexar arquivos com macros aqui no fórum é necessário compactar o arquivo (zip ou similar)

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...