English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Todas las categorías

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

2006-11-29 04:12:27 · 6 respuestas · pregunta de yensi t 2 en Ordenadores e Internet Programación y Diseño

6 respuestas

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

2006-11-29 04:36:58 · answer #1 · answered by Ana 6 · 0 0

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

2006-11-29 12:36:17 · answer #2 · answered by RicardoSR 4 · 0 0

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.

2006-11-29 12:32:56 · answer #3 · answered by Anonymous · 0 0

Ya postee una respuesta aqui:

http://mx.answers.yahoo.com/question/index;_ylt=A9FJusD_wm1FZwMBBAyY8gt.?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.

2006-11-29 12:29:24 · answer #4 · answered by Hector!! 5 · 0 0

que es la macro no se disculpame ojala y la encuentres suerte

2006-11-29 12:21:03 · answer #5 · answered by El Mas Chingon 4 · 0 0

???

2006-11-29 12:14:43 · answer #6 · answered by Squ@lo 3 · 0 1

fedest.com, questions and answers