lunes, 23 de noviembre de 2015

Macro para transformar datos de horizontal a vertical

En este video explico como utilizar la macro que sirve para transformar información que se encuentra de manera horizontal a vertical, esto es util cuando nos pasan los datos en columnas hacia la derecha y nos cuesta mucho darle un formato de base de datos.





Les comparto el link para que puedan descargarlo

jueves, 5 de noviembre de 2015

Macro para crear indice de hojas en excel

Cuando tenemos muchas hojas en nuestro libro de excel a veces necesitamos poner un vinculo a cada hoja desde una hoja principal para poder dirigirnos a cada una de ellas, esto se llama crear indice de hojas de excel, pero hacerlo de forma manual tomaría mucho tiempo si se tratara de varias hojas. Existe una manera mucho más rápida de hacerlo con tan solo un clic, y esto se logra usando programación vba o también llamado macro. 

Pasos previos

Debemos tener un libro con 7 hojas la primera sera la hoja "Indice" en la cual se generarán los indices de cada hoja y las 6 restantes tendrán el nombre de cada mes  desde enero hasta junio.
En la celda A1 de la hoja Indice pondremos el texto "Lista de hojas" que sera nuestra cabecera, y de allí para abajo se almacenaran los indices de cada hoja.



Crear macro para insertar el código

Nos dirigimos  al entorno de programación vba (Visual basic para Aplicaciones) presionando las teclas Alt+F11, luego en el menú le damos clic en Módulo.

Dentro del modulo pegaremos el siguiente código:

Sub Crear_Indice_Hojas()
Fila = 1
For Each Hoja In Worksheets
    ' Agregar vinculo a cada hoja del mes
    If Hoja.Name <> "Indice" Then
        With Worksheets("Indice")
            .Hyperlinks.Add Anchor:=.Cells(Fila, 1), Address:="", _
            SubAddress:=Hoja.Name & "!A1", TextToDisplay:=Hoja.Name
            'Agregar vinculo de retorno a la hoja indice
        End With
        
        With Worksheets(Hoja.Name)
            .Hyperlinks.Add Anchor:=.Cells(1, 2), Address:="", _
            SubAddress:="Indice!A1", TextToDisplay:="Indice"
        End With
    End If
    Fila = Fila + 1
Next
End Sub


Para usar el código que hemos programado simplemente debemos seleccionar la hoja "Indice" y presionamos la combinación de teclas Alt + f8 y ejecutar la macro "Crear_Indice_Hojas".


Una vez ejecutada la macro nos agrega dentro de la hoja "Indice" los nombres de cada hoja del mes en una lista a partir de la celda A2.



También se agrega un vinculo de retorno hacia la hoja "indice" en cada Hoja de mes en la celda B1, si deseamos modificar la posición del vinculo, dentro del código deberíamos modificar esta parte: cells(1,2) donde 1 es la posición de la fila y 2 la posición de la columna por la celda que queramos.



With Worksheets(Hoja.Name)
            .Hyperlinks.Add Anchor:=.Cells(1, 2), Address:="", _
            SubAddress:="Indice!A1", TextToDisplay:="Indice"
        End With




Finalmente guardamos nuestro libro con el tipo "Libro de excel habilitado para macros"
De una manera sencilla nos ahorramos mucho tiempo en crear los indices para nuestras hojas de excel.

Desde aquí puedes descargar el archivo de ejemplo 


miércoles, 4 de noviembre de 2015

Funcion para sumar digitos de un numero en excel vba

Vamos a crear una función para sumar dígitos de un numero en excel vba la cual la realizaremos usando vba (Visual basic para aplicaciones)


Ingresaremos a nuestro editor de vba y agregamos un modulo en el cual pegaremos el siguiente código que esta explicado en los comentarios.

Function SumarDigitos(Numero As Double)
'Recorrer lac cantidad de digitos que tiene el numero
For i = 1 To Len(Numero)
    'Almacenar la suma en la funcion SumarDigitos
    SumarDigitos = SumarDigitos + Val(Mid(Numero, i, 1))
Next
End Function

Para usar la función debemos dirigirnos a cualquier celda de nuestra hoja y escribir la funcion
=SumarDigitos(Numero) donde Numero es un valor numerico o referencia a la celda de la cual se desea sumar sus digitos.

Veamos el ejemplo

Función para sumar los dígitos de un número

Se debe tomar en cuenta lo siguiente:
Muestra cero cuando se quiere sumar valores que no sean numéricos, como caracteres especiales o letras.
Si se ingresa un numero negativo, este no se toma en cuenta.









sábado, 31 de octubre de 2015

Registro de productos desde un formulario vba hacia una hoja de excel

En este tutorial les voy a enseñar como realizar el registro de productos desde un formulario hacia una hoja de excel.

El formulario cuenta con el boton nuevo que nos permite generar un codigo autonumerico para la columna codigo de producto, un boton grabar el cual primero valida que los datos a ingresar sean correctos y luego inserta los valores del formulario hacia la hoja de productos y un boton salir el cual cierra el formulario.

Se ha tratado que los controles utilizados para el ingreso de informacion sean los basicos como el label, textbox y combobox.

Este tutorial consta de dos videos secuenciales.

Video # 1 - Diseñando el formulario de ingreso de productos




Video # 2 - Programando el formulario de ingreso de productos.

El formulario terminado lo pueden descargar desde este link.

jueves, 15 de octubre de 2015

Macro en excel para convertir texto a mayúscula, minúscula y nombre propio

Macro en excel para convertir texto a MAYÚSCULA, minúscula y Nombre Propio
Actualmente en excel existen estas funciones, pero la limitación es que si tenemos varias celdas (unas 1000 celdas por ejemplo) deberíamos convertirlas en otras celdas y luego reemplazarlas para que surjan efecto.



Lo que haremos con estas macros sera convertirlas en el mismo lugar donde se encuentran con un solo paso.

Y bien pondremos los códigos vba de cada una.

Convertir a mayúsculas

Sub Mayusculas()
Application.ScreenUpdating = False
For Each celda In Selection
    celda.Value = UCase(celda)
Next
Application.ScreenUpdating = True
End Sub

Convertir a minúsculas

Sub Minusculas()
Application.ScreenUpdating = False
For Each celda In Selection
    celda.Value = LCase(celda)
Next
Application.ScreenUpdating = True
End Sub

Convertir a Nombre propio

Sub NombrePropio()
Application.ScreenUpdating = False
For Each celda In Selection
    celda.Value = WorksheetFunction.Proper(celda)
Next
Application.ScreenUpdating = True
End Sub

Para utilizarlo, deben seleccionar el rango de celdas que desean convertir y luego ejecutar el código respectivo y verán que da el resultado esperado.

miércoles, 14 de octubre de 2015

Ingreso de datos desde formulario vba en una hoja de excel

Cuando deseamos ingresar información a una hoja de excel mediante un formulario vba. podemos hacerlo de la siguiente manera.

Abrimos un nuevo libro de excel y creamos una hoja y la nombraremos "Datos", dentro de ella tendremos las siguientes columnas: Código,Nombres y ciudad como se muestran en la siguiente imagen.

El objetivo es llenar información en la hoja "DATOS" según lo que vayamos ingresando en el formulario, este tendrá las cajas de texto y botones que permitirán el ingreso de información mas ordenada y validada.

Para lo cual nos dirigiremos al entorno de programacion VBA (Presionamos las teclas ALT + F11) e insertamos un userform al cual le agregaremos los siguientes controlesy le asignaremos los valores indicados de sus propiedades.

Orden  Control                Caption                                          Name
1           Label                    Ingresar informacion de clientes    Por defecto
2           Label                    Código                                            Por defecto
3           Label                    Nombres                                         Por defecto
4           Label                    Ciudad                                            Por defecto
1           CommandButton  Registrar                                        btnRegistrar
2           CommandButton  Cerrar                                             btnCerrar
1           Textbox                (Vacio)                                           txtCodigo
2           Textbox                (Vacio)                                           txtNombres
3           Textbox                (Vacio)                                           txtCiudad
El formulario quedara como muestra la siguiente imagen.


Una vez diseñado el formulario pasaremos a programarlo para que nos permita insertar informacion dentro de nuestra hoja "DATA"

Colocamos el siguiente código en el evento clic del botón Registrar.

Private Sub btnRegistrar_Click()
Dim uFila As Integer '
'Validar que los campos a registrar no se encuentren vacios
If Trim(txtCodigo.Text) = "" Then
    MsgBox "Ingrese un valor en el campo Código", vbExclamation, "Validación"
    txtCodigo.SetFocus
    Exit Sub
End If
If Trim(txtNombres.Text) = "" Then
    MsgBox "Ingrese un valor en el campo Código", vbExclamation, "Validación"
    txtNombres.SetFocus
    Exit Sub
End If
If Trim(txtCiudad.Text) = "" Then
    MsgBox "Ingrese un valor en el campo Código", vbExclamation, "Validación"
    txtCiudad.SetFocus
    Exit Sub
End If
With Sheets("DATOS")
 'Obtiene la ultima posicion de datos de la hoja Datos + 1
    uFila = .Range("A" & Rows.Count).End(xlUp).Row + 1
    'Registrar datos del formulario en la hoja DATOS
    .Cells(uFila, 1).Value = txtCodigo.Text
    .Cells(uFila, 2).Value = txtNombres.Text
    .Cells(uFila, 3).Value = txtCiudad.Text
End With
Call Limpiar 'Llama a la subrutina para limpiar los textbox
End Sub

El codigo anterior utiliza una subrutina para limpiar los campos del formulario que es la siguiente y la tenemos que pegar fuera del boton registrar:

'Subrutina creada para limpiar campos del formulario
Sub Limpiar()
txtCodigo.Text = ""
txtNombres.Text = ""
txtCiudad.Text = ""
txtCodigo.SetFocus
End Sub

Luego dentro del evento clic del botón cerrar colocamos el código para cerrar el formulario.

Private Sub btnCerrar_Click()
'Cerrar el formulario
End
End Sub
Ahora para poder abrir el formulario e ingresar información de manera mas facil, podemos ingresar una auto forma dentro en nuestra hoja  Datos. Nos dirigimos a la pestaña insertar y en el grupo ilustraciones damos clic en formas e insertamos in rectángulo, Le agregamos el texto "Formulario"

Posteriormente nos dirigimos al entorno de programación e insertamos un modulo y pegamos el siguiente código:
Sub AbrirForm()
UserForm1.Show
End Sub
Entonces, le damos clic derecho al botón creado en la hoja excel y le damos clic en "asignar macro" y elegimos la macro llamada "AbrirForm". Esto permitirá que al darle clic al botón formulario se nos muestre el formulario sin necesidad de ingresar al código.

Finalmente guardamos nuestro archivo de excel y en el tipo de archivo elegimos Libro de excel habilitado para macros

De esta manera hemos realizado el ingreso de información desde un formulario en vba a una hoja de excel. Espero les haya sido de utilidad.

Puedes descargar el código desde aquí.

miércoles, 5 de agosto de 2015

Filtrar datos que contienen tildes en excel vba

En excel podemos realizar filtro de datos para mostrar los datos que queremos de un cierto rango de datos.
En esta oportunidad tenemos información en  nuestra columna "A" entre los cuales hay algunas palabras que contienen datos con tildes


Nuestro objetivo es mediante una macro en vba filtrar aquellos datos que tengan tilde. y que quede como esto.
Para eso crearemos un modulo en nuestro entorno de programacion vba y pegamos el siguiente código



Sub FiltrarTildes()
Range("A1:A11").Interior.Color = xlNone
For Each celda In Range("A1:A11")
    pos = InStr(1, celda, "á", vbTextCompare) + _
    InStr(1, celda, "é", vbTextCompare) + _
    InStr(1, celda, "í", vbTextCompare) + _
    InStr(1, celda, "ó", vbTextCompare) + _
    InStr(1, celda, "ú", vbTextCompare)
    If pos > 0 Then
         celda.Interior.Color = vbWhite
    End If
Next
ActiveSheet.Range("A1:A11").AutoFilter field:=1, Criteria1:=RGB(255, 255, 255), Operator:=xlFilterCellColor
End Sub


Este codigo busca las tildes dentro de nuestro rango de datos ( A1:A11)  y pinta de color blanco la celda donde encuentra una tilde.
Posteriormente se filtran los datos que tengan el color de fondo de blanco rojo.
Y de esa manera se muestran los datos que contienen tildes.

En este enlace les comparto el archivo de ejemplo 

Cargar multiples archivos txt en SSIS

 Fuentes Archivos planos Descargar AQUÍ los archivos Consulta SQL de creacion de tabla Despacho en SQL Server CREATE TABLE [dbo].[Despacho]...