EXCELente presentación Sergio, hiciste una modificación muy muy profesional. Esto ayudará a aquellos que como a nosotros, nos apasiona la programación, especialmente nuestro entorno favorito VBA :) Pulgar Arriba!!!
Muchas gracias a ambos. He visto vídeos de Otto y de otros colegas vuestros y es un lujo poder contar con vosotros. Esta es la primera vez que sigo un curso desde el principio y me ayuda a entender mejor los conceptos. Lo dicho, MUCHAS GRACIAS
Magnífico trabajo con una utilidad práctica inmediata Sergio, así como magnífico tu reconocimiento al trabajo de Otto González quien dicho sea de paso también es un excelente maestro en estos menesteres. Gracias a ambos
La verdad hay varias funciones para hacer esto posible y esta es la mas completa que he visto, recomiendo corregir cuando se utilizan los centavos como un porcentaje y se tienen "0" centavos, no se ve 0/100, por otro lado recomiendo cambiar las denominaciones de las variables ya que al abrir los argumentos de función, no nos dice mucho el nombre TipoCambio1 y TipoCambio2, propongo cambiarlos por Nombre_Moneda_Singular y Nombre_Moneda_Plural, en cuanto a la variable Centavos, nunca se sabe que solo admite 0 ó 1. Creo que esto podría mejorar un gran trabajo Gracias
Excelente Sergio, muy complicado pero se entiende. Ahora la parte de los centavos, si nDecimal no es cero es porque es de 1 a 99 sería suficiente Texto = Texto & nDecimal & "/100" y no hacer otro If, es lo que yo veo, se está redundando solo que en el 2do if le agregas la cadena "centavos" saludos
Muy buena Función Sergio !!! Me agrado mucho la mejora que le realizaste porque la hace versátil para ser usada con cualquier moneda mundial, y lógicamente se le puede hace alguna mejora. En particular a mí me gustaría que tenga una descripción que explique que valor hay que poner en cada argumento y que hace, como ayuda al momento que otro persona la vaya a usar como cualquier función de Excel. Por lo cual ya te pido que lo tengas en cuenta Sergio para la próxima. Un abrazo !!!!
Excelentes vídeos, bien llevados en el desarrollo y sobre todo muy didácticos, ¿Puede dedicar un vídeo a explicar como generar gráficos (barras, línea) usando macros?
Hola Sergio: Para comentar que cuando la cantidad el cero que s muy común en documentos financieros o contables, la macro da "CERO DE DOLARES", para superar esto, la linea Texto = Texto + " De", debe reemplazarse por If nEntero > 0 Then Texto = Texto + " De". Bueno hay varios ajustes que hacer, que espero tener tiempo para sugerirlos saludos.
Bastante más complicado este vídeo con respecto a los anteriores. Me pasa que entiendo hasta cierto punto la lógica pero pensar en que algún día voy a llegar a que se me ocurra esto me parece aún muy lejano. A pesar de todo, no me desanimo y confío en que con mucha práctica podré razonar de esta manera. Un saludo Sergio y como siempre, excelente vídeo.
Hola sergio: Agradezco y te felicito por no solo por en este vídeo sino en todos los vídeos que tu emites, y mes has hecho recordar cuando lo programe hace decenas de años en fortran o basic. Sin embargo, quiro llamar la atención que cuando los centavos es o son menores de 10, sale 1/100, 2/100, 3/100, etc, debiendo salir 01/100, 02/100 ect.. Por lo que debería agregarse lo siguiente: declarar la variable cero, asignarle cero="", luego con una condicional de if nDecimla
No es mala idea, sin embargo veo mas fácil agregar el cero si "nDecimal" es menor o igual a 9 cambiando la Linea "If nDecimal = 1 Then" por lo siguiente : If nDecimal
Hola Sergio: complementando mi comentrio anterior, considero que e tipo de moneda tambien debe considerarse como opcional, porque esos parámetro se pueden ingresarse como datos en el programa o macro que pudieras estar haciendo. Saludos
Alejandro buenas noches, veo todos tus vídeo y aprendo bien primero agradecerte y segundo en todo lo que haz subido, alguno donde si tienes un formulario con 16 textbos y en en tres de ellos quiero escribir el No de proveedor y que en el siguiente aparezca su razón social y en el siguinte su RFC con tan solo dar tab ya vi dos uno donde escribes la letras y te desplaza todos con con las letras iniciales, en medio pero no sé tendrás alguno de tus vídeos que me recomiendes? De nuevo gracias por compartir tus conocimientos
Alcance a ver una función round en el código,me supongo que tiene que ver con redondeos. Pero no sé exactamente de qué forma hace el redondeo en ese caso espefico.
Hola Sergio, tengo esa funcion es un libro nuevo que estoy trabajando. El problema que tengo es que este libro nuevo tiene una macro que lo que haces es abrir unos archivos y luego de abrirlo copia unos datos y los pega en unas hojas donde mediante una serie de formulas obtengo los datos que necesito. Ahora el problema esta en que cuando abro esos archivos, la "funcion" se ejecuta sobre los nuevos archivos y aveces el excel se cuelga. He leido por ahi que esto se debe a que "Function", siempre es publico cuando se ejecuta desde un MODULO, y hay que explicitarle que sea PRIVATE, pero aun asi se sigue ejecutando al abrir los libros. Por lo tanto copie esa Funcion y la inserte dentro del modudo de la hoja donde necesito que se ejecute, pero no funciona. Como puedo arregler el inconveneinte?
hola Estimados: Partiendo de la idea que siempre hay que ingresar la menor cantidad de datos o parámetros, les alcanzo unas línea iniciales para que la macro solo se ingrese en nombre en plural de la moneda, generando el singular, y otros aspectos: 'Autor: GSS Function nLetra(num As Double, Optional pMoneda As String, Optional Centavos As Byte, Optional MN As String) As String Dim nEntero, lrg, u As Long Dim nDecimal As Double Dim Texto, cero, sMoneda, sM1, sM2, pM1, pM2 As String ' If pMoneda "" Then u = InStr(pMoneda, " ") 'El plural de la moneda no es compuesta o de dos palabras If u = 0 Then sM2 = "": sM1 = Replace(pMoneda, "S", "") If UCase(Right(pMoneda, 2)) = "ES" Then sM1 = Replace(pMoneda, "ES", "") Else pM1 = Mid(pMoneda, 1, u - 1) pM2 = Mid(pMoneda, u + 1, Len(pMoneda) - u) lrg = Len(pM1) sM1 = Mid(pM1, 1, lrg - 1) & " " If UCase(Right(pM1, 2)) = "ES" Then sM1 = Mid(pM1, 1, lrg - 2) & " " 'If UCase(Right(pM1, 4)) = "NSES" Then sM1 = Mid(pM1, 1, lrg - 1) & " " quizas no sea necesario ' lrg = Len(pM2) sM2 = Mid(pM2, 1, lrg - 1) If UCase(Right(pM2, 2)) = "ES" Then sM2 = Mid(pM2, 1, lrg - 2) If UCase(Right(pM2, 4)) = "NSES" Then sM2 = Mid(pM2, 1, lrg - 1) End If End If sMoneda = sM1 & sM2 ' se aumenta 0.001 porque excel redondea al superior desde 0.005, la funcion round vba redondea al superior desde 0.006 nEntero = Int(num): nDecimal = Int(Round((num + 0.001 - nEntero) * 100)) 'Corrección de últimoo momento If nDecimal = 100 Then ' adicionado por GSS nDecimal = 0: nEntero = nEntero + 1 ' adicionado por GSS End If ' adicionado por GSS If nEntero + nDecimal / 100 >= 1000000000 Then ' adicionado por GSS nLetra = "Sorry!, Sólo cantidades menores de 999'999,999.995" ' adicionado por GSS Exit Function ' adicionado por GSS End If Espero le sea útil Saluods
Hola, tengo un incoveniente y es que cuando voy a meter un valor en miles de millones o cientos de miles de milllones, el codigo no funciona, que debo hacer?
@@SergioAlejandroCampos Como sabes si lo de abajo no es mejor que lo de arriba. Sabes una cosa, TE GUsTA EL SHOW, ahi se te fue......esta dmas que muestres tu cara en tus videos, basta con que explicas divino. Tomalo por el lado amable. bye me dio sueño. y gracias por responderme como eliminar esa maldita macro ue sugeristes para encontrar los faceid, por fin ya lo hize.
EXCELente presentación Sergio, hiciste una modificación muy muy profesional. Esto ayudará a aquellos que como a nosotros, nos apasiona la programación, especialmente nuestro entorno favorito VBA :) Pulgar Arriba!!!
Este tipo de colaboraciones y aportes extra de otros autores son lo que hace grande estos cursos. Excelente trabajo y mejor explicado el tema de UDF .
Grande OTTO, eres el mejor. No hay Otro como Otto, Gracias eres un MAESTRO!!!
MUchas gracias mi hno. No sabes como me haz ayudado, Que Dios te bendiga
Muchas gracias a ambos. He visto vídeos de Otto y de otros colegas vuestros y es un lujo poder contar con vosotros. Esta es la primera vez que sigo un curso desde el principio y me ayuda a entender mejor los conceptos. Lo dicho, MUCHAS GRACIAS
Magnífico trabajo con una utilidad práctica inmediata Sergio, así como magnífico tu reconocimiento al trabajo de Otto González quien dicho sea de paso también es un excelente maestro en estos menesteres. Gracias a ambos
Muy buena presentación Sergio, excelente como siempre, gracias
La verdad hay varias funciones para hacer esto posible y esta es la mas completa que he visto, recomiendo corregir cuando se utilizan los centavos como un porcentaje y se tienen "0" centavos, no se ve 0/100, por otro lado recomiendo cambiar las denominaciones de las variables ya que al abrir los argumentos de función, no nos dice mucho el nombre TipoCambio1 y TipoCambio2, propongo cambiarlos por Nombre_Moneda_Singular y Nombre_Moneda_Plural, en cuanto a la variable Centavos, nunca se sabe que solo admite 0 ó 1. Creo que esto podría mejorar un gran trabajo Gracias
lo mejor maestro Sergio gracias por la entrega sal2 y pulgar arriba..
Gracias a ambos por su enorme aportación y sobre todo la humildad para entregarnos una joya de programación.
Excelente Sergio, muy complicado pero se entiende. Ahora la parte de los centavos, si nDecimal no es cero es porque es de 1 a 99 sería suficiente Texto = Texto & nDecimal & "/100" y no hacer otro If, es lo que yo veo, se está redundando solo que en el 2do if le agregas la cadena "centavos"
saludos
Muy buena Función Sergio !!!
Me agrado mucho la mejora que le realizaste porque la hace versátil para ser usada con cualquier moneda mundial, y lógicamente se le puede hace alguna mejora.
En particular a mí me gustaría que tenga una descripción que explique que valor hay que poner en cada argumento y que hace, como ayuda al momento que otro persona la vaya a usar como cualquier función de Excel. Por lo cual ya te pido que lo tengas en cuenta Sergio para la próxima. Un abrazo !!!!
Muchas gracias por compartir tus conocimientos con la comunidad, saludos Sergio
Excelente el curso!, esta función es muy útil gracias por el aporte
Excelente, Sergio. Gracias.
Excelentes vídeos, bien llevados en el desarrollo y sobre todo muy didácticos, ¿Puede dedicar un vídeo a explicar como generar gráficos (barras, línea) usando macros?
Hola Sergio:
Para comentar que cuando la cantidad el cero que s muy común en documentos financieros o contables, la macro da "CERO DE DOLARES", para superar esto, la linea
Texto = Texto + " De", debe reemplazarse por If nEntero > 0 Then Texto = Texto + " De". Bueno hay varios ajustes que hacer, que espero tener tiempo para sugerirlos
saludos.
Bastante más complicado este vídeo con respecto a los anteriores. Me pasa que entiendo hasta cierto punto la lógica pero pensar en que algún día voy a llegar a que se me ocurra esto me parece aún muy lejano. A pesar de todo, no me desanimo y confío en que con mucha práctica podré razonar de esta manera. Un saludo Sergio y como siempre, excelente vídeo.
No te desanimes. A seguir practicando
Maestro esperando mil gracias por compartir sus conocimientos
Saludos Leonardo.
Hola sergio:
Agradezco y te felicito por no solo por en este vídeo sino en todos los vídeos que tu emites, y mes has hecho recordar cuando lo programe hace decenas de años en fortran o basic. Sin embargo, quiro llamar la atención que cuando los centavos es o son menores de 10, sale 1/100, 2/100, 3/100, etc, debiendo salir 01/100, 02/100 ect.. Por lo que debería agregarse lo siguiente: declarar la variable cero, asignarle cero="", luego con una condicional de if nDecimla
No es mala idea, sin embargo veo mas fácil agregar el cero si "nDecimal" es menor o igual a 9 cambiando la Linea "If nDecimal = 1 Then" por lo siguiente :
If nDecimal
@@CarlosOrtiz-vp3fg De acuerdo con tu comentario. Yo agregaría un espacio antes del "0" para que no quede junto al texto:
If nDecimal
Hola Sergio:
complementando mi comentrio anterior, considero que e tipo de moneda tambien debe considerarse como opcional, porque esos parámetro se pueden ingresarse como datos en el programa o macro que pudieras estar haciendo.
Saludos
Alejandro buenas noches, veo todos tus vídeo y aprendo bien primero agradecerte y segundo en todo lo que haz subido, alguno donde si tienes un formulario con 16 textbos y en en tres de ellos quiero escribir el No de proveedor y que en el siguiente aparezca su razón social y en el siguinte su RFC con tan solo dar tab ya vi dos uno donde escribes la letras y te desplaza todos con con las letras iniciales, en medio pero no sé tendrás alguno de tus vídeos que me recomiendes?
De nuevo gracias por compartir tus conocimientos
Genial el video
Excelente maestro es posible que se pueda poner una ayuda en la funcion mil gracias por compartir tus conocimientos pugar arriba
pregunta, en que version de exel funciona la formula ?
hola,like
Hola Sergio, me gustaria saber que libros me recomiendas para complementar lo aprendido en tú curso de VBA y macros, espero me respondas, saludos
Alcance a ver una función round en el código,me supongo que tiene que ver con redondeos. Pero no sé exactamente de qué forma hace el redondeo en ese caso espefico.
Hola Sergio, tengo esa funcion es un libro nuevo que estoy trabajando. El problema que tengo es que este libro nuevo tiene una macro que lo que haces es abrir unos archivos y luego de abrirlo copia unos datos y los pega en unas hojas donde mediante una serie de formulas obtengo los datos que necesito. Ahora el problema esta en que cuando abro esos archivos, la "funcion" se ejecuta sobre los nuevos archivos y aveces el excel se cuelga. He leido por ahi que esto se debe a que "Function", siempre es publico cuando se ejecuta desde un MODULO, y hay que explicitarle que sea PRIVATE, pero aun asi se sigue ejecutando al abrir los libros. Por lo tanto copie esa Funcion y la inserte dentro del modudo de la hoja donde necesito que se ejecute, pero no funciona. Como puedo arregler el inconveneinte?
sin boton de busqueda porque el botón que hize es para guardarlos en la hoja de facturas diarias
saludos nuevamente
hola Estimados:
Partiendo de la idea que siempre hay que ingresar la menor cantidad de datos o parámetros, les alcanzo unas línea iniciales para que la macro solo se ingrese en nombre en plural de la moneda, generando el singular, y otros aspectos:
'Autor: GSS
Function nLetra(num As Double, Optional pMoneda As String, Optional Centavos As Byte, Optional MN As String) As String
Dim nEntero, lrg, u As Long
Dim nDecimal As Double
Dim Texto, cero, sMoneda, sM1, sM2, pM1, pM2 As String
'
If pMoneda "" Then
u = InStr(pMoneda, " ") 'El plural de la moneda no es compuesta o de dos palabras
If u = 0 Then
sM2 = "": sM1 = Replace(pMoneda, "S", "")
If UCase(Right(pMoneda, 2)) = "ES" Then sM1 = Replace(pMoneda, "ES", "")
Else
pM1 = Mid(pMoneda, 1, u - 1)
pM2 = Mid(pMoneda, u + 1, Len(pMoneda) - u)
lrg = Len(pM1)
sM1 = Mid(pM1, 1, lrg - 1) & " "
If UCase(Right(pM1, 2)) = "ES" Then sM1 = Mid(pM1, 1, lrg - 2) & " "
'If UCase(Right(pM1, 4)) = "NSES" Then sM1 = Mid(pM1, 1, lrg - 1) & " " quizas no sea necesario
'
lrg = Len(pM2)
sM2 = Mid(pM2, 1, lrg - 1)
If UCase(Right(pM2, 2)) = "ES" Then sM2 = Mid(pM2, 1, lrg - 2)
If UCase(Right(pM2, 4)) = "NSES" Then sM2 = Mid(pM2, 1, lrg - 1)
End If
End If
sMoneda = sM1 & sM2 ' se aumenta 0.001 porque excel redondea al superior desde 0.005, la funcion round vba redondea al superior desde 0.006
nEntero = Int(num): nDecimal = Int(Round((num + 0.001 - nEntero) * 100)) 'Corrección de últimoo momento
If nDecimal = 100 Then ' adicionado por GSS
nDecimal = 0: nEntero = nEntero + 1 ' adicionado por GSS
End If ' adicionado por GSS
If nEntero + nDecimal / 100 >= 1000000000 Then ' adicionado por GSS
nLetra = "Sorry!, Sólo cantidades menores de 999'999,999.995" ' adicionado por GSS
Exit Function ' adicionado por GSS
End If
Espero le sea útil
Saluods
Hola, tengo un incoveniente y es que cuando voy a meter un valor en miles de millones o cientos de miles de milllones, el codigo no funciona, que debo hacer?
Y si necesito poner todo entre paréntesis, como se puede hacer?
Quien podra sacarme de una duda para este video.
Tu presentación es tan buena, pero francamente yo sólo buscaba el código para copiar y pegar, se agradece...
👍👍🦾🦾👌👌✔✔🤗🤗😎😎👀👀🍺🍺🍺🍺🍺🍺
alguien la ha usado en un formulario vba
Muy complicado. no sirve asi
Gracias por tu comentario.
No puedes decir mejorada, deberías decir ampliada o agregada, SI OTTO CONCIENTE ESO,,AYA EL, YO TE DEMANDARIA
Qué bueno que no eres mi enemiga, y qué bueno que Otto sea mi amigo.
@@SergioAlejandroCampos te falta muxo para igualarlo, tu eres un aficionado , el es un MAESTRO
En eso tienes razón, pero aún así es mi amigo y me siento orgulloso de serlo.
@@SergioAlejandroCampos Como sabes si lo de abajo no es mejor que lo de arriba. Sabes una cosa, TE GUsTA EL SHOW, ahi se te fue......esta dmas que muestres tu cara en tus videos, basta con que explicas divino. Tomalo por el lado amable. bye me dio sueño. y gracias por responderme como eliminar esa maldita macro ue sugeristes para encontrar los faceid, por fin ya lo hize.
Buenas noches.