Pregunta:
ayuda!! porfa me podrian decir?
yensi t
2006-11-29 09:12:27 UTC
hola muchachos me podrian decir porfavor como hago la macro para cambiar numeros a texto porfa es urgente gracias, se que ya han hecho la pregunta pero las respuestas no son claras
Seis respuestas:
Ana
2006-11-29 09:36:58 UTC
si lo que quieres es escribir 100 como "cien" en Excel

Puedes usar esta funcion

=SpellNumber(100)



1.- Dentro del menu Herramientas - Macro deberemos escoger la opcion: Editor de Visual Basic.





Una vez seleccionada se abrira una nueva ventana con dos ventanas acopladas a la izquierda. La superior es la ventana que llamamos: de Proyecto y la inferior la de Propiedades. En la primera apareceran los elementos que forman parte de cada Proyecto (grupo de macros y hojas de Excel) y la segunda son las propiedades de los objetos que se pueden incorporar a nuestras macros. Mas adelante veremos como se utilizan estas dos ventanas y todas sus caracteristicas.





Vamos a prepararnos para poder escribir nuestra primera macro





2.- Escoge la opcion Modulo del men\'fa Insertar.





Observa como en la ventana superior aparece nos aparece una nueva carpeta llamada Modulos y en su interior un nuevo elemento llamado Modulo1. Dentro de este modulo sera donde guardemos las macros que creemos.





Tambien podras ver como la parte derecha de la ventana ahora es completamente blanca. Aqui es donde podemos escribir las instrucciones que formaran parte de nuestra Macro.





Vamos a crear una Macro y esta nos servira de ejemplo para ver como se deben escribir.





Crearemos una Macro muy sencilla la cual nos servira para que la pagina activa pase a ser la segunda.





3.- En la pagina en blanco de la derecha inserta este codigo





Option Explicit



'****************

' Main Function *

'****************



Function SpellNumber(ByVal MyNumber)

Dim Dollars, Cents, Temp

Dim DecimalPlace, Count



ReDim Place(9) As String

Place(2) = " Thousand "

Place(3) = " Million "

Place(4) = " Billion "

Place(5) = " Trillion "



' String representation of amount.

MyNumber = Trim(Str(MyNumber))



' Position of decimal place 0 if none.

DecimalPlace = InStr(MyNumber, ".")

' Convert cents and set MyNumber to dollar amount.

If DecimalPlace > 0 Then

Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _

"00", 2))

MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))

End If



Count = 1

Do While MyNumber <> ""

Temp = GetHundreds(Right(MyNumber, 3))

If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars

If Len(MyNumber) > 3 Then

MyNumber = Left(MyNumber, Len(MyNumber) - 3)

Else

MyNumber = ""

End If

Count = Count + 1

Loop



Select Case Dollars

Case ""

Dollars = "No Dollars"

Case "One"

Dollars = "One Dollar"

Case Else

Dollars = Dollars & " Dollars"

End Select



Select Case Cents

Case ""

Cents = " and No Cents"

Case "One"

Cents = " and One Cent"

Case Else

Cents = " and " & Cents & " Cents"

End Select



SpellNumber = Dollars & Cents

End Function







'*****************************...

' Converts a number from 100-999 into text *

'*****************************...



Function GetHundreds(ByVal MyNumber)

Dim Result As String



If Val(MyNumber) = 0 Then Exit Function

MyNumber = Right("000" & MyNumber, 3)



' Convert the hundreds place.

If Mid(MyNumber, 1, 1) <> "0" Then

Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "

End If



' Convert the tens and ones place.

If Mid(MyNumber, 2, 1) <> "0" Then

Result = Result & GetTens(Mid(MyNumber, 2))

Else

Result = Result & GetDigit(Mid(MyNumber, 3))

End If



GetHundreds = Result

End Function







'*****************************...

' Converts a number from 10 to 99 into text. *

'*****************************...



Function GetTens(TensText)

Dim Result As String



Result = "" ' Null out the temporary function value.

If Val(Left(TensText, 1)) = 1 Then ' If value between 10-19...

Select Case Val(TensText)

Case 10: Result = "Ten"

Case 11: Result = "Eleven"

Case 12: Result = "Twelve"

Case 13: Result = "Thirteen"

Case 14: Result = "Fourteen"

Case 15: Result = "Fifteen"

Case 16: Result = "Sixteen"

Case 17: Result = "Seventeen"

Case 18: Result = "Eighteen"

Case 19: Result = "Nineteen"

Case Else

End Select

Else ' If value between 20-99...

Select Case Val(Left(TensText, 1))

Case 2: Result = "Twenty "

Case 3: Result = "Thirty "

Case 4: Result = "Forty "

Case 5: Result = "Fifty "

Case 6: Result = "Sixty "

Case 7: Result = "Seventy "

Case 8: Result = "Eighty "

Case 9: Result = "Ninety "

Case Else

End Select

Result = Result & GetDigit _

(Right(TensText, 1)) ' Retrieve ones place.

End If

GetTens = Result

End Function



'*****************************...

' Converts a number from 1 to 9 into text. *

'*****************************...



Function GetDigit(Digit)

Select Case Val(Digit)

Case 1: GetDigit = "One"

Case 2: GetDigit = "Two"

Case 3: GetDigit = "Three"

Case 4: GetDigit = "Four"

Case 5: GetDigit = "Five"

Case 6: GetDigit = "Six"

Case 7: GetDigit = "Seven"

Case 8: GetDigit = "Eight"

Case 9: GetDigit = "Nine"

Case Else: GetDigit = ""

End Select

End Function

Guarda el macro

Claro vas a necesitar a cambiar los nombres desde ingles en espanol

Yo descubri esta funcion a esta pagina:

http://www.ozgrid.com/VBA/ValueToWords.htm

**********

Una sugerencia - cuando necesitaba a hacer cosas rapidas en excel (ahora lo uso muy raro) usaba una utilidad llamada ASAP utiliceis. Puedes descargarlo de ahi:

http://www.asap-utilities.com/

Es una coleccion de macros que se pueden mostrar \'fatiles en muchas ocasiones

Fue recomendada por PC Magazine USA

y en la ultima version tiene esta funcion ya incluida
RicardoSR
2006-11-29 17:36:17 UTC
Hola,



Si te refieres a:

- Un campo de excel que contiene numeros y deseas que se muestren como texto, solo agrega el apostrofe al inicio del valor de dicha celda.



- Convertir un numero a su interpretacion en texto, como 553 y que salga la leyenda "quinientos cincuenta y tres" entonces necesitas programar, colocar una sencilla funcion con VBA y despues en la celda donde pondras el valor del texto llamas a la funcion con un argumento o parametro que seria la celda que contiene el valor numerico

Seleccionas "Herramientas", luego "macros" y editor de Visual Basic,le das agregar agregar un modulo y pones lo siguiente:



Option Explicit

Dim numtext(900) As String

Dim StringNum As String, chunk As String, letrero As String

Dim hundreds As Integer

Dim decenas As Integer

Dim unidades As Integer

Dim LoopCount As Integer, StartVal As Integer

Dim DecenasDone As Integer

Dim Centavos As String

Dim nada As String



Static Function num2letra(ByVal AmountPassed As Currency) As String



'If Not numtext(1) = "Un" Then

numtext(0) = ""

numtext(1) = ""

numtext(2) = "Dos"

numtext(3) = "Tres"

numtext(4) = "Cuatro"

numtext(5) = "Cinco"

numtext(6) = "Seis"

numtext(7) = "Siete"

numtext(8) = "Ocho"

numtext(9) = "Nueve"

numtext(10) = "Diez"

numtext(11) = "Once"

numtext(12) = "Doce"

numtext(13) = "Trece"

numtext(14) = "Catorce"

numtext(15) = "Quince"

numtext(16) = "Dieciseis"

numtext(17) = "Diecisiete"

numtext(18) = "Dieciocho"

numtext(19) = "Diecinueve"

numtext(20) = "Veinte"

numtext(21) = "Veintiún"

numtext(22) = "Veintidos"

numtext(23) = "Veintitres"

numtext(24) = "Veinticuatro"

numtext(25) = "Veinticinco"

numtext(26) = "Veintiseis"

numtext(27) = "Veintisiete"

numtext(28) = "Veintiocho"

numtext(29) = "Veintinueve"

numtext(30) = "Treinta"

numtext(31) = "Treinta y un"

numtext(40) = "Cuarenta"

numtext(41) = "Cuarenta y un"

numtext(50) = "Cincuenta"

numtext(51) = "Cincuenta y un"

numtext(60) = "Sesenta"

numtext(61) = "Sesenta y un"

numtext(70) = "Setenta"

numtext(71) = "Setenta y un"

numtext(80) = "Ochenta"

numtext(81) = "Ochenta y un"

numtext(90) = "Noventa"

numtext(91) = "Noventa y un"

numtext(100) = "Cien "

numtext(161) = "Ciento Sesenta y un"

numtext(200) = "Doscientos "

numtext(300) = "Trescientos "

numtext(400) = "Cuatrocientos "

numtext(500) = "Quinientos "

numtext(600) = "Seiscientos "

numtext(700) = "Setecientos "

numtext(800) = "Ochocientos "

numtext(900) = "Novecientos "

' NumText(1000) = "Mil "



'End If



StringNum = Format$(AmountPassed, "000000.00")



letrero = ""

LoopCount = 1

StartVal = 1

Centavos = Mid$(StringNum, 8, 2)



'*** Solo en el caso que la cantidad sea menor a 1 nuevo peso

If AmountPassed < 1 Then

letrero = "Cero"

Else



'*** Se revisa cada tres digitos para toda la porcion del numero

While LoopCount <= 2

chunk = Mid$(StringNum, StartVal, 3)

hundreds = Val(Mid$(chunk, 1, 1))

decenas = Val(Mid$(chunk, 2, 2))

unidades = Val(Mid$(chunk, 3, 1))

'** revision porcion de cientos del numero de tres digitos

If Val(chunk) = 100 Then

letrero = letrero & numtext(100)

End If

If Val(chunk) > 100 And Val(chunk) <= 199 Then

letrero = letrero & numtext(hundreds) & "Ciento "

End If

If Val(chunk) > 199 Then

letrero = letrero & numtext(hundreds * 100) ' & "Cientos "

End If

' ** ahora la parte de decentas y unidades de la misma porcion

DecenasDone = False

'** es menor que 10?

If decenas < 10 Then

If decenas = 1 Then

letrero = letrero & " Un"

DecenasDone = True

Else

letrero = letrero & " " & numtext(unidades)

DecenasDone = True

End If

End If

'** es 10?

If (decenas >= 11 And decenas <= 29) And decenas <> 20 Then

letrero = letrero & numtext(decenas)

'letrero = letrero & " " & numtext(decenas)

DecenasDone = True

End If

'** es divisible entre 10?

If (decenas / 10#) = Int(decenas / 10#) Then

letrero = letrero & numtext(decenas)

'letrero = letrero & " " & numtext(decenas)

DecenasDone = True

End If



'**

If Not DecenasDone Then

letrero = letrero & numtext((Int(decenas / 10)) * 10)

If unidades <> 1 Then

letrero = letrero & " y " & numtext(unidades)

Else

letrero = letrero & " y Un"

End If

End If

'** agregamos la palabra miles

If AmountPassed > 999.99 And LoopCount = 1 Then

letrero = letrero + " Mil "

End If

LoopCount = LoopCount + 1

StartVal = 4

Wend

End If

num2letra = Trim(letrero) & " Pesos " & Centavos & "/100 M.N."

'num2letra = Trim(letrero) & " Dolares " & Centavos & "/100 USD"

End Function
anonymous
2006-11-29 17:32:56 UTC
Para hacer la macro tendrias primero que tener un lugar de referencia donde se encuentre una tabla con los valores de números y conversión a texto, dividiendolo en unidades, decenas, centenas.



1 uno

2 dos

.

.

.

9 nueve

10 diez hasta el 20

luego solo

30

40

50

...

90

100

200

300

400

....

900

los demás los descompones por divisiones o por cantidad de dígitos del número otorgandole un valor posicional a cada uno.



Te tomara tu tiempo.. con un dia basta.
Hector!!
2006-11-29 17:29:24 UTC
Ya postee una respuesta aqui:



https://answersrip.com/question/index?qid=20061128080732AA2OxMz



Si aun tienes dudas de como hacerla, te puedo enviar un archivo de excel con la macro (en visual basic) lista para usarse.



lazypineapple@yahoo.com



Suerte.
El Mas Chingon
2006-11-29 17:21:03 UTC
que es la macro no se disculpame ojala y la encuentres suerte
Squ@lo
2006-11-29 17:14:43 UTC
???


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...