Excel - Numeros a letras

 
Vista:
sin imagen de perfil

Numeros a letras

Publicado por Pamela (2 intervenciones) el 19/05/2020 07:52:32
Hola buenas
Soy nueva mucho gusto
quisiera ver si alguien me pudiese ayudar con esto

tengo esta macros para cambiar los numeros a letras
pero no se como lograr que la palabra peso y pesos aparezca al final de cada oracion que se forme una sola vez

ahi va el codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function CONVERTIRNUMEROLETRA(Numero As Long) As String
 
Dim Unidades, Decenas, Centenas
Dim Resultado As String
 
'**************************************************
' Nombre de los números
'**************************************************
Unidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
'**************************************************
Select Case Numero
Case 0
Resultado = "Cero"
Case 1 To 29
Resultado = Unidades(Numero)
Case 30 To 100
Resultado = Decenas(Numero \ 10) + IIf(Numero Mod 10 <> 0, " y " + CONVERTIRNUMEROLETRA(Numero Mod 10), "")
Case 101 To 999
Resultado = Centenas(Numero \ 100) + IIf(Numero Mod 100 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 100), "")
Case 1000 To 1999
Resultado = "Mil" + IIf(Numero Mod 1000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000), "")
Case 2000 To 999999
Resultado = CONVERTIRNUMEROLETRA(Numero \ 1000) + " Mil" + IIf(Numero Mod 1000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000), "")
Case 1000000 To 1999999
Resultado = "Un Millón" + IIf(Numero Mod 1000000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000000), "")
Case 2000000 To 1999999999
Resultado = CONVERTIRNUMEROLETRA(Numero \ 1000000) + " Millones" + IIf(Numero Mod 1000000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000000), "")
End Select
CONVERTIRNUMEROLETRA = Resultado
 
End Function


gracias de antemano :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Numeros a letras

Publicado por Andres Leonardo (1583 intervenciones) el 19/05/2020 18:50:56
Pues la Sencilla ......

cuando la llames

1
Text2.Text = CONVERTIRNUMEROLETRA(Text1.Text) & " Pesos"


funcionletrasnumeros
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Numeros a letras

Publicado por Antoni Masana (2478 intervenciones) el 19/05/2020 21:58:39
Te pongo otra solución alternativa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Function CONVERTIRNUMEROLETRA(Numero As Long, Optional Texto1 as String = " Peso", Optional Texto2 as String = " Pesos") As String
    Dim Unidades, Decenas, Centenas
    Dim Resultado As String
 
    '**************************************************
    ' Nombre de los números
    '**************************************************
    Unidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
    Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
    Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
    '**************************************************
    Select Case Numero
        Case 0
            Resultado = "Cero"
        Case 1 To 29
            Resultado = Unidades(Numero)
        Case 30 To 100
            Resultado = Decenas(Numero \ 10) + IIf(Numero Mod 10 <> 0, " y " + CONVERTIRNUMEROLETRA(Numero Mod 10,  "", ""), "")
        Case 101 To 999
            Resultado = Centenas(Numero \ 100) + IIf(Numero Mod 100 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 100,  "", ""), "")
        Case 1000 To 1999
            Resultado = "Mil" + IIf(Numero Mod 1000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000,  "", ""), "")
        Case 2000 To 999999
            Resultado = CONVERTIRNUMEROLETRA(Numero \ 1000,  "", "") + " Mil" + IIf(Numero Mod 1000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000,  "", ""), "")
        Case 1000000 To 1999999
            Resultado = "Un Millón" + IIf(Numero Mod 1000000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000000,  "", ""), "")
        Case 2000000 To 1999999999
            Resultado = CONVERTIRNUMEROLETRA(Numero \ 1000000,  "", "") + " Millones" + IIf(Numero Mod 1000000 <> 0, " " + CONVERTIRNUMEROLETRA(Numero Mod 1000000,  "", ""), "")
    End Select
    CONVERTIRNUMEROLETRA = Resultado + Texto + IIF(Numero=1, Texto1, Texto2)
End Function


La llamara a la función no cambia:

1
Text2.Text = CONVERTIRNUMEROLETRA(Text1.Text)

Pero tiene una nueva opción, el texto en singular y en plural:

1
Text2.Text = CONVERTIRNUMEROLETRA(Text1.Text; " Yen", " Yenes")

Adjunto un libro de ejemplo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Numeros a letras

Publicado por Pamela (2 intervenciones) el 21/05/2020 07:46:24
Hola, gracias por sus respuestas.
Por alguna razon divina (probablemente yo), no me funcionaron las opciones...luego de intentarlas excel me arrojaba mensaje de que la formula tenia error de sintaxis...asi que segui buscando y encontre esto que me ha funcionado bien. miren.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
Option Explicit
Function cMoneda2(num As Double, TipoCambio1 As String, TipoCambio2 As String, Optional Centavos As Byte, Optional Denominacion As String) As String
 
Dim nEntero As Long
Dim nDecimal As Double
Dim Texto As String
 
nEntero = Int(num)
nDecimal = Int(Round((num - nEntero) * 100)) 'Corrección de últimoo momento
 
Texto = cNumero(nEntero)
 
' Agrega la moneda
If nEntero = 1 Then
    Texto = Texto + " " + TipoCambio1
    'Texto = Texto + " Dólar"
Else
    If (nEntero Mod 1000000) = 0 Then
Texto = Texto + " de"
    End If
Texto = Texto + " " + TipoCambio2
    'Texto = Texto + " Dólares"
End If
 
'Agrega los centavos
If Centavos = 1 Then
    If nDecimal <> 0 Then
            Texto = Texto & " Con " & cNumero(nDecimal)
        If nDecimal = 1 Then
         Texto = Texto & " Centavo"
    Else
        Texto = Texto & " Centavos"
    End If
End If
 
ElseIf Centavos = 0 Then
    If nDecimal <> 0 Then
        Texto = Texto & " con "
        If nDecimal = 1 Then
            Texto = Texto & nDecimal & "/100"
        Else
        Texto = Texto & nDecimal & " centavos " & "/100"
        End If
    End If
End If
 
cMoneda2 = VBA.UCase(Texto) & " " & Denominacion
 
 
 
End Function
Function cNumero(ByVal num As Long) As String
Dim Texto As String
 
Dim cUnidades, cDecenas, cCentenas
Dim nUnidades, nDecenas, nCentenas As Byte
 
Dim nMiles As Long
Dim nMillones As Long
 
 
cUnidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciseis", "Diecisite", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidós", "Veintitrés", "Veitnicuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
cDecenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
cCentenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
 
nMillones = num \ 1000000
nMiles = (num \ 1000) Mod 1000
nCentenas = (num \ 100) Mod 10
nDecenas = (num \ 10) Mod 10
nUnidades = num Mod 10
 
 
'Evaluación de Millones
 
If nMillones = 1 Then
Texto = "Un Millón" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000), "")
cNumero = Texto
Exit Function
ElseIf nMillones >= 2 And nMillones <= 999 Then
Texto = cNumero(num \ 1000000) + " Millones" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000), "")
cNumero = Texto
Exit Function
 
 
 
'Evaluación de Miles
 
ElseIf nMiles = 1 Then
Texto = "Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
cNumero = Texto
Exit Function
ElseIf nMiles >= 2 And nMiles <= 999 Then
Texto = cNumero(num \ 1000) + " Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
cNumero = Texto
Exit Function
 
End If
 
'Evaluación desde 0 a 999
 
 
'Casos Especiales
If num = 100 Then
Texto = cDecenas(10)
cNumero = Texto
Exit Function
ElseIf num = 0 Then
Texto = "Cero"
cNumero = Texto
Exit Function
End If
 
 
 
If nCentenas <> 0 Then
Texto = cCentenas(nCentenas)
End If
 
 
If nDecenas <> 0 Then
If nDecenas = 1 Or nDecenas = 2 Then
        If nCentenas <> 0 Then
            Texto = Texto + " "
        End If
Texto = Texto + cUnidades(num Mod 100)
cNumero = Texto
Exit Function
Else
 
If nCentenas <> 0 Then
    Texto = Texto + " "
End If
 
Texto = Texto + cDecenas(nDecenas)
End If
End If
 
 
If nUnidades <> 0 Then
If nDecenas <> 0 Then
Texto = Texto + " y "
ElseIf nCentenas <> 0 Then
Texto = Texto + " "
End If
Texto = Texto + cUnidades(nUnidades)
End If
 
 
cNumero = Texto
End Function




A pesar de que trabaja con centavos, si no se agrega la coma al escribir el numero funciona bien con enteros (que es lo que necesito).
Al posicionarse sobre la celda se escribe la formula y la da opción de introducir parámetros propios para adaptarla a distintas monedas.
gracias por la ayuda :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar