Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Excel - Fórmulas

620 views
Skip to first unread message

Mateus@discussions.microsoft.com Sara Mateus

unread,
Jul 8, 2008, 9:32:06 AM7/8/08
to
Boa tarde.

Estou com um pequeno problema: nas funções do Excel 2007 existe uma fórmula
que converte números em texto - mas infelizmente em texto tailandês (baht).
Na ajuda da função é dito que podemos alterar para outro estilo (que eu
suponho signifique outra língua) alterando as definições em Definições
Regionais e de Idioma, mas sinceramente já alterei tudo o que havia para
alterar e a fórmula continua a converter números em texto tailandês...
Estarei a esquecer-me de algo, ou a fórmula não converte mesmo para português?

JRod

unread,
Jul 14, 2008, 10:48:32 AM7/14/08
to
Olá Sara,

Podes utilizar o código em anexo e usá-lo como uma tua função, que adaptarás
às tuas necessidades.

De resto, não há mais nada (que eu saiba).

Fica bem.


--
JRod

Microsoft Excel MVP
Site: http://www.exceler.org
Blog: http://exceler.blogspot.com
Email1: ma...@exceler.org
Email2: jorge.r...@exceler.org

"Sara Mateus" <Sara Mat...@discussions.microsoft.com> escreveu na notícia da
mensagem:B888460C-F4F3-4B9D...@microsoft.com...

ExtensoPT.txt

Sara Mateus

unread,
Jul 14, 2008, 2:59:09 PM7/14/08
to
Olá, JRod

Obrigada pela resposta; infelizmente não localizei o código que anexaste,
pelo que agradeço que repitas o procedimento. Desculpa a maçada.

JohnL

unread,
Jul 15, 2008, 9:49:11 AM7/15/08
to
O Anexo que o utilizador JRod enviou foi num ficheiro de texto que contém a
seguinte informação


Inicio ########################

Function VExtenso(NValor)
On Error GoTo 99
If IsNull(NValor) Or NValor > 9999999 Then
VExtenso = "# VALOR POR EXTENSO..............."

Exit Function
End If

If (NValor) < 0 Then
NValor = NValor * -1
End If

Dim nContador, nTamanho As Integer
Dim CValor, CPArte, CFinal, Etiq As String
ReDim aGrupo(4), aTexto(4) As String


ReDim aUnid(19) As String
aUnid(1) = "Um ": aUnid(2) = "Dois ": aUnid(3) = "Três "
aUnid(4) = "Quatro ": aUnid(5) = "Cinco ": aUnid(6) = "Seis "
aUnid(7) = "Sete ": aUnid(8) = "Oito ": aUnid(9) = "Nove "
aUnid(10) = "Dez ": aUnid(11) = "Onze ": aUnid(12) = "Doze "
aUnid(13) = "Treze ": aUnid(14) = "Quatorze ": aUnid(15) = "Quinze "
aUnid(16) = "Dezasseis ": aUnid(17) = "Dezassete ": aUnid(18) = "Dezoito "
aUnid(19) = "Dezanove "

ReDim aDezena(9) As String
aDezena(1) = "Dez ": aDezena(2) = "Vinte ": aDezena(3) = "Trinta "
aDezena(4) = "Quarenta ": aDezena(5) = "Cinquenta "
aDezena(6) = "Sessenta ": aDezena(7) = "Setenta ": aDezena(8) = "Oitenta "

aDezena(9) = "Noventa "

ReDim aCentena(9) As String
aCentena(1) = "Cento ": aCentena(2) = "Duzentos "
aCentena(3) = "Trezentos ": aCentena(4) = "Quatrocentos "
aCentena(5) = "Quinhentos ": aCentena(6) = "Seiscentos "
aCentena(7) = "Setecentos ": aCentena(8) = "Oitocentos "
aCentena(9) = "Novecentos "


CValor = Format$(NValor, "0000000000.00")
aGrupo(1) = Mid$(CValor, 2, 3)
aGrupo(2) = Mid$(CValor, 5, 3)
aGrupo(3) = Mid$(CValor, 8, 3)
aGrupo(4) = "0" + Mid$(CValor, 12, 2)


For nContador = 1 To 4
CPArte = aGrupo(nContador)
nTamanho = Switch(Val(CPArte) < 10, 1, Val(CPArte) < 100, 2, Val(CPArte) _
< 1000, 3)
If nTamanho = 3 Then
If Right$(CPArte, 2) <> "00" Then
aTexto(nContador) = aTexto(nContador) + aCentena(Left(CPArte, 1)) + _
"E "
nTamanho = 2
Else
aTexto(nContador) = aTexto(nContador) + IIf(Left$(CPArte, 1) = "1", _
"CEM ", aCentena(Left(CPArte, 1)))
End If
End If
If nTamanho = 2 Then
If Val(Right(CPArte, 2)) < 20 Then
aTexto(nContador) = aTexto(nContador) + aUnid(Right(CPArte, 2))
Else
aTexto(nContador) = aTexto(nContador) + aDezena(Mid(CPArte, 2, 1))
If Right$(CPArte, 1) <> "0" Then
aTexto(nContador) = aTexto(nContador) + "E "
nTamanho = 1
End If
End If
End If
If nTamanho = 1 Then
aTexto(nContador) = aTexto(nContador) + aUnid(Right(CPArte, 1))
End If
Next


If Val(aGrupo(1) + aGrupo(2) + aGrupo(3)) = 0 And Val(aGrupo(4)) <> 0 Then
CFinal = aTexto(4) + IIf(Val(aGrupo(4)) = 1, "Cêntimo", "Cêntimos")

Else
CFinal = ""
CFinal = CFinal + IIf(Val(aGrupo(1)) <> 0, aTexto(1) + _
IIf(Val(aGrupo(1)) > 1, "MILHÕES ", "MILHÃO "), "")
If Val(aGrupo(2) + aGrupo(3)) = 0 Then
CFinal = CFinal + "de "

Else
CFinal = CFinal + IIf(Val(aGrupo(2)) >= 1, aTexto(2) + "MIL ", "")
End If

CFinal = CFinal + aTexto(3) + IIf(Val(aGrupo(1) + aGrupo(2) + aGrupo(3)) _
= 1, "Euro ", "Euros ")
CFinal = CFinal + IIf(Val(aGrupo(4)) <> 0, "E " + aTexto(4) + _
IIf(Val(aGrupo(4)) = 1, "Cêntimo", "Cêntimos"), "")
End If

If NValor > 2 And NValor < 2000 And Left(CFinal, 2) = "UM" Then
CFinal = Mid(CFinal, 4, 250)
End If

'Só primeira maiúscula
If Len(CFinal) > 0 Then
CFinal = LCase(CFinal)
Mid(CFinal, 1, 1) = UCase(Left$(CFinal, 1))
End If

VExtenso = CFinal

Exit Function
99:
VExtenso = "# ERRO DE VALOR"
Exit Function

End Function


Fim ########################

Depois de colocar essa função no VBA basta na célula onde quer colocar o
extenso inserir a fórmula =VExtenso( Célula do valor ou valor )

"Sara Mateus" <SaraM...@discussions.microsoft.com> wrote in message
news:16ECF86F-0076-47DC...@microsoft.com...

User

unread,
Jul 21, 2008, 4:12:34 PM7/21/08
to
1000 € dá Um mil euros.

"JRod" <blog.e...@sapo.pt> escreveu na mensagem
news:1B24A852-DCBE-4B4D...@microsoft.com...

Sara Mateus

unread,
Jul 24, 2008, 6:51:00 AM7/24/08
to
Bom dia.

Agradeço a todos os que contribuiram para o esclarecimento desta dúvida.
No entanto, eu e o visual basic somos unha com carne - mas de mãos
diferentes (ok, mea culpa), pelo que pergunto: a introdução do código tem que
ser feita ficheiro a ficheiro (abri um novo livro e não reconheceu a função),
ou há outra forma?

Já agora, se alguém souber trabalhar o código de forma a criar um outro para
que converta não valores monetários mas cardinais (neste momento 2= dois
euros, e dava jeito ter também 2=dois ) ... obrigada!


"JRod" wrote:

> Caro "User"...
>
> Realmente aparece um mil. Em termos bancários, julgo que é uma questão de
> segurança. Claro que em bom português, está incorrecto, porque mil é plural
> e um é singular, ou seja, não bate bem... mas, porque não tentas adaptar o
> código, de modo a que, sempre que seja "mil", não apareça o "um"?
>
> Experimenta e depois diz-nos qq coisa, ok?


>
> --
> JRod
>
> Microsoft Excel MVP
> Site: http://www.exceler.org
> Blog: http://exceler.blogspot.com
> Email1: ma...@exceler.org
> Email2: jorge.r...@exceler.org
>

> "User" <us...@news.pt> escreveu na notícia da
> mensagem:u5Avf426...@TK2MSFTNGP05.phx.gbl...

User

unread,
Jul 24, 2008, 7:55:11 AM7/24/08
to

"Sara Mateus" <SaraM...@discussions.microsoft.com> escreveu na mensagem
news:D3596E69-8F84-4FC6...@microsoft.com...

> Bom dia.
>
> Agradeço a todos os que contribuiram para o esclarecimento desta dúvida.
> No entanto, eu e o visual basic somos unha com carne - mas de mãos
> diferentes (ok, mea culpa), pelo que pergunto: a introdução do código tem
> que
> ser feita ficheiro a ficheiro (abri um novo livro e não reconheceu a
> função),
> ou há outra forma?

Experimenta o seguinte:
Abre o visual basic do excel (Alt+F11)
No visual basic insere um módulo
Copia e cola o código do JRod no módulo
Agora no excel já podes inserir a fórmula VExtenso(NValor)
definida pelo utilizador.

> Já agora, se alguém souber trabalhar o código de forma a criar um outro
> para
> que converta não valores monetários mas cardinais (neste momento 2= dois
> euros, e dava jeito ter também 2=dois ) ... obrigada!
>

Isso dá um bocado de trabalho, pede ao JRod, que conhece melhor o código.

User

unread,
Jul 24, 2008, 8:35:41 AM7/24/08
to
Aqui há uns anos também me lembrei de fazer uma fórmula que escrevesse um
valor por extenso.
Estive a procurar e encontrei o código para dólares. É um código muito
básico feito por um amador.
Em princípio para euros basta substituir o termo final, mas para valores
altos, tipo mil milhões, os americanos escrevem diferente.
valor em dolares por extenso.txt

Excute

unread,
Jul 26, 2008, 6:57:17 PM7/26/08
to
Boa noite,

Tenta este site:
http://www.vextenso.com.br/novo-site.html


"Sara Mateus" <Sara Mat...@discussions.microsoft.com> escreveu na mensagem
news:B888460C-F4F3-4B9D...@microsoft.com...

0 new messages