Converter numero de dias em "AA anos, MM meses e DD dias" (por extenso)

Sem a necessidade de recorrer ao BASIC, o CALC permite criar EXPRESSÕES que podem ser usadas como se usa as FUNÇÕES.
A vantagem desse método é que as funções criadas no BASIC precisam de uma chamada para serem atualizadas, o que é sempre inconveniente em uma planilha de trabalho, enquanto que usando as expressões nomeadas a atualização é automática.
Vamos dar um exemplo e aproveitar para criar uma função que transforme um determinado número de dias em um texto por extenso no formato “AA anos, MM meses e DD dias”.
Digamos que a célula A10 tenha esse determinado número de dias que se quer converter. Precisaremos de mais três Células livres à direita para criar a função (Até pode ser feita usando apenas uma célula - a que conterá o texto por extenso - , mas daí ficaria desnecessariamente complexa a fórmula).

  1. Posicione o Apontador em B10, vá em PLANILHA/INTERVALOS NOMEADOS E EXPRESSÕES/DEFINIR
    Em nome, digite TIRAMES e em INTERVALO OU EXPRESSÃO coloque INT(MOD(A10;360)/30). E clique em ADICIONAR.
  2. Posicione o Apontador em C10, vá em PLANILHA/INTERVALOS NOMEADOS E EXPRESSÕES/DEFINIR
    Em nome, digite TIRADIA e em INTERVALO OU EXPRESSÃO coloque INT(MOD(A10;30)). Clique em ADICIONAR.
  3. Posicione o Apontador em D10, vá em PLANILHA/INTERVALOS NOMEADOS E EXPRESSÕES/DEFINIR
    Em nome, digite TEMPOEXT e em INTERVALO OU EXPRESSÃO coloque:
    SE(A10<360;""; INT(A10/360) & SE(A10<720;" ano";" anos") & ESCOLHER((B10>0)+(C10>0)+1; “” ; " e “;”, “)) & SE(B10=0;”"; B10 & SE(B10=1;" mês";" meses") & SE(C10=0;"";" e “) ) & SE(C10=0;”"; C10 & SE(C10=1;" dia";" dias") )
    Clique em ADICIONAR.

Pronto. As funções estão criadas.
Agora, para obter o resultado esperado, use as três células à direita daquela que conterá o número total de dias a converter e digite nelas, respectivamente =TIRAMES =TIRADIAS =TEMPOEXT

Assim, se o número total de dias em A10 for 876, a célula D10 mostrará o texto “2 anos, 5 meses e 6 dias”.
Pontuação, omissões e plurais serão adaptados automaticamente: 388 mostrará “1 ano e 28 dias”
(Acho que nem precisa explicar como fazer para considerar anos de 365 dias)

Se não quiser que as células de TIRAMES e TIRADIAS apareçam, basta posicioná-las em uma coluna oculta da sua planilha, adaptando as fórmulas.

1 Like

Ola @Jedison, uso uma maneira mais fácil…

Por exemplo em

  • A1 = Data Nascimento;
  • A2 = Data atual;
  • A3 =DATADIF(A1;A2;“y”)&" anos,"&DATADIF(A1;A2;“ym”)&" meses, “&DATADIF(A1;A2;“md”)&” dias."

Oi Gilberto.
Bom “vê-lo” aqui, onipresente amigo.
A sua formulação é boa, e tem a virtude de ser imensamente menos complexa.
Mas ela tem algumas limitações. Vou citar as que eu considero mais importantes:
A principal é que ela fornecerá textos como:
“2 anos, 1 meses, 0 dias”
“1 anos, 0 meses e 15 dias”
“1 anos, 0 meses e 0 dias”
A que proponho, nesses casos fornecerá, respectivamente:
“2 anos e 1 mês”
“1 ano e 15 dias”
“1 ano”
A segunda limitação, também muito importante, é que nem sempre o número de dias a ser expresso em AA anos, MM meses e DD dias decorre de uma “diferença de datas”. Eu a utilizo, por exemplo, para concatenar uma soma de dias. Num caso são, por exemplo, 90 dias, noutro 120, noutro 14. A soma deles será 224 dias, e preciso obter como resultado o texto “7 meses e 12 dias”.
A terceira limitação, que pode fazer com que o método não sirva dependendo do propósito, é que o seu formato apenas subtrai os valores de anos, meses e dias.

Ou seja, no seu método a diferença de dias entre 03/05/2010 e 08/06/2012 seria de “02 anos, 01 meses e 05 dias”. Esse cálculo serve para alguns propósitos mas deixa outros de fora. Muitos cálculos determinados pela legislação estabelecem que um determinado número de dias seja convertido em anos, meses e dias levando em conta anos de 360 dias (chamado ano legal) e meses de 30 dias (chamado mês legal). No meu método isso pode ser facilmente redimencionado, como expliquei, se eu quiser, por exemplo, sejam considerados anos de 365 dias.
E, se no meu método, eu precisar que o cálculo seja feito “subtraíndo os valores de anos, meses e dias” como acontece no seu, basta eu determinar, na célula onde constará o número de dias, o seu cálculo.

Claro que no seu método, todas essas limitações poderiam ser “facilmente” contornadas. Porém, aí você verá que a simplicidade da solução acaba, e no fim ficará bem mais complexa que a minha.
Veja, não estou dizendo que a sua solução está errada. Pelo contrário, como eu disse no início ela tem a GRANDE VIRTUDE de ser mais simples, e dependendo da exigência de um resultado mais, ou menos, refinado, deverá servir com bastante eficácia. Só estou dizendo que o meu método permite uma melhor AUTOMAÇÃO de textos (por isso coloquei aquela TAG).
Ah, e, claro, um dos objetivos da postagem foi TAMBÉM, mostrar como se cria uma FUNÇÃO no CALC, de forma fácil e sem a necessidade de recorrer a programação de MACROS (o mesmo que já debatemos naquela outra postagem).
Muito grato pela sua contribuição. Meu objetivo aqui é apenas aparelhar nossos colegas usuários do CALC com soluções para problemas incomuns. E a solução que você apontou faz cumprir com mérito este objetivo.

@Jedison, vamos dizer que cada caso é um caso, e o importante a dar escolhas para o usuário final usar o que mais lhe convêm.

E também existe a função pronta: https://wiki.documentfoundation.org/images/2/20/ValorPorExtenso.ods

e a extensão: Valor por extenso » Extensions

Claro!
Cada caso é um caso.
Quanto à função pronta, essa aí de redigir (Valor, e não data, como aqui tratamos) por extenso fiz em duas versões. Uma direto no CALC e outra por MACRO, cada uma com as suas vantagens. Só que a minha em CALC não usa tantas células assim…
Mesmo assim, obrigado pelas dicas.

Inseri a fórmula sugerida, mas retornou erro 501. O que fazer?

Ola @salles.lua , vide aqui…

https://help.libreoffice.org/latest/pt-BR/text/scalc/05/02140000.html