Quantcast
Channel: EXCELeINFO
Viewing all 466 articles
Browse latest View live

Curso Excel VBA y Macros – Cap. 23 – Bucle For…Next y la programación estructurada

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos algunos temas interesantes, sobre todo conceptos que son muy importantes de entender si deseamos volvernos desarrolladores de aplicaciones con VBA.

Veremos el tema de la Programación estructurada y cómo nos ayuda a tener código fácil de leer y en orden. Cómo debemos evitar la instrucción GoTo para evitar el código espagueti.

También definiremos lo que son los bucles o ciclos y cuáles son los más usados para generar repeticiones de bloques de código. Los bucles más usados son:

  • For-Next
  • Do While
  • Do Until

Ver video Capítulo 23 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Programación estructurada

La premisa de la programación estructurada es que un segmento de código debe tener un punto de entrada y uno de salida. Esto es para tener un mejor código estructuralmente hablando.

La recomendación es evitar a toda costa la instrucción GOTO, ya que el uso de esta instrucción provoca que tengamos el llamado código espagueti, donde no tenemos claro dónde inicia una estructura y dónde termina, además de estar brincando de una línea a otra en nuestro código.

Si vamos a utilizar la instrucción GOTO, debe ser solamente cuando deseemos tener un manejador de errores, el cual veremos en temas posteriores de este curso.

La programación estructurada nos permite tener código fácil de leer y entender.

Bucles o ciclos

En programación, un bucle es una secuencia que se repite n cantidad de veces. El bucle o ciclo se repite hasta que llega al número final o hasta que se cumpla una condición, dependiendo el bucle usado.

Los ciclos más utilizados son:

  • For-Next. Lo veremos en este capítulo.
  • Do While. Lo veremos después.
  • Do Until. Lo veremos después.

Instrucción o bucle For…Next

Ese ciclo nos permitirá repetir un grupo de instrucciones un número determinado de veces. El ciclo For-Next debe tener una variable que será nombrada como Contador, y ese contador debe tener un valor inicial y uno final, para indicar cuántas veces se repetirá un código. El contador irá aumentando su valor en cada ciclo o cada repetición que se haga.

Sintaxis de For-Next

Vemos a continuación la sintaxis de For Next donde vemos el uso de la variable contador y cómo se le indica un valor de inicio y un valor de finalización.

For counter = start To end [ Step step ]
[ instrucciones ]
[ Exit For ]
[ instrucciones ]
[ contador ] Next

Donde:

PARTE

DESCRIPCIÓN

counter

Variable numérica que se irá aumentando en cada ciclo. Se usará como contador en el bucle. No se pueden usar tipos booleanos.

start

Es el valor inicial del contador. Puede comenzar en 0 o en cualquier valor numérico. También puede usarse un valor de una variable.

end

Es el valor final del contador. También puede usarse un valor de una variable.

step

Es la cantidad que se aumentará cada vez que se recorra el ciclo. Por default es valor es 1.

statements

Son las instrucciones que se ejecutará un número de terminado de veces. Estas instrucciones van entre el For y el Next.

Ejemplos usando For…Next

En esta macro vemos el uso simple del bucle For-Next, donde tenemos una variable de tipo contador a la que daremos el nombre de i. Usando For Next vamos a mostrar un mensaje 5 veces, y cada vez que se ejecute se mostrará el valor de i, que irá aumentando en 1.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub Bucle_For()

Dim i As Byte

For i = 1 To 5
    MsgBox "El valor del contador i, es: " & i
Next i

End Sub

Para esta macro usaremos conceptos que ya hemos visto en otros videos. Es importante que hayas repasado los temas anteriores para que entendamos bien cómo funciona esta macro y el porqué de cada parte. Los pasos de la macro serán:

  1. Se añade una hoja nueva al principio del archivo.
  2. En la celda A1 de la hoja nueva ingresamos el texto INDICE, además de darle formato de Negrita a la celda.
  3. En la variable CantidadHojas guardamos el número de hojas que tiene el archivo.
  4. Una vez que tengamos la cantidad, el bucle For-Next vamos a repetir esa cantidad de veces un código.
  5. El código que se repetirá será el que ingrese el nombre de cada una de las hojas en la columna A de la hoja nueva.
  6. Se mostrará un mensaje donde se hará la pregunta de si deseamos asignarle un nombre a la hoja nueva.
  7. Si presionamos Si, entonces se mostrará un cuadro de diálogo para ponerle nombre a la hoja activa.
Sub CrearIndice()
Dim Hoja As Worksheet
Dim CantidadHojas As Integer
Dim i As Integer
Dim NuevoNombre, Resp

ThisWorkbook.Sheets.Add Before:=Sheets(1)
Set Hoja = Application.ActiveSheet

With Hoja.Range("a1")
    .Value = "INDICE"
    .Font.Bold = True
End With

CantidadHojas = ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Hoja.Range("A1").Offset(i, 0).Value = Sheets(i).Name
Next i

Resp = MsgBox("Desea asignarle nombre a la hoja nueva?", vbYesNoCancel + vbQuestion, "EXCELeINFO")

If Resp = vbYes Then
    Application.Dialogs(xlDialogWorkbookName).Show
Else
'Nada
End If
End Sub

Descarga el archivo de ejemplo

023 – Bucle For…Next – EXCELeINFO.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.


Curso Excel VBA y Macros – Cap. 24 – Bucles Do…Loop, Do…While y Do…Until

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos algunos temas interesantes, sobre todo conceptos que son muy importantes de entender si deseamos volvernos desarrolladores de aplicaciones con VBA.

Veremos el tema de la Programación estructurada y cómo nos ayuda a tener código fácil de leer y en orden. Cómo debemos evitar la instrucción GoTo para evitar el código espagueti.

También definiremos lo que son los bucles o ciclos y cuáles son los más usados para generar repeticiones de bloques de código. Los bucles más usados son:

  • For-Next
  • Do While
  • Do Until

Ver video Capítulo 24 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Programación estructurada

La premisa de la programación estructurada es que un segmento de código debe tener un punto de entrada y uno de salida. Esto es para tener un mejor código estructuralmente hablando.

La recomendación es evitar a toda costa la instrucción GOTO, ya que el uso de esta instrucción provoca que tengamos el llamado código espagueti, donde no tenemos claro dónde inicia una estructura y dónde termina, además de estar brincando de una línea a otra en nuestro código.

Si vamos a utilizar la instrucción GOTO, debe ser solamente cuando deseemos tener un manejador de errores, el cual veremos en temas posteriores de este curso.

La programación estructurada nos permite tener código fácil de leer y entender.

Bucles o ciclos

En programación, un bucle es una secuencia que se repite n cantidad de veces. El bucle o ciclo se repite hasta que llega al número final o hasta que se cumpla una condición, dependiendo el bucle usado.

Los ciclos más utilizados son:

  • For-Next. Lo vimos en el capítulo 23.
  • Do While. Lo veremos en este capítulo.
  • Do Until. Lo veremos en este capítulo.

Bucles Do…Loop

Con respecto a los bucles o ciclos Do-Loop, es importante comentar que existen dos importantes, el bucle Do…While y el bucle Do…Until. En seguida veremos las diferencias entre cada uno:

  • Do-While. Repite una serie de instrucciones mientras una condición se cumpla, es decir, que sea True o VERDADERO.
  • Do-Until. Repite una serie de instrucciones hasta que una condición se cumpla, es decir, que sea True o VERDADERO.
  • While-Wend. Esta instrucción sigue vigente en VBA por temas de compatibilidad. Repite una serie de instrucciones siempre y cuando que una condición se cumpla o sea True.

Sintaxis

La sintaxis para los bucles Do-Loop es la misma, colo cambia el While por el Until. Aunque como ya vimos, las condiciones son tratadas de manera diferente.

Do [While ó Until ] condición
[ instrucciones ]
[ Exit Do ]
[ instrucciones ]
Loop

También puede usarse la siguiente sintaxis.

Do [ instrucciones ]
[ Exit Do ]
[ instrucciones ]
Loop [While ó Until ] condición
Donde:

ELEMENTO

DESCRIPCIÓN

condition

Es la condición se que evaluará, podemos caracteres de comparación como =, <, >, <>.

instrucciones

Son las intrucciones que se repetirás mientras o hasta que la condición devuelva True o VERDADERO.

Exit Do

Aquí le podemos indicar que si se cumple alguna condición especial, podemos salir del bucle.

Combinando Do-Loop con IF

En caso de que deseemos terminar el bucle, en caso de que se cumpla alguna condición, podemos usar la instrucción IF…THEN…ELSE para evaluarla, y se cumple, entonces usamos Exit Do.

Ejemplos con Do…While…Loop

Obtener el índice de color de un rango de celdas

En esta macro vamos a usar las propiedades Interior y ColorIndex para obtener el color de índice de las celdas de un rango. Usando Do While vamos a recorrer las celdas de la columna y obtendremos el color de fondo de cada celda.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub Do_While()

Range("B16").Select

Do While ActiveCell.Offset(0, -1).Value <> ""
    ActiveCell.Value = ActiveCell.Offset(0, -1).Interior.ColorIndex
    ActiveCell.Offset(1, 0).Select
Loop

End Sub
Usando Do Until

Usaremos la misma macro anterior, pero ahora usando Do Until.

Sub Do_Until()

Range("C16").Select

Do
    ActiveCell.Value = ActiveCell.Offset(0, -2).Interior.ColorIndex
    ActiveCell.Offset(1, 0).Select
Loop Until ActiveCell.Offset(0, -2).Value = ""

End Sub

Colorear celdas dependiendo el tipo de nomenclatura

En esta macro simularemos la nomenclatura que habitualmente se utiliza en una nómina. Se recorrerá cada una de las celdas y dependiendo el contenido o la letra, se aplicará el color de fondo.

Sub ColorearTipos()

Range("A5").Select

Do While ActiveCell.Value <> ""
    
    If VBA.IsNumeric(ActiveCell.Value) Then Exit Do
    
    With ActiveCell.Interior
        Select Case ActiveCell.Value
            Case "A"
                .ColorIndex = 50
            Case "D"
                .ColorIndex = 2
            Case "V"
                .ColorIndex = 3
            Case "F"
                .ColorIndex = 46
            Case Else
                .ColorIndex = xlNone
        End Select
    End With
    
    ActiveCell.Offset(1, 0).Select

Loop

End Sub

Descarga el archivo de ejemplo

024 – Bucles Do…Loop, Do…While, Do…Until – EXCELeINFO.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Mover Tablas dinámicas a otro archivo con datos de origen – Excel en 5 minutos

$
0
0

Cuando movemos Tablas dinámicas a otro archivo y ese archivo lo compartimos con algún compañero o jefe, tal vez no te estén dando cuenta que estás enviando toda la información en ese archivo.

En este tutorial voy a mostrarte cómo proteger tu información de origen y evitar que otras personas tengan acceso a la totalidad de tus datos.

Por otro lado, si estás consciente de querer compartir toda tu información, solo debes tomar en cuenta el tamaño del archivo.

Ver video Mover Tablas dinámicas a otro archivo

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Mover Tablas dinámicas con datos de origen

Si copiamos y pegamos una Tabla dinámica en un nuevo archivo de Excel, debemos tomar en cuenta que al hacerlo, también estamos moviendo los archivos de origen al nuevo archivo. Lo bueno es que podemos decidir si movemos los datos de origen o no, dependiendo la situación.

Pasos:

  • Elegir una Tabla dinámica y copiarla.
  • Nos vamos a otro archivo de Excel y pegamos.
  • Damos clic derecho en la Tabla dinámica del archivo de origen.
  • Elegimos Opciones de tabla dinámica.
  • En la pestaña Datos vemos la opción Guardar datos de datos de origen con el archivo.

Puntos a considerar al guardar datos con el archivo

  • El archivo de origen puede tener un tamaño mayor al esperado.
  • El destinatario puede regenerar la información de origen.
  • Podemos disminuir el tamaño del archivo desactivando esta opción.

Descarga el archivo de ejemplo

005 – Mover tablas dinámicas de un archivo a otro – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 25 – Implementar un Manejador de errores

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

Como desarrolladores de macros, realizamos aplicaciones de todo tipo, y tenemos la obligación tanto técnica como moral de desarrollar aplicaciones que funcionen de manera correcta. Y una manera de que nuestras aplicaciones funcionen bien, es manejar adecuadamente los errores que puedan suceder durante la ejecución.

En VBA podemos implementar un controlador de errores usando la instrucción ON ERROR GOTO, y lo podemos hacer de dos maneras:

  • En case de que suceda un error, mostramos un mensaje o ejecutamos instrucciones.
  • En caso de que suceda un error, seguimos con la ejecución de la macro.

Ver video Capítulo 25 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Sintaxis de la instrucción On Error

On Error GoTo línea (etiqueta)
[On Error Resume Next]**

Instrucciones

**[ On Error GoTo 0 ]

Exit Sub

Línea (etiqueta)

Instrucciones

Donde:

INSTRUCCIÓN

DESCRIPCIÓN

On Error GoTo línea

Lo usamos para que al momento de que se detecte algún error, pase el control a una línea o a una etiqueta.

On Error Resume Next

Si se detecta un error, se pasará el control a la siguiente línea, omitiendo el anterior.

On Error GoTo 0

La usamos para restablecer el objeto Error. Regularmente se una cuando utilizamos On Error Resume Next.

línea (etiqueta)

Es la línea de nuestra macro que será llamada al suceder un error

Instrucciones

En caso de que suceda un error, ejecutamos estas instrucciones

Exit Sub

Si usamos una etiqueta usamos Exit Sub para terminar la macr en caso de que no haya errores

Ejemplo básico de una manejador de errores

Antes de compartirles el código completo de la macro debemos tener en cuenta que la instrucción On Error debe de ir antes de la líneas o las líneas que comiencen a ejecutar alguna acción de la macro.Yo siempre la pongo después de la declaración de variables.

Al terminar las líneas de nuestra macro, será necesario usar Exit Sub, Exit Function o Exit Property, ya que se supone que después de estas líneas seguirá la etiqueta que hemos definido para el manejo de error.

A continuación vemos la estructura de una macro con una manejador de error:

Sub MacroPrueba()

On Error GoTo Errores

'Aquí va el código
'de nuestra macro

'Damos por terminada nuestra macro
Exit Sub

'Esta etiqueta es la que nos permitirá
'asignar otro código para manera el error.
Errores:
'Podemos usar un MsgBox para mostrar un mensaje

End Sub

Los errores se almacenan en el objeto Err, por lo que podemos obtener el número de error con Err.Number o la descripción con Err.Description.

Macros de ejemplo

En esta macro cambiaremos el color de las etiquetas del archivo de ejemplo. Usaremos el bucle For Next para recorrer todas las hojas del archivo. En el momento en que no encuentre el nombre de la Hoja5, la macro deberá lanzar un error de Visual Basic.

El error que se lanzará es:

Se ha producido el error ‘9’ en tiempo de ejecución: Subíndice fuera del intervalo.

El error 9 nos indica que algún elemento de una matriz o una colección no existe o lo estamos llamando de manera incorrecta.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub SinManejadorDeErrores()

Dim i As Byte
Dim CantidadHojas As Byte
Dim Nombre As String

CantidadHojas = Application.ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Nombre = "Hoja" & i
    Sheets(Nombre).Tab.Color = VBA.vbRed
Next

End Sub

En la siguiente macro usaremos la instrucción On Error y en caso de que suceda un error, nos iremos a la etiqueta ManejadorErrores, la cual se escribirá con los puntos después de la etiqueta. En su defecto, en lugar de un nombre de etiqueta, podemos utilizar un número de línea.

Evaluaremos el número de error usando el objeto Err con la propiedad Number:

  • Si es error 9, subíndice fuera del intervalo, quiere decir que la hoja no existe.
  • Si es error 1004, error definido por la aplicación, puede ser que el archivo esté protegido (Revisar > Proteger libro).
Sub ConManejadorDeErrores()

Dim i As Byte
Dim CantidadHojas As Byte
Dim Nombre As String

On Error GoTo ManejadorErrores

CantidadHojas = Application.ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Nombre = "Hoja" & i
    Sheets(Nombre).Tab.Color = VBA.vbBlue
Next

Exit Sub

ManejadorErrores:

    If Err.Number = 9 Then
        MsgBox Err.Number & " " & Err.Description
        MsgBox Nombre & " no existe"
    ElseIf Err.Number = 1004 Then
        MsgBox Err.Number & " " & Err.Description
        MsgBox "Revise que el archivo no esté protegido."
    Else
        MsgBox Err.Number & " " & Err.Description
    End If

End Sub

Ahora bien, en caso de que suceda un error, podemos indicarle a la macro que siga con la ejecución de la siguiente instrucción. Esto se logra usando On Error Resume Next.

Sub ContinuarEnCasoDeError()

Dim i As Byte
Dim CantidadHojas As Byte
Dim Nombre As String

On Error Resume Next

CantidadHojas = Application.ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Nombre = "Hoja" & i
    Sheets(Nombre).Tab.Color = VBA.vbRed
Next

On Error GoTo 0

End Sub

Descarga el archivo de ejemplo

025 – Implementar un Manejador de errores.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 26 – Procedimientos Sub públicos, privados y cómo ejecutarlos

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos a fondo el tema de Procedimientos Sub, los cuales generalmente pueden ser considerados como macros. Veremos la manera de cómo declarar macros y algunas maneras de ejecutarlas.

Veremos también que podemos tener procedimientos Públicos y privados, y la diferencia entre ellos.

Ver video Capítulo 26 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Qué es un Procedimiento en VBA

  • Un procedimiento es una serie de instrucciones que se encuentran en un Módulo.
  • Un Módulo puede contener varios procedimientos.
  • Un archivo puede contener varios módulos.
  • Regularmente un procedimiento comienza con Sub.
  • Existen varias maneras de llamar o ejecutar procedimientos.

Consideraciones sobre procedimientos

  • Aunque un procedimiento o macro puede contener muchas instrucciones, lo recomendable es tener procedimientos relativamente cortos con su acción bien definida.
  • Un buen desarrollador define bien qué hace cada procedimiento y eso le facilita el mantenimiento del código.

Existen:

  • Procedimientos Sub
  • Funciones (functions)

Sintaxis

La manera habitual de declarar macros o procedimientos es usando la instrucción Sub, pero a continuación vemos que no es la única manera.

[ Private | Public ] [ Static ] Sub nombre [ ( arglist ) ]
[ instrucciones ]
[ Exit Sub ]
[ instrucciones ]
End Sub

Donde:

ELEMENTO

DESCRIPCIÓN

Private

Indica que el procedimiento es privado

Public

Indica que el procedimiento es público

Static

Indica que el procedimiento es estático

Sub

Palabra reservada para declarar procedimientos o macros

Nombre

El nombre que debe llevar el procedimiento

Arglist

Cada uno de los argumentos que se le pasarán al procediemiento, en caso que aplique.

Instrucciones

Cada una de las instrucciones que se ejecutarán

Exit Sub

Salir de la macro en caso de que se cumpla una condición

End Sub

Cierre del procedimiento

Procedimientos Privados

Cuando definimos un procedimiento privado, estamos dando la instrucción de que la macro o el procedimiento sólo puede ser llamado desde una macro del mismo módulo y que no podremos visualizarla desde el cuadro de diálogo de macros.

Una macro privada la definimos así:

Private Sub NombreMacro2()

Dim nombre As String

nombre = “Curso Macros”

MsgBox nombre

End Sub

Procedimientos Públicos

De manera predeterminada, un procedimiento es público, pero podemos usar la palabra reservada Public para dejarlo en claro, aunque no es necesario usarla. Cuando hablamos de macros públicas estamos diciendo que pueden ser llamada desde cualquier procedimiento de cualquier módulo, además de poder ejecutarla desde el cuadro de diálogo de macros.

Public Sub NombreMacro()

Dim nombre As String

nombre = “Curso Macros”

MsgBox nombre

End Sub

Procedimientos Estáticos

Usando la palabra reservada Static indicamos que los valores de las variables se conservarán, incluso después de terminar la macro. Esto es similar a cuando vimos las Variables estáticas.

Static Sub NombreMacro3()

Dim numero As Integer

MsgBox numero

numero = numero + 1

End Sub

Option Private Module

Al inicio de un Módulo podemos usar esta instrucción para forzar a que las macros sean privadas. Usando esta instrucción, las macros sí se pueden llamar desde otras macros, pero no podrán ser vistas en el Cuadro de diálogos de macros.

Llamar o ejecutar macros desde otras macros

Siempre y cuando las macros que mandemos llamar sean públicas, existen estas maneras de ejecutar procedimientos desde otros procedimientos.

  • Call NombreMacro. Usando la intrucción Call.
  • Application.Run NombreMacro. Usando el método Run, además podemos incluir los argumentos que tenga el procedimiento.
  • Módulo1.NombreMacro3. Anteponiendo el nombre del módulo y luego el nombre de la macro.

Procedimientos con argumentos

Así como en las funciones de Excel, también le podremos pasar argumentos a un procedimiento. Este tema lo veremos posteriormente.

Salir de la macro con Exit Sub

Usamos Exit Sub cuando deseamos validar alguna condición, y si esa condición se cumple salimos de la macro sin pasar por el resto de las instrucciones. Uso mucho esta instrucción cuando muestro un mensaje con los botones Si / No. En caso de que se presione No, salimos de la macro.

Cuadro de diálogo Macros

Si nos vamos a la pestaña Vista > Macros > Ver macros, podemos ver las macros que están disponibles en nuestro archivo. En este cuadro de diálogo solo se mostrarán las macros que sea públicas, no así las privadas.

Además, en el cuadro de diálogo de Macros, no podremos visualizar las siguientes macros:

  • Procedimientos de Función.
  • Procedimientos donde usando la instrucción Private.
  • Procedimientos que tengan argumentos.
  • Procedimientos almacenados en un addin, como EXCELeINFO.
  • Procedimientos que sean lanzados por eventos.

Descarga el archivo de ejemplo

026 – Procedimientos.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

7 maneras creativas de usar Emojis en Excel de escritorio y online

$
0
0

En muchas ocasiones, las cosas simples pueden darnos buenos resultados, sobre todo si las aplicamos con creatividad. En este tutorial veremos el uso de Emojis, sí Emojis, para nuestras hojas de cálculo en Excel.

Los Emojis sin bien son usados en mensajes de Messenger o Whatsapp, en esta ocasión vamos a aprovechar y usarlos en nuestros archivos de Excel como herramienta creativa para presentar nuestros datos.

Veremos 7 maneras creativas de usar Emojis en Excel.

Ver video Emojis en Excel para usarlos en tus Dashboards

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Mostrar Emojis en Windows 10

Para mostrar Emojis en Windows, podemos hacerlo presionando la combinación de teclas Windows + tecla punto y veremos que se muestra un panel donde podemos escribir alguna palabra y elegir el icono que más te guste.

Emojis en Windows 10 y Office.

Figura 1. Emojis en Windows 10 y Office.

Emojis en Office de escritorio y Office o Excel online

Si usamos Emojis en Excel para PC, se mostrarán a blanco y negro, en cambio si los vemos en Excel online, se mostrarán a color.

Office para PC y Office online

Figura 2. Office para PC y Office online

1. Emojis en Fórmulas

Tenemos la siguiente fórmula en Excel

=SI(H2<2000,”MALO”,”BUENO”)

La misma fórmula la podemos utilizar con Emojis para mostrarlos como resultado en lugar de un texto.

=SI(H2<2000,””,””)

2. Emojis en BUSCARV

En un rango tenemos los valores que se van a buscar y los valores que se devolverán. Usaremos la función BUSCARV para devolver Emojis en lugar de devolver un valor numérico a texto.

Usar BUSCARV para devolver Emojis.

Figura 3. Usar BUSCARV para devolver Emojis.

3. Usar Emojis en nombres definidos

Elegimos una celda y nos vamos al cuadro de nombres, ingresamos el guión bajo “_” seguidos de un Emoji.

Emojis en nombres definidos en Excel.

Figura 4. Emojis en nombres definidos en Excel.

4. Emojis en Gráficos

Podemos tener una columna que tenga Emojis y si esa columna la mostramos en un gráfico, los emojis aparecerán en los gráficos mostrando análisis creativos.

Emojis en Gráficos.

Figura 5. Emojis en Gráficos.

5 y 6. Emojis en Tablas dinámicas y Slices para tus Dashboards

Ya vimos que los emojis los podemos utilizar en celdas y pueden sustituir texto, y como un emoji puede considerarse un tipo de fuente, entonces fácilmente podemos usarlos en Tablas dinámicas y Slices para usarlos en tus Dashboards.

Emojis en Tablas dinámicas y Slices para tus dashboards.

Figura 6. Emojis en Tablas dinámicas y Slices para tus dashboards.

7. Emojis en etiquetas de hojas.

En la Figura 2 vemos la diferencia entre los Emojis de Office para PC y Office online, usados en etiquetas de hojas.

Descarga el archivo de ejemplo

Emojis en Excel – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 27 – Práctica: Agrupar tablas de varias hojas en una sola

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este video tutorial veremos un caso práctico donde repasaremos algunos temas que hemos visto en este curso de macros.

Veremos cómo agrupar o consolidar varias tablas o rangos de datos que tenemos en variar hojas, en una sola. Lo interesante de la macro es que recorrerá todas las hojas del archivo y tomará los datos para agruparlos en una hoja.

Ver video Capítulo 27 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Caso práctico Consolidar hojas en una sola

Para poder agrupar los datos varias hojas en una sola, debemos tener los mismos encabezados en todas las hojas para garantizar que la hoja concentradora no tenga columnas de más.

La macro recorrerá cada una de las hojas y tomará los datos para luego pegarlos en la primera hoja, donde se concentrarán los datos.

También la macro puede omitir hojas que cumplan con un nombre para omitir el contenido y no copiar nada contenido en esa hoja.

Temas tratados

En este video tutorial repasaremos los siguientes temas:

  • Tipos de variables.
  • Función MsgBox.
  • Instrucción If…Then…Else.
  • Agregar hojas.
  • Copiar celdas.
  • Guardar valores en variables.
  • Ciclo For…Next.
  • Cambiar nombre de hoja.
  • Autoajustar tamaño de columnas.

Código VBA de las macros

Option Explicit

Sub AgruparHojas()
    
Dim Cuenta As Integer
Dim i As Integer
Dim j As Integer
Dim MsgContinuar As Boolean

MsgContinuar = MsgBox("Se agruparán las tablas de igual estructura." + _
vbNewLine + vbNewLine + "Desea continuar?", vbYesNo + vbQuestion, "EXCELeINFO")

If MsgContinuar = vbNo Then Exit Sub

ActiveWorkbook.Sheets.Add Before:=Sheets(1)
Sheets(2).Range("A1:G1").Copy Sheets(1).Range("A1")
Sheets(1).Range("A2").Select

Cuenta = Sheets.Count

For i = 2 To Cuenta
    If Sheets(i).Name <> "EXCELeINFO" Then
        Sheets(i).Activate
        Sheets(i).Range("A2").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets(1).Activate
        ActiveSheet.Paste
        Selection.End(xlDown).Select
        Selection.Offset(1, 0).Select
    Else
        'Nada
    End If
Next i

Application.CutCopyMode = False

Call ActivarA2

Sheets(1).Name = "Concentrado"
    
End Sub

Sub ActivarA2()

Dim j As Integer

For j = 1 To Sheets.Count
    Sheets(j).Activate
    Sheets(j).Range("A2").Select
Next j

Sheets(1).Activate
Cells.EntireColumn.AutoFit
Range("A2").Select
    
End Sub

Descarga el archivo de ejemplo

027 – Práctica – Agrupar contenido de varias hojas en una hoja.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 28 – Práctica 2: Optimizando macro para Agrupar hojas en una sola

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial vamos a retomar el desarrollo que hicimos en el capítulo 27, donde veíamos cómo agrupar información de varias hojas en una sola.

Veremos algunas técnicas muy efectivas que nos ayudarán a realizar desarrollos más óptimos logrando hacer lo mismo que la práctica anterior, pero en lugar de movernos entre hojas, desde la primera hoja, haciendo referencia a los rangos de las demás hojas, logramos agrupar la información en una sola hoja.

Así que si quieres pasar al siguiente nivel en la optimización de macros, mira el video tutorial.

Ver video Capítulo 28 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Caso práctico 1, agrupar hojas

Para poder agrupar los datos varias hojas en una sola, debemos tener los mismos encabezados en todas las hojas para garantizar que la hoja concentradora no tenga columnas de más.

La macro recorrerá cada una de las hojas y tomará los datos para luego pegarlos en la primera hoja, donde se concentrarán los datos.

También la macro puede omitir hojas que cumplan con un nombre para omitir el contenido y no copiar nada contenido en esa hoja.

Temas tratados

En este video tutorial repasaremos los siguientes temas:

  • Tipos de variables.
  • Función MsgBox.
  • Instrucción If…Then…Else.
  • Agregar hojas.
  • Copiar celdas.
  • Guardar valores en variables.
  • Ciclo For…Next.
  • Cambiar nombre de hoja.
  • Autoajustar tamaño de columnas.

Caso práctico 2, agrupar hojas haciendo referencia a rangos de otras hojas

En este caso práctico 2, optimizamos el ejemplo del caso 1 con algunas mejoras significativas que nos harán entender mejor el tema de las referencias a rangos y que ejecute una macro sin necesitar de estar activando hojas para copiar los datos.

La nueva macro se podrá ejecutar sin problema aunque las hojas estén ocultas, además de aprender a usar el Operador AND para comparar varios nombres de hojas y omitirlas para no tomar en cuenta su contenido.

Temas tratados macro optimizada

Además de los temas que vimos en la práctica anterior, en esta optimización veremos los siguientes temas:

  • Usar el operador AND para comparar si el nombre de una hoja es diferente a cierto nombre Y a otro nombre.
  • Usaremos la instrucción SET para asignar rangos a variables de objeto.
  • Usaremos la propiedad COUNT para tomar el conteo de filas y columnas de rangos.
  • Combinaremos las propiedades OFFSET y RESIZE para tomar los dato cada una de las hojas y copiarlos excluyendo encabezados.

Código VBA de la macro

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub AgruparHojas()

Dim Cuenta As Integer
Dim i As Integer
Dim MsgContinuar As Boolean
Dim Rango As Range
Dim Rango2 As Range
Dim CuentaF As Integer
Dim CuentaF2 As Integer
Dim CuentaC As Integer

MsgContinuar = MsgBox("Se agruparán las tablas de igual estructura." + _
vbNewLine + vbNewLine + "Desea continuar?", vbYesNo + vbQuestion, "EXCELeINFO")

If MsgContinuar = vbNo Then Exit Sub

ActiveWorkbook.Sheets.Add Before:=Sheets(1)
Sheets(2).Range("A1:G1").Copy Sheets(1).Range("A1")
Sheets(1).Range("A2").Select

Cuenta = Sheets.Count

For i = 2 To Cuenta
    
    If Sheets(i).Name <> "EXCELeINFO" And Sheets(i).Name <> "HojaPrueba" Then
        
        Set Rango = Sheets(i).Range("A1").CurrentRegion
        CuentaF = Rango.Rows.Count
        CuentaC = Rango.Columns.Count
        
        Set Rango2 = Sheets(1).Range("A1").CurrentRegion
        CuentaF2 = Rango2.Rows.Count
        Rango.Offset(1, 0).Resize(CuentaF - 1, CuentaC).Copy Sheets(1).Cells(CuentaF2 + 1, 1)
        
        Set Rango = Nothing
        Set Rango2 = Nothing
        
    Else
        'Nada
    End If
Next i

Cells.EntireColumn.AutoFit
Sheets(1).Name = "Concentrado"

End Sub

Descarga el archivo de ejemplo

028 – Práctica 2 – Optimizando macro para Agrupar hojas en una sola.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.


Usar Escenarios en Excel y la función PAGO para calcular el pago mensual de un préstamo

$
0
0

En este tutorial veremos un caso práctico en Excel para usar Escenarios, una herramienta que nos ayudará a tener un conjunto de valores lo cuales podrán ser intercambiados para evaluar diferentes escenarios de una situación.

En este ejemplo calcularemos el pago mensual de un préstamo. Haremos el cálculo usando la función PAGO, la cual forma parte de las funciones financieras de Excel.

Con la función PAGO calcularemos la mensualidad a pagar en el préstamo, y con Escenarios evaluaremos diferentes pagos mensuales dependiendo 3 tasas de interés.

Ver video Escenarios en Excel y la función PAGO

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Calcular el pago mensual de un préstamo

Dentro de las funciones Financieras en Excel, tenemos la función PAGO que nos ayudará a determinar la cantidad que deberemos pagar de manera mensual dependiendo una tasa de interés y la cantidad de pagos que nos requiera el banco.

La función PAGO tiene la siguiente sintaxis:

=PAGO(Tasa, Nper, Va, Vf, Tipo)

Donde:

  • Tasa. Es la tasa de interés que la institución financiera determina.
  • Nper. El total de pagos de un préstamo.
  • Va. La cantidad total del préstamo solicitado.
  • Vf. Valor futuro que se desea lograr al dar el último pago. Por defecto es 0 (cero).
  • Tipo. 1 para pago al comienzo de periodo y 0 para el final del periodo.

En la siguiente imagen vemos que el préstamo solicitado es 5,000, a una tasa del 16.50% anual y con la función PAGO determinamos el pago mensual de 2,460.12.

Escenarios en Excel

Un escenario es Excel es un conjunto de valores que serán guardados y pueden ser cambiados para evaluar diferente situaciones de un mismo caso, es decir, diferentes escenarios dependiendo el cambio de los valores. Un escenario nos permitirá evaluar diferentes resultados cambiando los valores que han sido determinados como cambiantes,

Para nuestro ejemplo del pago de un préstamo los valores cambiantes serán la tasa de interés y el plazo o meses a pagar. Conforme estos dos valores cambien se los resultados serán diferentes para cada Escenario.

Escenarios diferentes cambiando la tasa de interés y pagos

Ahora que definimos los valores cambiantes, vamos a configurar 3 escenarios con la tasa de interés cambiante.

  • Cuánto pagamos con el 16.5 mensual.
  • Cuánto pagamos con el 38.45 mensual.
  • Cuánto pagamos con el 59.4 mensual.

Seguimos los siguientes pasos para tener 3 escenarios:

Pestaña Datos > Análisis e hipótesis > Administrador de escenarios.

  • Botón Agregar.
  • Damos un nombre al escenario.
  • Elegimos las celdas cambiantes que serán la tasa de interés y la cantidad de pagos.
  • Botón Aceptar.

  • Definimos los valores cambiante para este escenario.
  • Botón Agregar para el siguiente escenario.

Una vez que se definen los 3 escenarios y sus valores cambiantes, analicemos qué hace cada botón:

  • Agregar. Se agrega un nuevo escenario.
  • Eliminar. Se elimina el escenario elegido.
  • Modificar. Cambiamos los valores cambiantes.
  • Combinar. Si tenemos varios archivos con escenario los podemos combinar.
  • Resumen. Se mostrará una nueva hoja donde veremos todos los escenarios y los diferentes resultados que arroja cada uno.

Si presionamos el botón Resumen veremos los 3 escenarios y el resultado de cada uno para analizarlos.

Descarga el archivo de ejemplo

Escenarios para simular un préstamo bancario – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 29 – Cómo ejecutar macros guardadas en otros archivos de Excel

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este video tutorial veremos la manera de poder ejecutar macros que están guardadas en otro archivo de Excel. Veremos dos maneras de poder ejecutarlas:

  • Abrir el archivo y llamar sus macros.
  • Crear una referencia hacia el archivo que contiene las macros que deseamos ejecutar.

También veremos en qué momentos usamos la instrucción Call y en qué momento el método Run.

Ver video Capítulo 29 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Macro para convertir texto a mayúsculas

Como deseamos mandar llamar macros de un archivo a otro, lo primero que debemos de tener es un archivo que aloje la macro para cambiar un rango seleccionado a mayúsculas. Crearemos el archivo y le pondremos de nombre Convertir a MAYUSC.xlsm.

En este archivo guardaremos la siguiente macro:

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub MAYUSCULAS()

Dim Celda As Range

For Each Celda In Selection

    Celda.Value = VBA.UCase(Celda.Value)

Next Celda

End Sub

Mandar llamar macros de otro archivo usando Run

Una vez que tenemos el archivo con la macro para convertir a mayúsculas, tenemos otro archivo en el cual tendremos una macro que abrirá dicho archivo y ejecutaremos la macro MAYUSCULAS.

Para ejecutar la macro guardada en otro archivo, primero debemos tenerlo abierto, la siguiente macro realizará los siguientes pasos:

  • Abrirá el archivo Convertir a MAYUSC.xlsm.
  • Ejecutará la macro MAYUSCULAS usando el método Run.
  • Cerrará el archivo.
Option Explicit

Sub EjecutarMacroOtroArchivo()

Dim Nombre As String

Workbooks.Open "C:\Users\Sergio Campos\Documents\Convertir a MAYUSC.xlsm"

Nombre = ActiveWorkbook.Name

Application.Workbooks("029 - Ejecutar macros o procedimientos de otros archivos - EXCELeINFO.xlsm").Activate

Application.Run "'Convertir a MAYUSC.xlsm'!MAYUSCULAS"

Application.Workbooks(Nombre).Close False

End Sub

Ejecutar macros de otro archivo creando una Referencia

Otra manera de ejecutar macros dese otro archivo es creando una Referencia a dicho archivo. Crearemos la referencia dentro del IDE o VBE de VBA.

  • Dentro del VBE, elegimos en la parte izquierda el archivo Convertir a MAYUSC.xlsm.
  • Damos clic derecho y elegimos Propiedades VBAProject.
  • El Nombre de proyecto ingresamos MAYUSC.
  • Aceptar.
  • Elegimos el archivo 029 – Ejecutar macros o procedimientos de otros archivos – EXCELeINFO.xlsm.
  • Dentro del IDE de VBA nos vamos al menú Herramientas > Referencias.
  • Dentro de la lista marcamos MAYUSC.
  • Aceptar.

Una vez creada la referencia, en la parte izquierda, dentro del archivo 029… veremos una carpeta llamada Referencias.

Al crear la referencia al archivo de la macro MAYUSCULAS podremos llamar a sus macros solo con escribir el nombre de la macro o usando la instrucción Call, el nombre del proyecto y el nombre de la macro.

Sub Prueba()

MAYUSCULAS
Call MAYUSC.MAYUSCULAS
Call MAYUSCULAS

End Sub

Descarga el archivo de ejemplo

029 – Ejecutar macros o procedimientos de otros archivos – EXCELeINFO.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

 

Curso Excel VBA y Macros – Cap. 30 – Pasar argumentos a procedimientos. Diferencia entre ByRef y ByVal

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

A este nivel del curso ya estamos acostumbrados a crear procedimientos en VBA. Recordemos que un procedimiento puede ser considerado una macro, aunque no necesariamente ya que una macro se puede ejecutar desde un botón, pero un procedimiento no siempre.

En este tutorial veremos cómo crear procedimientos que acepten argumentos, similar a las funciones de Excel. Entre otros temas veremos:

  • Cómo pasar argumentos en un procedimiento.
  • Diferencia entre parámetros y argumentos.
  • Argumentos con nombre.
  • Parámetros ByRef y ByVal.

Ver video Capítulo 30 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Diferencia entre parámetro y procedimiento

Un parámetro se especifica al momento de definir un procedimiento o una función, y éste puede ser ByRef o ByVal. En la siguiente línea declaramos el procedimiento Calcular y le decimos que tenga dos parámetros, Sueldo y Bono, además de indicarle cómo es que recibirán los valores (argumentos) y su tipo.

Sub Calcular(ByVal Sueldo As Double, Bono As Integer)

Un argumento representa el valor que se le pasa a un parámetro. Si mandamos llamar al procedimiento Calcular, éste tiene dos parámetros los cuales debemos enviarlos. Al enviarle el sueldo y el bono, le estamos enviando argumentos, es decir, los valores que se usarán para el cálculo.

Call Calcular(1200, 100)

Ó

Calcular 1200, 100)

Un argumento con nombre es por ejemplo cuando usamos la función MsgBox. Sabemos que podemos enviar un texto para mostrar, la cantidad de botones a mostrar, entre otros argumentos. Si miramos la siguiente línea, es la manera rápida de usar Msgbox:

MsgBox “Mensaje de prueba”, vbExclamation, “Titulo”

Si deseamos usar los argumentos con nombre, basta con indicar el nombre de cada argumento seguido de “:=”. Al usar los argumentos con nombre podemos usarlos en el orden que deseemos. Debemos tener en cuante que si usamos argumentos con nombre, deberemos guardar el valor del botón presionado en una variable.

valor = MsgBox(Prompt:=”Mensaje de prueba”, Buttons:=vbExclamation, Title:=”Titulo”)

Pasar argumentos por valor (ByVal) o por referencia (ByRef)

La sintaxis para pasar argumentos en un procedimiento se muestra a continuación:

Sub Name ([Optional] [ByVal | Byref] [ParamArray] <variable> [As type])

Donde:

ELEMENTO

DESCRICIÓN

Optional

Indica que el argumento a pasar es opcional.

ByVal

El argumento se pasa por valor. El procedimiento accede a una copia de la variable por lo que el valor de la variable se mantiene intacto.

ByRef

Es la manera predeterminada en la que se envían los argumentos. Indica que el argumento se pasa por referencia. El procedimiento puede acceder al valor de la variable y lo puede modificar.

ParamArray

Se usa para enviar una matriz de valores.

As type

Indica el tipo de valor que tendrá el parámetro.

Procedimientos VBA de ejemplo ByRef

Primero creamos un procedimiento llamado Calcular que tendrá como parámetros numero1 y numero2. Estos dos parámetros serán recibidos por referencia (ByRef).

Posteriormente creamos una macro llamada Procedimiento donde mandaremos llamar al procedimiento Calcular y le mandaremos como argumentos numero1 y numero2. Al enviarle los argumentos por referencia (ByRef) significa que el procedimiento Calcular tomará los valores y al aplicarles algún cálculo, modificará los valores definidos en la macro Procedimiento.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub Procedimiento()

Dim numero1 As Integer
Dim numero2 As Integer

numero1 = 1
numero2 = 2

Call Calcular(numero1, numero2)

MsgBox numero1
MsgBox numero2

End Sub

Sub Calcular(ByVal numero1 As Integer, ByVal numero2 As Integer)

numero1 = numero1 + 1
numero2 = numero2 + 1

MsgBox numero1
MsgBox numero2

End Sub

Ahora tenemos otro procedimiento llamado Calcular el cual tendrá dos parámetros, Sueldo y Bono. Este procedimiento tomará el sueldo y le sumará la cantidad de bono.

Tendremos un macro llamada BonoEmpleado donde definiremos el suelo y el bono del empleado. Estos dos argumentos se pasarán en la llamada al procedimiento Calcular. Se hará la suma del sueldo más el bono y el resultado se imprimirá en una celda.

Option Explicit

Sub BonoEmpleado()
Dim Sueldo As Double
Dim Bono As Integer

Sueldo = Range("B2").Value
Bono = Range("B3").Value

Call Calcular(Sueldo, Bono)

MsgBox "El sueldo es: " & Sueldo

Range("B4").Value = Sueldo

End Sub


Sub Calcular(Sueldo As Double, Bono As Integer)

Sueldo = Sueldo + Bono

End Sub

Procedimiento VBA ByVal

Como lo vimos anteriormente, al pasar argumento por valor (ByVal), el procedimiento que reciba los argumentos tomará una copia de los valores de las variables y trabajará sobre ellos, pero no modificará sus valores originales.

Tenemos el mismo ejemplo de la macro BonoEmpleado, pero ahora el procedimiento Calcular tendrá recibirá los argumentos Sueldo y Bono por valor (ByVal). El procedimiento Calcular hará la suma del Sueldo más el Bono, además de imprimir el resultado en una celda de Excel. La macro BonoEmpleado solo enviará una copia de las variables, pero los valores se mantendrán sin cambio dentro del mismo procedimiento.

Option Explicit

Sub BonoEmpleado()
Dim Sueldo As Double
Dim Bono As Integer

Sueldo = Range("B2").Value
Bono = Range("B3").Value

Call Calcular(Sueldo, Bono)

MsgBox "El sueldo sigue siendo: " & Sueldo

End Sub

Sub Calcular(ByVal Sueldo As Double, ByVal Bono As Integer)

Sueldo = Sueldo + Bono
Range("B9").Value = Sueldo

End Sub

Procedimiento VBA con parámetro Opcional

Modificamos los procedimientos anteriores, pero ahora usaremos un tercer parámetro en el procedimiento Calcular, el cual será un bono extra. Como el parámetro es opcional, cuando mandemos llamar a Calcular, tenemos la opción de enviarlo o no enviarlo sin afectar el funcionamiento del procedimiento.

Option Explicit

Sub BonoEmpleado()
Dim Sueldo As Double
Dim Bono As Integer
Dim BonoExtra As Integer

Sueldo = Range("B2").Value
Bono = Range("B3").Value
BonoExtra = Range("B14").Value

'Call Calcular(Sueldo, Bono, BonoExtra)
Calcular Sueldo, Bono, BonoExtra

MsgBox "El sueldo sigue siendo: " & Sueldo

End Sub

Sub Calcular(ByVal Sueldo As Double, ByVal Bono As Integer, Optional Bono2 As Integer)

Sueldo = Sueldo + Bono + Bono2
Range("B15").Value = Sueldo

End Sub

Descarga el archivo de ejemplo

030 – Procedimentos con argumentos ByRef y ByVal – EXCELeINFO.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

 

Pasar imagen a Excel rellenando celdas de color – Excel en 5 minutos

$
0
0

Jordan Goldmeier, MVP de Excel nos regala una macro donde podemos pasar una imagen de Mapa de bits (BMP) a Excel y rellenar las celdas de una hoja de cálculo.

Ver video Pasar imagen de Mapa de bits (BMP) a Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Pasar imagen BMP a Excel

El video fue publicado en el canal Excel TV, y el archivo lo podemos descargar aquí. Seguiremos los siguientes pasos para pasar las imágenes a Excel:

  • Elegimos una imagen de nuestra PC o desde Internet.
  • La abrimos en MS Paint.
  • Elegimos la parte de la imagen que deseemos pasar a Excel.
  • En la sección Imagen elegimos Cambiar tamaño y elegimos porcentaje.
  • Indicamos un porcentaje bajo para tener una imagen pequeña que sea rápido de cargar.

Una vez que tenemos la imagen, en el archivo descargado damos click en el botón 3. Click this shape to load your file into Excel”!

Veremos cómo se va cargando la imagen en la hoja Paint Area.

Descarga el archivo de ejemplo

Make Your Excel Spreadsheet into a Bitmap Image With This Excel Magic Trick

 

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 31 – Creando Funciones y UDF para usar en fórmulas

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos cómo desarrollar funciones en VBA desde cero, tanto para usarse en procedimientos como en celdas de Excel. Cuando desarrollamos funciones que serán usadas en celdas, se les llama UDF o Funciones Definidas por el usuario (User Defined Functions).

Veremos la diferencia entre Procedimientos Sub y Procedimientos de tipo Función. En el capítulo anterior vimos cómo pasar argumentos (ByVal y ByRef) a un procedimiento, haciendo que funcionen similar a las funciones, solo que las funciones se usan para devolver valores únicos o de matriz.

Ver video Capítulo 31 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Qué son las funciones

En VBA una función es un procedimiento que realiza cálculos y devuelve un valor. Las funciones pueden usarse en Procedimientos Sub (macros) o mandarlas llamar desde una celda, siempre y cuando la función no sea privada.

Diferencia entre Procedimientos Sub y Procedimientos de Función

Procedimientos Sub

  • Pueden ser considerados macros.
  • Pueden ser llamados desde otro procedimiento o desde un botón.
  • Se pueden ejecutar con una combinación de celdas.
  • Pueden recibir argumentos.

Funciones

  • Pueden ser llamadas desde otros procedimientos.
  • Devuelven valores únicos o matrices.
  • Pueden llamar desde Formulario y devolver el resultado en un control de TextBox.
  • Se pueden invocar desde celdas de una hoja, de la misma manera que llamamos a las funciones predefinidas en Excel, como SUMA, CONTAR.SI, BUSCARV, etc.
  • Pueden usarse en una fórmula usada en Formato condicional.

Funciones personalizadas UDF (User Defined Function)

Una función personalizada, puede ser pública o privada. Si es pública la podemos invocar desde una celda en Excel, pero si es privada, solo podrá ser llamada desde procedimientos.

Estas funciones las podremos encontrar en el cuadro de diálogo Insertar función, en la categoría Definidas por el usuario y podremos tener una interfaz gráfica para insertar los argumentos.

Cuando ingresamos el sigo de igual “=” en una celda, vamos a poder visualizar las UDF, siempre y cuando el archivo o add-in que las contenga esté abierto. Excel tiene más de 450 funciones, más las que desarrolles.

Una UDF nos permite optimizar cálculos para no repetir código.

Hay que considerar que las UDF son lentas con respecto a las funciones predefinidas en Excel y los archivos que las contengan deben estar habilitados para macros.

Sintaxis de la función

La sintaxis es muy similar a la que tenemos en los Procedimientos SUB

[Public | Private | Friend] [ Static ] Function name [ ( arglist ) ] [ As type ]
[ statements ]
[ name = expression ]
[ Exit Function ]
[ statements ]
[ name = expression ]
End Function

ELEMENTO

DESCRIPCIÓN

Public

Indica que la función es pública. Disponible para todos los procedimientos y hojas de Excel del mismo archivo.

Private

Indica que la función es privada. Solo está disponible en el módulo en el que es declarada.

Friend

Usado en módulos de clase. Indica que el procedimiento de tipo Función es disponible a través del proyecto.

Static

Indica que los valores de la variables locales declaradas en el procedimiento de tipo Función se conservan entre llamadas de procedimientos.

name

Nombre de la función, respetando las reglas de nombres.

arglist

Lista de parámetros que serán enviados como argumentos en la llamada a la función.

type

Tipo de dato devuelto por la Funcion; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no es compatible actualmente), Date, String (excepto la longitud fija), Object, Variant o cualquier tipo definido por el usuario.

statements

Instrucciones que se ejecutarán para realizar los cálculos.

expresión

Devuelve el valor de la función.

Sintaxis de los argumentos de la función

[ Opcional ] [ ByVal | ByRef ] [ ParamArray ] varname [()] [ As type ] [ = DefaultValue ]

Donde:

ELEMENTO

DESCRICIÓN

Optional

Indica que el argumento a pasar es opcional.

ByVal

El argumento se pasa por valor. El procedimiento accede a una copia de la variable por lo que el valor de la variable se mantiene intacto.

ByRef

Es la manera predeterminada en la que se envían los argumentos. Indica que el argumento se pasa por referencia. El procedimiento puede acceder al valor de la variable y lo puede modificar.

ParamArray

Se usa para enviar una matriz de valores.

As type

Indica el tipo de valor que tendrá el parámetro.

varname

Nombre del argumento.

defaultvalue

Cualquier valor o constante. Es válido solo para argumentos opcionales.

Código VBA de las funciones

La siguiente función se llama SumaDos y tiene dos parámetros numero1 y numer2. El valor devuelto por la función será la suma de ambos valores.

Function SumaDos(numero1 As Integer, numero2 As Integer)

SumaDos = numero1 + numero2

End Function

Si usamos la función en celda ingresamos

=SumaDos(A1,A2)

La siguiente macro invocará a la función SumaDos.

Sub Macro()

Dim num1 As Integer
Dim num2 As Integer

num1 = 10
num2 = 20

MsgBox SumaDos(num1, num2)

End Sub

Ahora, la siguiente función se llama ExtraeNumero y nos ayudará a devolver los números que se encuentran en una cadena de texto o en una celda.

Function ExtraeNumeros(Texto As Variant)

Dim Largo As Integer
Dim i As Integer
Dim Valor As String
Dim Valor1 As String

Application.Volatile

Largo = VBA.Len(Texto)

For i = 1 To Largo
    Valor = VBA.Mid(Texto, i, 1)
    If VBA.Asc(Valor) >= 48 And VBA.Asc(Valor) <= 57 Then
        Valor1 = Valor1 & Valor
    Else
    'Nada
    End If
Next i

ExtraeNumeros = Valor1

End Function

En la siguiente macro mandamos llamar la función ExtraeNumero.

Sub LlamarFuncion()

MsgBox ExtraeNumeros("ABC1523DEF34")

End Sub

Si mandamos llamar la función en una celda usamos:

=ExtraeNumeros(A1)

Recomendado:

Aprendamos UDF’s en Excel

Descarga el archivo de ejemplo

031 – Funciones y UDF.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 32 – Funciones sin argumentos, con uno o dos

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial daremos continuidad al tema de Funciones VBA y Funciones personalizadas UDF o User-defined Functions, por sus siglas en inglés.

Veremos algunos ejemplos de funciones sin argumentos, con uno o dos. El ejemplo que contiene dos argumentos, uno de ellos será opcional. En caso de los argumentos opcionales, te mostraré cómo evaluar si el argumento se ingresa o no, usando la función VBA.IsMissing.

Ver video Capítulo 32 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Funciones VBA

Repasemos algunos temas con respecto a las funciones.

  • Una función es un procedimiento que captará argumentos y devolverá un valor o una matriz de valores.
  • Las funciones pueden llamarse desde procedimientos o desde celdas.
  • Existen funciones sin argumentos como HOY o AHORA.
  • Las funciones públicas son disponibles para todos los procedimientos del archivo y para usarse en celdas.
  • Las funciones privadas solo están disponibles en los procedimientos del mismo módulo.

Funciones personalizadas UDF (User Defined Function)

Una función personalizada, puede ser pública o privada. Si es pública la podemos invocar desde una celda en Excel, pero si es privada, solo podrá ser llamada desde procedimientos.

Estas funciones las podremos encontrar en el cuadro de diálogo Insertar función, en la categoría Definidas por el usuario y podremos tener una interfaz gráfica para insertar los argumentos.

Cuando ingresamos el sigo de igual “=” en una celda, vamos a poder visualizar las UDF, siempre y cuando el archivo o add-in que las contenga esté abierto. Excel tiene más de 450 funciones, más las que desarrolles.

Función sin argumentos

Te comparto 3 ejemplos de funciones UDF donde no requerimos argumentos para devolver un resultado. En la primera devolvemos el nombre de la hoja activa, en la siguiente la versión de Excel y en la última mostramos el usuario de Excel, el cual puedes encontrar en las Opciones de Excel.

Option Explicit

Function NombreHoja()
Application.Volatile

NombreHoja = ActiveSheet.Name

End Function

Function Version()
Application.Volatile

Version = Application.Version

End Function

Function Usuario()
Application.Volatile

Usuario = Application.UserName

End Function

Función con un argumentos

En esta función valor a tener como argumento el valor de Ventas y dependiendo la cantidad, vamos a devolver un descuento. Usaremos la sentencia If-Then-Else para evaluar las cantidades y MsgBox para mostrar un mensaje bien elaborado.

Option Explicit

Function Descuento(Ventas)
Application.Volatile

If Ventas < 10 Then
    Descuento = 0
ElseIf Ventas < 20 Then
    Descuento = 0.1
Else
    Descuento = 0.2
End If

End Function

Sub CalcularDescuento()
Dim ValorVentas As Integer
Dim Mensaje As String

ValorVentas = InputBox("Ingrese las ventas", "Ventas")

If ValorVentas = 0 Then Exit Sub

Mensaje = "Las ventas son: " & vbTab & ValorVentas
Mensaje = Mensaje & vbNewLine & "El descuento es: "
Mensaje = Mensaje & vbTab & VBA.Format(Descuento(ValorVentas), "0%")

MsgBox Mensaje, vbInformation, "EXCELeINFO"

End Sub

Función con dos argumentos. Uno opcional

La siguiente función será válida solo para usarse en una celda de Excel. Lograremos que si el usuario ingresa el valor 1, el texto ingresado se convertirá a MAYÚSCULAS, si ingresamos el 2, a minúsculas, y si no se ingresa el parámetro Tipo, se devolverá el texto tal cual. El parámetro Tipo es opcional, por lo que evaluaremos con VBA.IsMissing si el parámetro se ingresa o no.

Option Explicit

Function CTexto(Texto As String, Optional Tipo As Variant)

If VBA.IsMissing(Tipo) Then
    Tipo = 0
    CTexto = Texto
Else
    Select Case Tipo
        Case 1
            CTexto = VBA.UCase(Texto)
        Case 2
            CTexto = VBA.LCase(Texto)
        Case Else
            CTexto = VBA.CVErr(xlErrValue)
    End Select
End If

End Function

Descarga el archivo de ejemplo

032 – Funciones sin argumentos, con uno o dos. Opcionales.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Editar Dashboard de Excel desde PowerPoint en modo presentación

$
0
0

En este tutorial quiero mostrar la manera en la que podemos editar información de nuestros archivos de Excel directamente dese PowerPoint cuando estamos en modo de Presentación con diapositivas.

Lo haremos editando un Dashboard que en otro tutorial vimos cómo desarrollarlo dese cero.

Dashboards en Excel: https://www.youtube.com/watch?v=C-O9QPmL5VU&t=13s

Ver video Editar Dashboard desde PowerPoint

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Insertar Dashboard de Excel en PowerPoint

Tenemos un Dashboard en Excel y deseamos pegar una copia en PowerPoint, y cuya copia nos permita tener una imagen exacta del archivo de Excel que cambie si el archivo cambia.

Realizamos los siguientes pasos:

  • Abrimos nuestro archivo de Excel que contiene el Dashboard.
  • Copiamos la parte que deseemos mostrar en PowerPoint.
  • Abrimos PowerPoint.
  • Nos vamos a la pestaña Inicio > Pegar > Pegado especial.
  • En el Formulario Pegado especial elegimos Pegar vínculo > Objeto Hoja de cálculo de Microsoft Excel.

Se pega una imagen vida del Dashboard que tenemos en Excel.

Editar Dashboard desde PowerPoint

Una vez que tenemos el Dashboard insertado, ahora daremos la instrucción de que al dar clic en el Dashboard en modo de Presentación con diapositivas, se abra Excel para editar el archivo de origen.

  • Damos clic en la imagen del Dashboard.
  • Nos vamos a la pestaña Animaciones > Más > Verbos de acción OLE.
  • Damos clic en Edición.
  • Nos vamos a la pestaña Insertar > Formas > Rectángulo.
  • Seleccionamos la imagen del Dashboard.
  • Nos vamos a la pestaña Animaciones > Desencadenar > Al hacer clic en > Rectángulo.

Para probar, presionamos F5 en PowerPoint y al mostrarse la presentación en diapositivas, damos clic sobre el Dashboard y veremos cómo se abre Excel para modificar el archivo y cualquier cambio hecho en Excel se refleja en PowerPoint.

Descarga el archivo de ejemplo

Dashboard de ventas – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.


Curso Excel VBA y Macros – Cap. 33 – 10 Funciones VBA para el manejo de texto

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

Siguiendo con el tema de funciones, ahora veremos algunas funciones de VBA que nos ayudarán a manejar texto. Recordemos que tenemos funciones predefinidas para usar en celdas, así como funciones VBA que pueden usarse tanto en procedimientos como en celdas.

Este tema estará dividido en 3 partes.

  1. Funciones para el manejo de texto.
  2. Funciones de fecha y hora.
  3. Funciones de conversión y formato.

Ver video Capítulo 33 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Listado de funciones VBA más usadas para el manejo de texto

La siguiente lista nos muestra las 10 funciones VBA para manejo de texto más usadas.

Nombre de la función

Descripción

InStr

Devuelve la posición de una cadena de texto dentro de otra.

LCase

Convierte un texto a minúsculas.

UCase

Convierte un texto a MAYÚSCULAS.

Left

Devuelve cierta cantidad de caracteres desde la izquierda.

Rigth

Devuelve cierta cantidad de caracteres desde la derecha.

Mid

Devuelve cierta cantidad de caracteres dada una posición.

Len

Devuelve el número de caracteres de una cadena de texto

Replace

Reeemplaza una cadena de texto dentro de otra cadena.

StrConv

Devuelve una cadena de texto convertida a minúsculas, MAYÚSCULAS o Nombre propio.

Trim

Elimina espacios excesivos de una cadena de texto

vbNewLine

Inserta una nueva línea de texto en un Cuadro de mensaje MsgBox

vbTab

Añade un espacio de tabulación en un Cuadro de mensaje MsgBox

Código VBA de las macros

Option Explicit

Sub Funciones_de_Texto()

Range("C6").Value = VBA.InStr(Range("C4"), Range("C5"))
Range("C8").Value = VBA.LCase(Range("B8"))
Range("C9").Value = VBA.UCase(Range("B9"))
Range("C10").Value = VBA.Left(Range("b10"), 5)
Range("C11").Value = VBA.Right(Range("b11"), 6)
Range("C12").Value = VBA.Mid(Range("B12"), 11, 5)
Range("C13").Value = VBA.Len(Range("B13"))
Range("C14").Value = VBA.Replace(Range("B14"), "Macros", "VBA")
Range("C15").Value = VBA.StrConv(Range("B15"), vbLowerCase)
Range("C16").Value = VBA.StrConv(Range("B16"), vbUpperCase)
Range("C17").Value = VBA.StrConv(Range("B17"), vbProperCase)
'Range("C18").Value = VBA.Trim(Range("B18"))
Range("C18").Value = Application.WorksheetFunction.Trim(Range("B18"))

MsgBox "Mensaje de prueba" & vbNewLine & "Otro mensaje"
MsgBox "Mensaje de:" & vbTab & "prueba"

End Sub

Descarga el archivo de ejemplo

033 – Funciones VBA para manejo de texto.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 34 – Funciones de Fecha y Hora en VBA

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial daremos seguimiento al tema las funcione más usadas en VBA. Ahora nos toca ver las funciones de Fecha y Hora más usadas en VBA. Recordemos que tenemos funciones predefinidas para usarse en celdas de Excel, funciones UDF o User-Defined Fuctions que podemos usar tanto en celdas como en procedimientos VBA. Además tendremos las funciones dependientes de la biblioteca VBA que podremos usar en cualquier procedimiento o macros.

Este tema estará dividido en 3 partes.

  1. Funciones para el manejo de texto.
  2. Funciones de fecha y hora.
  3. Funciones de conversión y formato.

Ver video Capítulo 34 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Listado de funciones VBA más usadas para el manejo de Fecha y Hora

La siguiente lista muestra las funciones más utilizadas dentro nuestros procedimientos VBA.

Nombre de la función

Descripción

DateSerial

Devuelve una fecha dando como argumentos valores numéricos de año, mes y día

Date

Devuelve la fecha actual

Now

Devuelve la fecha y hora actual

Time

Devuelve la hora del sistema

Day

Devuelve el día de una fecha

Month

Devuelve el mes de una fecha

MonthName

Devuelve el nombre del mes de una fecha, indicando la abreviación

Year

Devuelve el año de una fecha

IsDate

Devuelve si una variable es una fecha

Hour

Devuelve la hora de un valor de tiempo

Minute

Devuelve el minuto de un valor de tiempo

Second

Devuelve el minuto de un valor de tiempo

Weekday

Devuelve el número de día con respecto a una semana, especificando el inicio de la semana

WeekdayName

Devuelve una cadena con el nombre de día con respecto a una semana

Timer

Devuelve el número de segundos desde la media noche. Sirve para contar tiempo transcurrido

DateValue

Convierte una cadena de texto en fecha

DateAdd

Suma días a una fecha especifica. Podemos usar yyyy para años, m para meses, d para días, ww para semanas

Código VBA de las macros

Option Explicit

Sub Funciones_hora_fecha()
Dim Fecha As Date
Dim Hora As Date

Fecha = #12/30/2019#
Hora = #8:00:00 PM#

Range("B3").Value = VBA.DateSerial(2019, 7, 10)
Range("B4").Value = VBA.Date
Range("B5").Value = VBA.Now
Range("B6").Value = VBA.Time
Range("B7").Value = VBA.Day(Fecha)
Range("B8").Value = VBA.Month(Fecha)
Range("B9").Value = VBA.MonthName(VBA.Month(Date), False)
Range("B10").Value = VBA.MonthName(8, False)
Range("B11").Value = VBA.Year(Fecha)
Range("B12").Value = VBA.IsDate(Fecha)
Range("B13").Value = VBA.Hour(Now)
Range("B14").Value = VBA.Minute(Now)
Range("B15").Value = VBA.Second(Now)
Range("B16").Value = VBA.Weekday(Date, vbMonday)
Range("B17").Value = VBA.WeekdayName(3, False, vbMonday)
Range("B19").Value = VBA.DateValue("30/12/2019")
Range("B20").Value = VBA.DateAdd("d", 10, Date)
End Sub

Sub TiempoT()

Dim TiempoInicial As Double
Dim SegundosT As Double

TiempoInicial = VBA.Timer

MsgBox "Clic..."

SegundosT = VBA.Round(VBA.Timer - TiempoInicial, 2)

Range("B18").Value = SegundosT

End Sub

Descarga el archivo de ejemplo

034 – Funciones VBA para manejo de fechas y horas.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Crear copia de seguridad de tus archivos de Excel usando VBA y macros

$
0
0

En este tutorial te muestro una macro que nos ayudará a crear copias de seguridad de nuestros archivos de Excel. Cada que ejecutemos una macro se creará una carpeta que tendrá como nombre la fecha y hora de creación, así tendremos una copia cada vez que deseemos tener una versión de nuestros archivos.

La macro de este tutorial se basa en el trabajo de Andrés Rojas Moncada del canal Excel Hecho Fácil.

Ver video Copias de seguridad de archivos de Excel.

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Cómo tener respaldos de nuestros archivos.

La macro que te muestro creará una carpeta destinada al archivo que contenga la macro, posteriormente se crearán tantas carpetas como veces que se ejecuta la macro. Las copias del archivo se guardarán en carpetas que tienen como nombre la fecha y hora en formato “dd-mm-yyyy-hh-mm-ss”.

Código VBA de la macro

Option Explicit

Sub GuardarArchivoRespaldo()
Dim NombreArchivo, Separador, RutaArchivo
Dim bakCarpeta1, bakCarpeta2, Ruta1, Ruta2

NombreArchivo = Application.ThisWorkbook.Name
Separador = Application.PathSeparator
RutaArchivo = Application.ThisWorkbook.Path

bakCarpeta1 = "bak_" & NombreArchivo
bakCarpeta2 = VBA.Format(VBA.Now, "dd-mm-yyyy-hh-mm-ss")

Ruta1 = RutaArchivo & Separador & bakCarpeta1
Ruta2 = RutaArchivo & Separador & bakCarpeta1 & Separador & bakCarpeta2

If Dir(Ruta1, vbDirectory) <> Empty Then
    'Carpeta existe
    VBA.MkDir (Ruta2)
Else
    'Carpeta no existe
    VBA.MkDir (Ruta1)
    VBA.MkDir (Ruta2)
End If

Application.ThisWorkbook.SaveCopyAs Ruta2 & Separador & NombreArchivo

End Sub

Descarga el archivo de ejemplo

Crear copia de seguridad de archivo – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 35 – Funciones VBA de Conversión y Formato de texto y número

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial daremos seguimiento al tema de las Funciones más usadas en VBA. Ahora toca conocer las funciones de conversión de tipos de valores y formato de texto y número.

Recordemos que tenemos funciones predefinidas para usarse en celdas de Excel, funciones UDF o User-Defined Fuctions que podemos usar tanto en celdas como en procedimientos VBA. Además tendremos las funciones dependientes de la biblioteca VBA que podremos usar en cualquier procedimiento o macros.

Este tema estará dividido en 3 partes.

  1. Funciones para el manejo de texto.
  2. Funciones de fecha y hora.
  3. Funciones de conversión y formato.

Ver video Capítulo 35 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Tipos de valores para variables

En tutoriales anteriores vimos los tipos de valores que podemos utilizar para las variables. El uso correcto de los tipos de las variables nos permite manejar correctamente la memoria utilizada por nuestras macros.

Si bien podemos usar todas nuestras variables de tipo Variant, lo recomendable es definir correctamente los tipos.

El siguiente es un listado de los tipos de variables que podemos usar en nuestras macros.

Tipos de datos para las variables.

Figura 1. Tipos de datos para las variables.

Listado de funciones VBA para conversión y formato

La siguiente es una lista de las funciones más usadas cuando deseamos convertir variables de un tipo a otro, además de poder formatear texto y números.

Nombre de la función

Descripción

CDate

Convierte una expresión en tipo Fecha

Cint

Convierte una expresión en tipo Entero

CLng

Convierte una expresión en Tipo long

Cstr

Convierte una expresión en tipo Cadena de texto

Format

Muestra una expresión en un formato definido

Val

Devuelve un número desde una cadena de texto

FormatNumber

Formatea una expresión con formato de número

FormatCurrency

Formatea una expresión con formato de moneda

FormatDateTime

Formatea una expresión con formato de fecha

FormatPercent

Formatea una expresión con formato de porcentaje

IsNumeric

Valida si una expresión es número

IsDate

Valida si una expresión es fecha

IsEmpty

Valida si una expresión está vacía

IsError

Valida si una expresión devuelve un error

Código VBA de las macros

Sub ConversionesYFormato()

Range("C3").Value = VBA.CDate(Range("B3").Value)
Range("C4").Value = VBA.CInt(Range("B4"))
Range("C5").Value = VBA.CLng(Range("B5"))
Range("C6").Value = VBA.CStr(10) + VBA.CStr(10)
Range("C7").Value = VBA.Format(Range("B7").Value, "$#,##0.00")
Range("C8").Value = VBA.Val(Range("B8").Value)
Range("C10").Value = VBA.FormatNumber(Range("B10").Value, 2)
Range("C11").Value = VBA.FormatCurrency(Range("B11").Value, 2)
Range("C12").Value = VBA.FormatDateTime(Range("B12").Value, vbLongDate)
Range("C13").Value = VBA.FormatPercent(Range("B13").Value, 0)
Range("C14").Value = VBA.IsNumeric(Range("B14").Value)
Range("C15").Value = VBA.IsDate(Range("B15").Value)
Range("C16").Value = VBA.IsEmpty(Range("B16").Value)
Range("C17").Value = VBA.IsError(Range("B17").Value)

End Sub

Descarga el archivo de ejemplo

035 – Funciones VBA para conversión y formato.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Curso Excel VBA y Macros – Cap. 36 – Función para convertir números a letras

$
0
0

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos cómo modificar una de las funciones más solicitadas en Excel, Cómo convertir números a letras en Excel. Tomaremos la función llamada cMoneda que desarrolló mi amigo Otto Javier González del canal Excel y más.

Dicha función nos solicita el argumento del número que deseamos convertir. La mejora que le haremos a la función será añadirle más parámetros que nos ayudarán a elegir el tipo de moneda y la manera en que podemos mostrar los centavos.

Ver video Capítulo 36 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Funciones UDF en Excel

Las funciones personalizadas o UDF (User-defined functions por sus siglas en inglés) son procedimientos que pueden usarse en celdas, formato condicional o ser llamadas desde otros procedimientos, incluso en Formularios.

Función cMoneda para Convertir números a letras en Excel.

La función cMoneda tiene sólo un argumento, Num, o el número que deseamos convertir a letra. Si usamos la función en una celda, obtendremos el siguiente resultado:

95.43 = Noventa y Cinco Dólares Con Cuarenta y Tres Centavos

Función cMoneda2, mejorada

Modificaremos la función cMoneda y la convertiremos en cMoneda2, la cual tendrá 5 parámetros que la convertirán en una función flexible y compatible con casi cualquier tipo de moneda y país.

Argumentos cMoneda2

Argumento

Descripción

Num

El número que se desea convertir a texto.

TipoCambio1

El tipo de moneda en singular. PESO

TipoCambio2

El tipo de moneda en plural. PESOS

Centavos

Opcional. Devuelve el valor de centavos en texto o número. Ejemplo 10.80: 0 = 88/100, 1 = Ochenta y ocho centavos

Denominación

Opcional. En caso de querer mostrar el valor de M.N. (moneda nacional) u otro según el país.

Ejemplo 1

[B4] = cMoneda2(A4,”PESO”,”PESOS”,1,”M.N.”)

95.43 = NOVENTA Y CINCO PESOS CON CUARENTA Y TRES CENTAVOS M.N.

Ejemplo 2

[B5] = cMoneda2(A5,”PESO”,”PESOS”,0,”M.N.”)

95.43 = NOVENTA Y CINCO PESOS 43/100 M.N.

Ejemplo 3

[B6] = =cMoneda2(A6,”PESO”,”PESOS”,1)

95.43 = NOVENTA Y CINCO PESOS CON CUARENTA Y TRES CENTAVOS

Código VBA de la función

El siguiente código deberá ir en un módulo normal.

'========================================================================
' Función: Convertir números a letras
'
' Creado por Otto Javier González
' www.youtube.com/ottojaviergonzalez
' Finalizado el 4 de Julio de 2013
'
' Visual Basic Para Microsoft Excel 2013
' Lista de reproducción del curso en YouTube:
' http://www.youtube.com/playlist?list=PLFNWPvtjBMjtnYLCp8KJwD1Ref7WLCIVZ
'
' Modificada por: Sergio Alejandro Campos, MVP Excel (18-jul-2019)
' Canal de Youtube EXCELeINFO, curso de macros:
' https://www.youtube.com/playlist?list=PLu8wBtXk2ly6-0LtqcC2aj4g6cEnJ-_nN
'========================================================================

Option Explicit

Function cMoneda2(num As Double, TipoCambio1 As String, TipoCambio2 As String, Optional Centavos As Byte, Optional Denominacion As String) As String
Dim nEntero As Long
Dim nDecimal As Double
Dim Texto As String

nEntero = Int(num)
nDecimal = Int(Round((num - nEntero) * 100)) 'Corrección de últimoo momento

Texto = cNumero(nEntero)

' Agrega la moneda
If nEntero = 1 Then
    Texto = Texto + " " + TipoCambio1
    'Texto = Texto + " Dólar"
Else
    If (nEntero Mod 1000000) = 0 Then
        Texto = Texto + " De"
    End If
    Texto = Texto + " " + TipoCambio2
    'Texto = Texto + " Dólares"
End If

'Agrega los centavos
If Centavos = 1 Then
    
    If nDecimal <> 0 Then
        Texto = Texto & " Con " & cNumero(nDecimal)
        If nDecimal = 1 Then
            Texto = Texto & " Centavo"
        Else
            Texto = Texto & " Centavos"
        End If
    End If
    
ElseIf Centavos = 0 Then
    
    If nDecimal <> 0 Then
        Texto = Texto
        If nDecimal = 1 Then
            Texto = Texto & nDecimal & "/100"
        Else
            Texto = Texto & " " & nDecimal & "/100"
        End If
    End If
End If
cMoneda2 = VBA.UCase(Texto) & " " & Denominacion


End Function

Function cNumero(ByVal num As Long) As String
Dim Texto As String

Dim cUnidades, cDecenas, cCentenas
Dim nUnidades, nDecenas, nCentenas As Byte

Dim nMiles As Long
Dim nMillones As Long

cUnidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciseis", "Diecisite", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidós", "Veintitrés", "Veitnicuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
cDecenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
cCentenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")

nMillones = num \ 1000000
nMiles = (num \ 1000) Mod 1000
nCentenas = (num \ 100) Mod 10
nDecenas = (num \ 10) Mod 10
nUnidades = num Mod 10

'Evaluación de Millones

If nMillones = 1 Then
    Texto = "Un Millón" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000), "")
    cNumero = Texto
    Exit Function
ElseIf nMillones >= 2 And nMillones <= 999 Then
    Texto = cNumero(num \ 1000000) + " Millones" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000), "")
    cNumero = Texto
    Exit Function
    
        
    'Evaluación de Miles
    
ElseIf nMiles = 1 Then
    Texto = "Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
    cNumero = Texto
    Exit Function
ElseIf nMiles >= 2 And nMiles <= 999 Then
    Texto = cNumero(num \ 1000) + " Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
    cNumero = Texto
    Exit Function
    
End If

'Evaluación desde 0 a 999

'Casos Especiales
If num = 100 Then
    Texto = cDecenas(10)
    cNumero = Texto
    Exit Function
ElseIf num = 0 Then
    Texto = "Cero"
    cNumero = Texto
    Exit Function
End If


If nCentenas <> 0 Then
    Texto = cCentenas(nCentenas)
End If

If nDecenas <> 0 Then
    If nDecenas = 1 Or nDecenas = 2 Then
        If nCentenas <> 0 Then
            Texto = Texto + " "
        End If
        Texto = Texto + cUnidades(num Mod 100)
        cNumero = Texto
        Exit Function
    Else
        
        If nCentenas <> 0 Then
            Texto = Texto + " "
        End If
        
        Texto = Texto + cDecenas(nDecenas)
    End If
End If


If nUnidades <> 0 Then
    If nDecenas <> 0 Then
        Texto = Texto + " y "
    ElseIf nCentenas <> 0 Then
        Texto = Texto + " "
    End If
    Texto = Texto + cUnidades(nUnidades)
End If

cNumero = Texto

End Function

Descarga el archivo de ejemplo

036 – Función UDF Convertir números a letras – EXCELeINFO.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Viewing all 466 articles
Browse latest View live