Código para convertir números a letras en VB

Pues con el fin de colaborar con las ideas de el_pop, y tambien para estrenar esta sección =b .

Aquí les comparto el código para convertir números a letras por medio de una macro en hojas de cálculo.

Esto es ideal para hacer una hoja de cálculo para llenar formatos de facturas.

Cabe destacar que este código esta adaptado a los Mexicanismos del área contable.

Por último, para invocar la función solo basta el parametro num_texto (y la celda en cuestión)

Pues sin mas preambulo, aquí el codigo, realmente sería bueno a ver quien lo puede pasar para que funcione en OO.

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Function Num_texto(Numero)
    Dim Texto
    Dim Millones
    Dim Miles
    Dim Cientos
    Dim Decimales
    Dim Cadena
    Dim CadMillones
    Dim CadMiles
    Dim CadCientos
    Texto = Numero
    Texto = FormatNumber(Texto, 2)
    Texto = Right(Space(14) & Texto, 14)
    Millones = Mid(Texto, 1, 3)
    Miles = Mid(Texto, 5, 3)
    Cientos = Mid(Texto, 9, 3)
    Decimales = Mid(Texto, 13, 2)
    CadMillones = ConvierteCifra(Millones, 1)
    CadMiles = ConvierteCifra(Miles, 1)
    CadCientos = ConvierteCifra(Cientos, 0)
    If Trim(CadMillones) > "" Then
        If Trim(CadMillones) = "UN" Then
            Cadena = CadMillones & " MILLON"
        Else
            Cadena = CadMillones & " MILLONES"
        End If
    End If
    If Trim(CadMiles) > "" Then
        Cadena = Cadena & " " & CadMiles & " MIL"
    End If
    If Trim(CadMiles & CadCientos) = "" Then
        Cadena = "(" & Cadena & "UNO CON " & "PESOS" & " " & Decimales & "/100 M.N)"
    Else
        If Miles & Cientos = "000000" Then
            Cadena = "(" & Cadena & " " & Trim(CadCientos) & " " & "PESOS" & " " & Decimales & "/100 M.N. )"
        Else
            Cadena = "(" & Cadena & " " & Trim(CadCientos) & " " & "PESOS" & " " & Decimales & "/100 M.N. )"
        End If
    End If
    Num_texto = Trim(Cadena)
End Function
 
Function ConvierteCifra(Texto, SW)
    Dim Centena
    Dim Decena
    Dim Unidad
    Dim txtCentena
    Dim txtDecena
    Dim txtUnidad
    Centena = Mid(Texto, 1, 1)
    Decena = Mid(Texto, 2, 1)
    Unidad = Mid(Texto, 3, 1)
    Select Case Centena
        Case "1"
            txtCentena = "CIEN"
            If Decena & Unidad <> "00" Then
                txtCentena = "CIENTO"
            End If
        Case "2"
            txtCentena = "DOSCIENTOS"
        Case "3"
            txtCentena = "TRESCIENTOS"
        Case "4"
            txtCentena = "CUATROCIENTOS"
        Case "5"
            txtCentena = "QUINIENTOS"
        Case "6"
            txtCentena = "SEISCIENTOS"
        Case "7"
            txtCentena = "SETECIENTOS"
        Case "8"
            txtCentena = "OCHOCIENTOS"
        Case "9"
            txtCentena = "NOVECIENTOS"
    End Select
 
    Select Case Decena
        Case "1"
            txtDecena = "DIEZ"
            Select Case Unidad
                Case "1"
                    txtDecena = "ONCE"
                Case "2"
                    txtDecena = "DOCE"
                Case "3"
                    txtDecena = "TRECE"
                Case "4"
                    txtDecena = "CATORCE"
                Case "5"
                    txtDecena = "QUINCE"
                Case "6"
                    txtDecena = "DIECISEIS"
                Case "7"
                    txtDecena = "DIECISIETE"
                Case "8"
                    txtDecena = "DIECIOCHO"
                Case "9"
                    txtDecena = "DIECINUEVE"
            End Select
        Case "2"
            txtDecena = "VEINTE"
            If Unidad <> "0" Then
                txtDecena = "VEINTI"
            End If
        Case "3"
            txtDecena = "TREINTA"
            If Unidad <> "0" Then
                txtDecena = "TREINTA Y "
            End If
        Case "4"
            txtDecena = "CUARENTA"
            If Unidad <> "0" Then
                txtDecena = "CUARENTA Y "
            End If
        Case "5"
            txtDecena = "CINCUENTA"
            If Unidad <> "0" Then
                txtDecena = "CINCUENTA Y "
            End If
        Case "6"
            txtDecena = "SESENTA"
            If Unidad <> "0" Then
                txtDecena = "SESENTA Y "
            End If
        Case "7"
            txtDecena = "SETENTA"
            If Unidad <> "0" Then
                txtDecena = "SETENTA Y "
            End If
        Case "8"
            txtDecena = "OCHENTA"
            If Unidad <> "0" Then
                txtDecena = "OCHENTA Y "
            End If
        Case "9"
            txtDecena = "NOVENTA"
            If Unidad <> "0" Then
                txtDecena = "NOVENTA Y "
            End If
    End Select
 
    If Decena <> "1" Then
        Select Case Unidad
            Case "1"
                If SW Then
                    txtUnidad = "UN"
                Else
                    txtUnidad = "UN"
                End If
            Case "2"
                txtUnidad = "DOS"
            Case "3"
                txtUnidad = "TRES"
            Case "4"
                txtUnidad = "CUATRO"
            Case "5"
                txtUnidad = "CINCO"
            Case "6"
                txtUnidad = "SEIS"
            Case "7"
                txtUnidad = "SIETE"
            Case "8"
                txtUnidad = "OCHO"
            Case "9"
                txtUnidad = "NUEVE"
        End Select
    End If
    ConvierteCifra = txtCentena & " " & txtDecena & txtUnidad
End Function

Cualquier cuestion constructiva bienvenida.

Tags:


11 votes, average: 3.64 out of 511 votes, average: 3.64 out of 511 votes, average: 3.64 out of 511 votes, average: 3.64 out of 511 votes, average: 3.64 out of 5 (11 votes, average: 3.64 out of 5)
You need to be a registered member to rate this post.
Loading ... Loading ...
Programacion | RSS 2.0 |     9,155 views

RSS feed

4 Comments »

Comment by huindure
2008-12-05 18:57:42

Agora en perl

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
sub NumeroALetra
{
 my $NumeroPasado  =$_[0];
 my $LongNum       =length($NumeroPasado);
 my $PosDecimal    =index ($NumeroPasado,".");
 if ($PosDecimal == -1){$PosDecimal = $LongNum};
 my $Caracteristica=substr($NumeroPasado,0,$PosDecimal);
 my $LongCaracter  =length($Caracteristica);
 my $Mantisa        =substr($NumeroPasado,($PosDecimal+1),(($LongNum-$LongCaracter)-1));
 my $MantisaNumero =$Mantisa+0;
 if ($MantisaNumero 2)
    {   
    $Mantisa=substr($Mantisa,0,2);
#    print "Esta es la mantisa del segundo caso $Mantisa";
    }
 
 
 $Mantisa .="/100 M.N.";
 my $SingularPlural="s";
 $FRASEDIN   ="";
 if ($LongCaracter>9)
 {
    print " Error en Número";
    return;
  }
    my $TotalCifras=$LongCaracter;
    my $FirstVez   =0;
    my $TotalTres  =0;
    my $RestoTres  =0;
    my $NumStri    =0;
    my $Posic      =0;
    my $NumeroProcesar="";
    my $NumeroNumerico=0;
    while  ($TotalCifras>0)
    {	    
        $SingularPlural="s";
        if ($FirstVez == 0)
        {
          # Determina Cuantas Cifras del número pasado debe de tomar LA PRIMER VEZ
	  #de derecha a izquierda
	  $TotalTres=int($LongCaracter/3);
	  $RestoTres=$TotalCifras-($TotalTres*3);
          if ($RestoTres==0){$NumStri=3;}
          if ($RestoTres==1){$NumStri=1;}
          if ($RestoTres==2){$NumStri=2;}
	  $FirstVez=1;
        }
	else
	{
	 $NumStri=3;
	}#termina if de FirstVez;
 
	$NumeroProcesar=substr($Caracteristica,$Posic,$NumStri);
	if ($NumStri==1)
	   {
		  if ($NumeroProcesar == 1){$SingularPlural = ""}
		  if ($NumeroProcesar != 0)
		     { $NumeroNumerico=$NumeroProcesar+0;
		       $FRASEDIN .=&Unidades($NumeroNumerico);
	             }
	   }
	if ($NumStri==2)
	   {
	    $NumeroProcesar=substr($Caracteristica,$Posic,1);
            if ( $NumeroProcesar=="1" || $NumeroProcesar=="2")
	       { 
		       $FRASEDIN.=&SubDECENAS(substr($Caracteristica,$Posic,2));
	       }
	       else
	         {
                  $NumeroNumerico=$NumeroProcesar+0;
                  $FRASEDIN     .= &Decenas($NumeroNumerico); 
	          $NumeroProcesar=substr($Caracteristica,($Posic+1),1);
		  if ($NumeroProcesar != 0)
                     {
		        $FRASEDIN     .=  "y ";
                        $NumeroNumerico=$NumeroProcesar+0;
	                $FRASEDIN     .= &Unidades($NumeroNumerico);
	             } #si es 20, 30 ,40 etc no debe de poner la y
	         }
	   }
 
	if ($NumStri==3)
	   {
	    $NumeroProcesar=substr($Caracteristica,$Posic,1);
            $NumeroNumerico=$NumeroProcesar+0;
 
	    if ($NumeroNumerico >1)
               { $FRASEDIN .= &Centenas($NumeroNumerico);} 
	       else   
	       {
		   if ($NumeroNumerico == 1)
		      {
                      if ((substr($Caracteristica,$Posic,3)) eq 100)
                	  { $FRASEDIN .=" cien "; }
        	   	   else
         	          {
                            $FRASEDIN .= &Centenas($NumeroNumerico); 
		          }
		      }	  
	       }
 
	    $NumeroProcesar=substr($Caracteristica,($Posic+1),1);
            if ( $NumeroProcesar=="0")
	       { 
		   if (substr($Caracteristica,($Posic+2),1) != 0)
		   {
                     $NumeroNumerico=substr($Caracteristica,($Posic+2),1);
	             $FRASEDIN     .=&Unidades($NumeroNumerico); 
	           }
	       }
            if ( $NumeroProcesar=="1" || $NumeroProcesar=="2")
	       { $FRASEDIN.=&SubDECENAS(substr($Caracteristica,($Posic+1),2));}
 
            if ( $NumeroProcesar>"2")
	      {
                 $NumeroNumerico=$NumeroProcesar+0;
	         $NumeroProcesar=substr($Caracteristica,($Posic+1),1);
		 if ($NumeroProcesar != 0)
		 { $FRASEDIN     .=&Decenas($NumeroNumerico); }
	         $NumeroProcesar=substr($Caracteristica,($Posic+2),1);
		 if ($NumeroProcesar != 0)
		 {
		        $FRASEDIN     .=  "y ";
                   $NumeroNumerico=$NumeroProcesar+0;
	           $FRASEDIN     .=&Unidades($NumeroNumerico); 
	         }
              }
	   }
 
	if ($TotalCifras>6)
	   {
             $FRASEDIN.=" Millon(es) ";
            }
	if (($TotalCifras>3) && ($TotalCifras<7))
	    {
	     $FRASEDIN.=" Mil ";
            }
	if ($TotalCifras<=3)                      
	    {
	     $FRASEDIN.=" Peso".$SingularPlural;
             }
	$Posic       +=$NumStri;
        $TotalCifras -=$NumStri;
 
    }##termina while de TotalCifras
 
  return $FRASEDIN." ".$Mantisa;
}
##termina rutina de NumeroALetra
 
 
sub Centenas
{
  my $CantPasada=$_[0];
  my %Centenas= ("1","Ciento ","2","Doscientos ", "3","Trescientos ","4","Cuatrocientos ","5","Quinientos ","6","Seiscientos ","7","Setecientos ","8","Ochocientos ", "9","Novecientos ");
  $NomCentena=$Centenas{$CantPasada};
  return $NomCentena
}
sub Decenas
{
  my $CantPasada=$_[0];
  my %Decenas= ("1","Diez ","2","Veinte ", "3","Treinta ","4","Cuarenta ","5","Cincuenta ","6","Sesenta ","7","Setenta ","8","Ochenta ", "9","Noventa ");
  $NomDecena=$Decenas{$CantPasada};
  return $NomDecena;
}
sub Unidades
{
  my $CantPasada=$_[0];
  my %Unidades= ("1","Un ","2","Dos ", "3","Tres ","4","Cuatro ","5","Cinco ","6","Seis ","7","Siete ","8","Ocho ", "9","Nueve ");
  $NomUnidad=$Unidades{$CantPasada};
  return $NomUnidad
}
sub SubDECENAS
{
 $numanaliza = $_[0];
   if ($numanaliza == "10")      {return "Diez"};
   if ($numanaliza == "11")      {return "Once"};
   if ($numanaliza == "12")      {return "Doce"};
   if ($numanaliza == "13")      {return "Trece"};
   if ($numanaliza == "14")      {return "Catorce"};
   if ($numanaliza == "15")      {return "Quince"};
   if ($numanaliza == "16")      {return "Dieciséis"};
   if ($numanaliza == "17")      {return "Diecisiete"};
   if ($numanaliza == "18")      {return "Dieciocho"};
   if ($numanaliza == "19")      {return "Diecinueve"};
   if ($numanaliza == "20")      {return "Veinte"};
   if ($numanaliza == "21")      {return "Veintiun"};
   if ($numanaliza == "22")      {return "Veintidos"};
   if ($numanaliza == "23")      {return "Veintitrés"};
   if ($numanaliza == "24")      {return "Veinticuatro"};
   if ($numanaliza == "25")      {return "Veinticinco"};
   if ($numanaliza == "26")      {return "Veintiséis"};
   if ($numanaliza == "27")      {return "Veintisiete"};
   if ($numanaliza == "28")      {return "Veintiocho"};
   if ($numanaliza == "29")      {return "Veintinueve"};
}
Comment by angelbar
2008-12-06 10:27:37

No entiendo la linea 11….
Error de copiado con “&gt” ?

 
 
Comment by huindure
2008-12-06 18:59:06

Por alguna misteriosa razón el codigo no “subio” completo
esto es lo que hacia falta

my $MantisaNumero =$Mantisa+0;
 if ($MantisaNumero 2)
    {   
    $Mantisa=substr($Mantisa,0,2);
#    print "Esta es la mantisa del segundo caso $Mantisa";
    }
 

					
 
Comment by huindure
2008-12-06 19:13:08

mmm si persisten varias lineas con error tal vez no puse bien la equita pre

 
Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.

Trackback responses to this post