La Cofradía Digital

Hermandad informática


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

0
(0)

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.

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.

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.



4 responses to “Código para convertir números a letras en VB”

  1. Agora en perl

    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"};
    }
    
    1. No entiendo la linea 11….
      Error de copiado con “&gt” ?

  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";
        }
     
    
    
  3. mmm si persisten varias lineas con error tal vez no puse bien la equita pre

Leave a Reply