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.

4 thoughts on “Código para convertir números a letras en VB”

  1. 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"};
    }
  2. 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";
        }
     
    
    				

Leave a Reply