Gigastur

Servicios informáticos

615 654 407
info@gigastur.com

  • Inicio
  • Servicios
    • Asistencia a domicilio
    • Reparación de ordenadores
    • Mantenimiento para empresas
    • Diseño web y hosting
  • Precios
    • Mantenimiento para empresas
    • Diseño web
    • Asistencia a domicilio
    • Reparaciones en tienda
    • Bonos de mantenimiento
    • Alojamiento web
  • Trabajos realizados
  • Contacto
  • Blog
    • Comandos Linux
    • Comandos Windows
    • MySQL
    • Laravel
    • Steam
    • Herramientas Sysadmin
    • Recursos webmaster
  • Control remoto

Macro de Microsoft Word para convertir número en texto

18/12/2018 por Igor García 4 comentarios

Hace poco nos pidieron poder convertir en un documento de Microsoft Word números en texto, de manera que, por ejemplo, 123,27 se convirtiese en Ciento veintitrés con Veintisiete. Veamos como podemos hacerlo:

Contenidos

  • 1 Pasar de número a letra con campos dinámicos
    • 1.1 Pasar números enteros
    • 1.2 Pasar números con decimales
  • 2 Pasar de número a letra con macros
    • 2.1 Macro para números enteros
    • 2.2 Macro para números con decimales
  • 3 Acceder a las macros desde un botón de la barra

Pasar de número a letra con campos dinámicos

Pasar números enteros

Pulsamos control + F9 y nos aparecerán { } en cuyo interior introduciremos este código:

=numero \*cardtext

Cambiando número por el número que queramos convertir.

Luego pulsamos Alt + F9 para pasar de mostrar la fórmula a verel resultado

Pasar números con decimales

Lo anterior no funciona con decimales, para los cuales podemos usar este código más avanzado (cuidado al copiar y pegar porque así no interpreta los corchetes como campos dinámicos)

{ SET x NUMERO }
{ SET y { =INT({ref x})}}
{ SET z { =({ref x}-{ref y})*100}}
{ REF y \*Cardtext \* Upper \* MERGEFORMAT } CON { REF z \*Cardtext \* Upper \* MERGEFORMAT }

Pasar de número a letra con macros

Podemos facilitar la tarea usando macros de VBA (Visual Basic for Applications) en lugar de campos dinámicos, ya que así podremos realizar la tarea desde un botón.

Macro para números enteros

La página tips.net nos facilita esta fabulosa macro:

Sub numeroaletra()
Dim sDigits As String
Dim sBigStuff As String
sBigStuff = ""
' Select the full number in which the insertion point is located
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdMove
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
' Store the digits in a variable
sDigits = Trim(Selection.Text)
If Val(sDigits) > 999999 Then
If Val(sDigits) <= 999999999 Then
sBigStuff = Trim(Int(Str(Val(sDigits) / 1000000)))
' Create a field containing the big digits and
' the cardtext format flag
Selection.Fields.Add Range:=Selection.Range, _
Type:=wdFieldEmpty, Text:="= " + sBigStuff + " \* CardText", _
PreserveFormatting:=True
' Select the field and copy it
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
sBigStuff = Selection.Text & " million "
sDigits = Right(sDigits, 6)
End If
End If
If Val(sDigits) <= 999999 Then
' Create a field containing the digits and the cardtext format flag
Selection.Fields.Add Range:=Selection.Range, _
Type:=wdFieldEmpty, Text:="= " + sDigits + " \* CardText", _
PreserveFormatting:=True
' Select the field and copy it
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
sDigits = sBigStuff & Selection.Text
' Now put the words in the document
Selection.TypeText Text:=sDigits
Selection.TypeText Text:=" "
Else
MsgBox "Numero demasiado largo", vbOKOnly
End If
End Sub

Debemos copiarla y pegarla en Word, menú vista, macros, modificar. Guardamos los cambios y podremos ejecutarla desde el mismo botón de macros, haciendo doble clic en la macro llamada numeroaletra.

Macro para números con decimales

Para números con decimales modificamos la anterior macro un poco:

Copiamos la macro 2 veces, cambiando su nombre, por ejemplo numerosdecimales() y numerosdecimales2(). En la primera añadimos un código para separar la parte entera de la decimal del número seleccionado y pasamos la parte entera a letra, para luego hacer una llamada a la segunda función, pasándole como parámetro la parte decimal.

Sub numerosdecimales()
' numeros Macro pasa a texto el numero seleccionado
    Dim sDigits As String
    Dim sBigStuff As String
    sBigStuff = ""
    ' Store the digits in a variable
    numero = Trim(Selection.Text)
    x = Split(Str(numero), ".")
    sDigits = x(LBound(x, 1)) 'parte entera
    num2 = x(UBound(x, 1)) 'parte decimal
    If Val(sDigits) > 999999 Then
        If Val(sDigits) <= 999999999 Then
            sBigStuff = Trim(Int(Str(Val(sDigits) / 1000000)))
            ' Create a field containing the big digits and
            ' the cardtext format flag
            Selection.Fields.Add Range:=Selection.Range, _
              Type:=wdFieldEmpty, Text:="= " + sBigStuff + " \* CardText", _
              PreserveFormatting:=True

            ' Select the field and copy it
            Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
            sBigStuff = Selection.Text & " million "
            sDigits = Right(sDigits, 6)
        End If
    End If
    If Val(sDigits) <= 999999 Then
        ' Create a field containing the digits and the cardtext format flag
        Selection.Fields.Add Range:=Selection.Range, _
          Type:=wdFieldEmpty, Text:="= " + sDigits + " \* CardText", _
          PreserveFormatting:=True

        ' Select the field and copy it
        Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
        sDigits = sBigStuff & Selection.Text

        ' Now put the words in the document
        Selection.TypeText Text:=sDigits
        Selection.TypeText Text:=" "
    Else
        MsgBox "Numero demasiado largo", vbOKOnly
    End If
    numerosdecimales2 (num2)
End Sub
Sub numerosdecimales2(sDigits)
'
' numeros Macro
'
'
    'Dim sDigits As String
    Dim sBigStuff As String

    sBigStuff = ""

    If Val(sDigits) > 999999 Then
        If Val(sDigits) <= 999999999 Then
            sBigStuff = Trim(Int(Str(Val(sDigits) / 1000000)))
            ' Create a field containing the big digits and
            ' the cardtext format flag
            Selection.Fields.Add Range:=Selection.Range, _
              Type:=wdFieldEmpty, Text:="= " + sBigStuff + " \* CardText", _
              PreserveFormatting:=True

            ' Select the field and copy it
            Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
            sBigStuff = Selection.Text & " million "
            sDigits = Right(sDigits, 6)
        End If
    End If
    If Val(sDigits) <= 999999 Then
        ' Create a field containing the digits and the cardtext format flag
        Selection.Fields.Add Range:=Selection.Range, _
          Type:=wdFieldEmpty, Text:="= " + sDigits + " \* CardText", _
          PreserveFormatting:=True

        ' Select the field and copy it
        Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
        sDigits = sBigStuff & Selection.Text

        ' Now put the words in the document
        Selection.TypeText Text:="con "
        Selection.TypeText Text:=sDigits
        Selection.TypeText Text:=" "
    Else
        MsgBox "Numero demasiado largo", vbOKOnly
    End If
End Sub

Acceder a las macros desde un botón de la barra

Para acceder facilmente a estas macros podemos añadirlas a la barra de menús, haciendo clic derecho en ella, personalizar la cinta de opciones, seleccionar macros en el desplegable los comandos disponibles en, escogemos nuestra macro y en la derecha escogemos el menú donde queremos que aparezca y pulsamos agregar.

Categorías: Sistemas, Windows Etiquetas: letra, macro, numeros, vba, word

Comentarios

  1. Fayna dice

    07/08/2020 a las 20:34

    Gracias por la aportación. Sin embargo, no me funciona la Macro para números con decimales, ¿se puede copia tal y como está o hay que hacerle algo? En caso de que haya que incluirle algo.. ¿Me la puede hacer llegar para que la pueda copiar y pegar? Muchas gracias de antemano. Saludos.

    Responder
    • Igor García dice

      10/08/2020 a las 21:01

      Hola. Acabamos de modificar el código para números con decimales. Ahora debería funcionarte.

      Responder
  2. Arturo Barbosa dice

    05/09/2019 a las 18:34

    Hola, yo usaba la macro que te dejo enseguida, pero dejo de funcionar correctamente, word me pide que la depure, pero no se que tiene mal, puedes darle una mirada, por favor?

    Sub Nums_unicos_a_texto()
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Copy
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=" "
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
    Selection.TypeText Text:="="
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
    Selection.InsertSymbol Font:="Arial", CharacterNumber:=92, Unicode:=True
    Selection.TypeText Text:="*cardtext"
    Selection.Fields.Update
    Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Range.Case = wdNextCase
    Selection.Range.Case = wdNextCase
    Selection.Copy
    Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:=wdInLine, DisplayAsIcon:=False
    End Sub
    Es el último renglón el que aparentemente está mal.

    Responder
  3. Ariel dice

    19/06/2019 a las 22:38

    Muy interesante! Lo he testeado. Funciona hasta el número 1000000 exacto. Un millon uno, ya falla. No funciona con números superiores a 1 millon. De todas maneras es muy útil. Mucho mejor que estar ejecutando a mano uno por uno copiando " \* CardText" e introduciendo el número que queremos pasar a letras cada vez.
    Muchas gracias

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Categorías

Enlaces

  • Abode PDF Reader
  • Actualizar a Windows 10
  • Anti Ransomware
  • Aviso de cookies
  • Browser Diet
  • Buenas practicas Ransomware
  • BuiltWith
  • cdlibre
  • Chocolatey
  • CIDR Calculator
  • Consulta numero móvil
  • Cual es mi IP
  • Descarga de DLL
  • Descarga de OCX
  • Descarga de RPM
  • Descarga de Windows y Office
  • Descarga de Windows y Office
  • DistroTest
  • Dumo
  • explainshell
  • File-extensions
  • FileHippo
  • Flash Player
  • Geolocalización Multi IP
  • HDDScan
  • htaccesstools
  • Ip Location
  • Kaspersky
  • LinuxServer.io
  • Máquinas Virtuales OSBoxes
  • Microsoft Doc
  • ms-vnext: Windows y Office
  • Ninite
  • Nirsoft
  • Open Source Alternatives
  • Patch My PC
  • PC decrapifier
  • PCI Lookup
  • PCI-IDS
  • pcidatabase
  • PCIids
  • Port Listener
  • Portable Freeware
  • Router Passwords
  • Saber tipografía de una foto
  • Shodan
  • Ssega
  • Sumo
  • Sysinternals
  • SystemRescueCd
  • Test de velocidad
  • The eye
  • Virustotal
  • Windows ISO
  • Windows Mini
  • WizTree
  • You Get Signal

Contacto

  • 615 654 407
  • info@gigastur.com

Entradas recientes

  • Instalar Windows 11 sin cuenta de microsoft
  • Crear archivos de diferentes tamaños para pruebas (dummy files) en Linux
  • Fping: Ping mejorado para Linux
  • Programas para facilitar la instalación y actualización de software en Windows
  • Outlook: acceder a la configuración avanzada de correo

Control remoto

  • Control remoto Windows
  • Control remoto MAC
  • Versión completa Windows
  • Servicio Windows
  • Control remoto XP
  • Servicio XP

Aviso legal | Política de privacidad | Política de cookies

Utilizamos cookies para ofrecerte la mejor experiencia en nuestra web.

Puedes aprender más sobre qué cookies utilizamos o desactivarlas en los ajustes.

Gigastur
Powered by  GDPR Cookie Compliance
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.

¡Por favor, activa primero las cookies estrictamente necesarias para que podamos guardar tus preferencias!