Formatando um número como texto e adicionando uma string

Oct 08 2020

Não tenho certeza se devo postar isso aqui ou no Stackoverflow, já que estou fazendo algo em VBA, mas a fórmula que desejo usar é apenas o Excel básico:

Exemplo, tenho um número em uma de minhas células: 1741579193,58 (para falantes de inglês, provavelmente mostraria (1741579193,58)

Desejo o seguinte formato: 1.741.579.193,58 EUR (para falantes de inglês: 1.741.579.193,58 EUR)

Na minha região, a fórmula é a seguinte: TEXT(L33; "#.##0,00;;;")que deve ser TEXT(L33, "#,##0.00;;;")para qualquer pessoa em um país de língua inglesa. Eu entendo os separadores isso, mas adicionar "EUR" no final se mostra mais difícil. Bem, eu poderia usar =TEXT(L33; "#.##0,00;;;") & " EUR", mas posso adicionar o "EUR" diretamente na fórmula de texto de alguma forma?

Respostas

4 PeterH Oct 08 2020 at 17:51

Você pode usar o seguinte para conseguir isso:

=TEXT(A1,"###,###,##0.00")&"EUR"

Ou você pode aplicar um formato de número personalizado, de modo que quando você inserir um número como 1741579193.58na célula, ele será formatado como1,741,579,193.58 EUR

Clique com o botão direito nas células às quais deseja aplicá-lo, selecione formatar células e siga a imagem abaixo

2 Jeorje Oct 09 2020 at 06:08

A primeira coisa a dizer é que a resposta já dada é muito correta em oferecer a você a maneira de fazê-lo, embora permitindo que os dados permaneçam um número. É extremamente versátil dessa forma, enquanto a formatação personalizada permitirá que você renderize visualmente quase sempre que necessário.

Em segundo lugar, porém, e este é um tipo de coisa bastante "tecnicamente ...", você pode colocar a parte "EUR" na própria TEXT()função em si, e não adicioná-la após a função fazer seu trabalho. O que você precisa entender é que o formato especificado entre as aspas duplas é apenas uma string. Tem que ser um "válido", com certeza, um que funcione diretamente no recurso de formatação personalizada, mas, mesmo assim, é apenas uma string. Então, se você descobrir como criá-lo no recurso de formatação personalizada, e levar em consideração como alguma formatação "legal" não funcionará na TEXT()função (geralmente, acredito, devido à dificuldade de criá-lo usando técnicas de string no recurso de formatação personalizada, você está digitando diretamente para algumas coisas que o Excel pode entender e que talvez sejam até impossíveis de transmitir dentro dos limites da criação da string, quando a string resultante deve seguir regras mais rígidas do que o normal).

Portanto, em vez do dado e mais prático, space"EUR"use a outra técnica para forçar caracteres (letras aqui) em uma string de formatação personalizada space\E\U\R::

=TEXT(A1,"#,##0.00 \E\U\R")

ou mesmo "#, ## 0.00" &" \E\U\R"para garantir que você se lembre de que usou aquele pequeno truque dois anos depois, quando precisava editar a pasta de trabalho, mas nunca mais usou o truque durante esses dois anos ...

No entanto, um uso real não técnico (mas raro) da técnica poderia ser obter informações de alguma célula da pasta de trabalho que o usuário pode editar para obter os componentes da string. Por exemplo, talvez apenas a parte "EUR". O usuário digita "EUR" na célula B1 talvez e você insere os \caracteres para que o usuário não precise inseri-los ou mesmo saber que existem:

=TEXT(A1,"#,##0.00 "&TEXTJOIN("",FALSE,"\"&MID(B1,SEQUENCE(1,LEN(B1)),1)))

Isso PRECISA de SPILLfuncionalidade, mas basicamente a última parte une um \caractere a cada caractere individual em sua entrada e os TEXTJOIN()pontos que se juntam para adicionar à string de formatação. Se você, talvez, usou sua entrada em outra vertente do resultado mostrado, o valor em seus dados que estão sendo tratados pode ter sido armazenado como Lira turca e você adquire esse conhecimento, adicione a entrada que se supõe representaria "Euro" e converter a lira em euros, e essa seria a parte numérica da operação, ocupando o lugar do "A1" que tenho acima.

Outras maneiras de fazer isso, é claro, mas isso coloca as duas metades juntas, dependendo da única entrada do usuário, então ...

Finalmente, voltando ao fato de que a saída de TEXT()é ... bem, TEXT. Não numérico, é mais difícil de usar depois. É verdade, como concordo acima, mas não "muito mais difícil", apenas "um pouco mais difícil". Afinal, você sabe qual texto adicionou à parte numérica. Portanto, uma fórmula como a seguinte pode desfazer isso para você:

=VALUE(SUBSTITUTE(C1," EUR",""))

(se o resultado estiver em C1). Ou o que for para o texto no resultado. Agora é um número novamente e pode avançar em seu uso posterior como um número, não como um texto. NÃO é tão difícil e permite que você tenha o melhor de todos os mundos com o mecanismo escolhido.

Dito isso, mais reflexão ao projetar a pasta de trabalho frequentemente evita esse tipo de idas e vindas. Vale a pena colocar o esforço! Mas não só você tem que saber muitas possibilidades (se tudo que você tem é um martelo, você tem que fazer o martelo funcionar de alguma forma), há uma outra GRANDE restrição que muitas vezes temos que enfrentar: você vai assumir o controle de outra pessoa trabalhe, seu tempo é limitado, você precisa do resultado AGORA, e o trabalho da última pessoa é muito bizantino, então você só pode controlar uma parte dele no tempo que tem, muito menos reescrever tudo com segurança. E relacionado a isso, muitas vezes os usuários (ou seja: seu chefe) estão MUITO acostumados com o layout exato e os mecanismos de entrada exatos e (com menos frequência, lol) têm preocupações reais em ter certeza de que suas edições não arruinaram a integridade de seus resultado. Certo ou errado (Muitas vezes, na verdade o último. Especialmente quando um autor usou IFERROR()livremente ...), algo que parece estar certo por cinco anos é considerado válido e sem erros. Suas mudanças agora ... nem tanto.

Portanto, no mundo real, muitas vezes você só pode pensar no design para consertar todo o trabalho infeliz e lentamente trabalhá-lo em suas edições ao longo do tempo. Enquanto isso, você precisa de coisas como as acima. Não importa o quanto você gostaria de usar o "design adequado".