Microsoft Excel - Dúvidas e Suporte

Para simplificar ainda mais, podes fazer o seguinte:

Crias uma coluna (E) auxiliar com o nº de vezes que a palavra na coluna C apareceu até ao momento.
Crias nova coluna auxiliar (F) com o concatenar da C com a E.

Fazes o procv a ir buscar a informação à F, em que o valor a procurar é o Nome da pessoa com 2, 3,4 etc...

Ficas com o problema resolvido

Kasper1 - ABC
Kasper2 - DFG
Kasper3 - GFV
Kasper4 - BGN
 
=IFERROR(INDEX(C:C, SMALL(IF(B:B="Kasper", ROW(B:B)-ROW(B$1)+1), ROW()-ROW(D$1)+1)), "")

Essa fórmula usa a função INDEX para retornar a data da coluna C correspondente à linha em que a primeira, segunda, terceira, etc. ocorrência de "Kasper" é encontrada na coluna B. A função SMALL é usada para retornar o k-ésimo menor valor (onde k é a linha atual na coluna D), a partir de uma matriz de números que é gerada pela função IF. A matriz de números contém as linhas em que "Kasper" é encontrada na coluna B. A função ROW é usada para gerar uma matriz de números de linha correspondente à coluna B, e a função ROW(B$1) é usada para subtrair o número da primeira linha da coluna B de cada número de linha na matriz. Isso é necessário para garantir que a matriz de números comece em 1 em vez de 0. A função IFERROR é usada para lidar com casos em que não há mais ocorrências de "Kasper" na coluna B e, portanto, a fórmula retornaria um erro.

Para usar a fórmula em todas as células da coluna D, basta arrastar a fórmula para baixo. Lembre-se de ajustar o valor "Kasper" na fórmula para corresponder ao nome que você está procurando na coluna B. E também verifique se o formato de data na coluna C é reconhecido pelo Excel para que a fórmula funcione corretamente.
by CHATGPT
 
=IFERROR(INDEX(C:C, SMALL(IF(B:B="Kasper", ROW(B:B)-ROW(B$1)+1), ROW()-ROW(D$1)+1)), "")

Essa fórmula usa a função INDEX para retornar a data da coluna C correspondente à linha em que a primeira, segunda, terceira, etc. ocorrência de "Kasper" é encontrada na coluna B. A função SMALL é usada para retornar o k-ésimo menor valor (onde k é a linha atual na coluna D), a partir de uma matriz de números que é gerada pela função IF. A matriz de números contém as linhas em que "Kasper" é encontrada na coluna B. A função ROW é usada para gerar uma matriz de números de linha correspondente à coluna B, e a função ROW(B$1) é usada para subtrair o número da primeira linha da coluna B de cada número de linha na matriz. Isso é necessário para garantir que a matriz de números comece em 1 em vez de 0. A função IFERROR é usada para lidar com casos em que não há mais ocorrências de "Kasper" na coluna B e, portanto, a fórmula retornaria um erro.

Para usar a fórmula em todas as células da coluna D, basta arrastar a fórmula para baixo. Lembre-se de ajustar o valor "Kasper" na fórmula para corresponder ao nome que você está procurando na coluna B. E também verifique se o formato de data na coluna C é reconhecido pelo Excel para que a fórmula funcione corretamente.
by CHATGPT
Pois eu estou há dois dias com o GPT a ver se ajuda mas nada...obrigado pela resposta mas continua com Err:508
Vou instalar o MS Office a ver se consigo resolver isto.
 
Depois de instalar o MS Office...tudo na mesma!
o chatbot só me dá:
=OFFSET(C1:C700;MATCH("Kasper";B1:B700;1);1)
o que me retorna Sábado, janeiro, 00, 1900

=INDEX(B1:C700;procv(F604;B1:B700;0))
dá erro #NAME? e tenho Kasper na F604

=INDEX(C1:C700;MATCH(INDEX(B1:B700;MATCH("Kasper";B1:B700;0)+0;0);B1:B700;0)+1;0)
esta logica está bastante proximo do pretendido..
 
Última edição:
@SA-SS-A experimentei a formula em cima do @D-CLUB e funcionou.
Atenção que na segunda a parte da função do procv parece-me mal construída e parece-me que estás a misturar funções escritas em PT e ING.
O correto seria por exemplo assim: PROCV(F604;$B$1:$C$700;2;FALSO)
 
Última edição:
@SA-SS-A experimentei a formula em cima do @D-CLUB e funcionou.
Atenção que na segunda a parte da função do procv parece-me mal construída e parece-me que estás a misturar funções escritas em PT e ING.
O correto seria por exemplo assim: PROCV(F604;$B$1:$C$700;2;FALSO)
Muito estranho entao algo se passa...
se eu colocar =IFERROR(INDEX(C:C, SMALL(IF(B:B="Kasper", ROW(B:B)-ROW(B$1)+1), ROW()-ROW(D$1)+1)), "")
p que acontece é que me dá erro:
err.jpg

quanto ao PROCV agradeço a correção! apesar de ja ter entendido que nao posso utilizar porque eu quero que retribua texto ou datas.
 
Última edição:
@SA-SS-A Basta usares uma função qualquer e vês logo o que ele usa.

EDIT: Experimenta esta então:
=IFERROR(INDEX(C:C; SMALL(IF(B:B="Kasper"; ROW(B:B)-ROW(B$1)+1); ROW()-ROW(D$1)+1)); "")
 
Última edição:
ok @SA-SS-A, em vez de SEERRO experimenta SE.ERRO com o ponto.
ATÉ QUE EM FIM!!! E parabéns era isso mesmo! Muito obrigado! Engraçado porque so funciona mesmo no one drive, eu exportei para o PC e quando abro a folha está lá o valor mas depois se altero alguma coisa passa a branco, mesmo que volte a colocar o valor antigo.

EDIT: Então eu fiz download do xlsx para o pc e agora quando altero a formula fica tudo em branco mas se arrastar a primeira para baixo ele vai buscar os valores correctamente preenchendo as celulas até ficar em branco, que é quando nao ha mais ocorrencias. Funcionar funciona mas não é nada pratico porque sempre que tenho um nome novo tenho de fazer este procedimento de importar para onedrive criar a primeira formula pelo menos e exportar. E já tenho mais de 50 nomes. Depois teria de arrastar a celula para baixo apenas para ir buscar os valores.
 
Última edição:
@SA-SS-A e se no OneDrive na fórmula em vez de andares a mudar o nome colocares uma célula tipo F2 e ires alterando o nome nessa célula?
Assim não tens que estar a mexer sempre na fórmula, basta teres essa fórmula em várias linhas para fazer essa filtragem que pretendes.

Ex:
Célula F2 - célula onde será alterado o nome do qual se pretende ter os dados.
Célula F3 =SE.ERRO(ÍNDICE(C:C; MENOR(SE(B:B=$F$2; LIN(B:B)-LIN(B$1)+1); LIN()-LIN(D$1)+1)); "")
Célula F4 =SE.ERRO(ÍNDICE(C:C; MENOR(SE(B:B=$F$2; LIN(B:B)-LIN(B$1)+1); LIN()-LIN(D$1)+1)); "")
Célula F5 =SE.ERRO(ÍNDICE(C:C; MENOR(SE(B:B=$F$2; LIN(B:B)-LIN(B$1)+1); LIN()-LIN(D$1)+1)); "")
Célula F6 =SE.ERRO(ÍNDICE(C:C; MENOR(SE(B:B=$F$2; LIN(B:B)-LIN(B$1)+1); LIN()-LIN(D$1)+1)); "")
Célula F7 =SE.ERRO(ÍNDICE(C:C; MENOR(SE(B:B=$F$2; LIN(B:B)-LIN(B$1)+1); LIN()-LIN(D$1)+1)); "")
etc..

Basta arrastares a fórmula até onde quiseres que acho que vai sempre funcionar para o que queres.
 
@riiie obrigado!
Entretanto fui descansar e hoje fez-se luz e já fucniona quer no Open Office quer no MS Office! E entao como fiz foi:
Código:
=VLOOKUP("Kasper"; INDIRECT("NOMEFOLHA!B"&(MATCH("Kasper"; NOMEFOLHA.B2:B700; 0)+1+ROW(NOMEFOLHA.B1))&":N601"); 2; 0)

Aqui está alterado para ir a outra folha buscar o valor e alterei os intervalos. Desta forma consigo ir buscar o segundo valor correspondente à direita (celula à direita), ou seja, quando Kasper se repete a segunda vez. E consigo controlar que coluna e que linha é para sacar o valor e aos arrastar passa ao valor segunte. Perfeito!

Espero que seja util porque pelo que vi não há muita gente a utilizar esta formula e nao é nada facil de chegar a ela, não sei como porque é elementar!
 
Última edição:
6dwjwbI.jpg


Tenho essa tabela...
Leia-se a tabela da esquerda para a direita.

Na coluna "1º Envio" é colocada a data em que o aviso é enviado pela primeira vez à pessoa.
Na coluna seguinte, "Entregue", é colocada a data em que esse 1º envio é entregue à pessoa. Esta data serve também como data de notificação.

Caso o 1º envio não seja entregue (como nos casos assinalados com ****), é feito um 2º envio.

Na coluna "2º Envio" é colocada a data em que o aviso é enviado pela segunda vez à pessoa.
Na coluna seguinte, "Entregue", é calculada de forma automática a data da notificação pelo 2º envio, sendo que a fórmula é =[data do 2º envio]+4.
Na coluna "Limite Of." é suposto
  • Se o 1º envio foi entregue (isto é, se existe uma data na coluna "Entregue"), contar + 10 dias a partir da data de entrega
  • Se não foi, verificar data de entrega do 2º envio, e contar + 10 dias a partir da data de entrega (do 2º envio)
  • (a célula deve ficar em branco se houver algum erro de fórmula ou valores que não interessem, tipo 10-01-1900)

Eu sei que isto não deve ser muito difícil de fazer, mas por algum motivo estou bloqueado...
 
Fui à IA do momento:

numa tabela de excel na coluna 1 é colocada a data em que o aviso é enviado pela primeira vez à pessoa, na coluna 2 é colocado a data de entrega do aviso, na coluna 3 é colocada a data em que o aviso é enviado outra vez, na coluna 4 é calculada o quarto dia depois do do aviso ser enviado outra vez. agora na coluna 5 quero que se houver uma data inserida na coluna 2 apareça o décimo dia a seguir a essa data ou se não tiver nada inserido quero que apareça o décimo dia depois da data da coluna 4. que formula ponho na coluna 5?

Para calcular a data desejada na coluna 5, você pode usar a função IF para verificar se há uma data na coluna 2. Se houver, você pode adicionar 10 dias a essa data usando a função DATE. Caso contrário, você pode adicionar 10 dias à data da coluna 4. Aqui está a fórmula que você pode usar na coluna 5:


=IF(B2<>"",DATE(YEAR(B2),MONTH(B2),DAY(B2))+10,DATE(YEAR(D2),MONTH(D2),DAY(D2))+10)

Nesta fórmula, assume-se que a linha atual começa na linha 2. B2 é a célula na coluna 2 que contém a data de entrega do aviso, enquanto D2 é a célula na coluna 4 que contém a data do quarto dia depois do aviso ser enviado outra vez. A função IF verifica se há uma data em B2. Se houver, a fórmula adiciona 10 dias a essa data usando a função DATE. Caso contrário, a fórmula adiciona 10 dias à data em D2.

A fórmula em português de Portugal ficaria assim:


=SE(B2<>"",DATA(ANO(B2);MÊS(B2);DIA(B2))+10,DATA(ANO(D2);MÊS(D2);DIA(D2))+10)

Note que a sintaxe das funções DATE e YEAR, MONTH e DAY foram substituídas por DATA e ANO, MÊS e DIA, respectivamente, de acordo com a versão em português do Excel. Além disso, o separador de argumentos da função DATA é o ponto e vírgula (;) ao invés da vírgula (,).


Acho que resulta.
 
Dá-me o erro #VALOR...

Mas entretanto estive a massacrar os neurónios e já solucionei.
Basicamente,

=SE([@Entregue]="";SE([@Entregue3]="";"";[@Entregue3]+10);[@Entregue]+10)

Ou seja, ele vai ver se o primeiro "Entregue" está vazio.
Se estiver, vai ver se o segundo "Entregue" também está vazio. Se estiver, fica em branco, se não estiver, faz essa data +10.
Se o primeiro não estiver vazio, faz essa data +10.

E assim nem dá erros nem mete 10-01-1900 nas linhas em que as células estão vazias.
 
Back
Topo