Archive

Archive for the ‘Bases de datos’ Category

Nuevas funciones Excel 2013: SI.ND combinada con BUSCARV

November 12, 2012 3 comments

Una de las funciones que vienen con el lanzamiento de Excel 2013 es SI.ND, cuya descripción es: “Devuelve el valor que especificas, si la expresión se convierte en #N/A. De lo contrario, devuelve el resultado de la expresión”.

La función SI.ERROR

Excel 2010 introdujo la función SI.ERROR para devolver un valor especificado, en caso de que la fórmula devuelva #N/A, #¡DIV/0!, #¿NOMBRE?, pero la cuestión es que arrojará un resultado sin detectar cuál fue el error devuelto.

Cómo funciona SI.ND con BUSCARV

La función con la cual se combinará es con la famosa BUSCARV. Dicha función devuelve precisamente #N/A cuando un valor no se encuentra en la lista, lo cual se vuelve de mucha utilidad sin tomamos en cuenta que dicha función es una de las más utilizadas entre los usuarios de Excel.

Animación de la función en ejecución

SI ND

EXCELeINFO add-in: guardar datos filtrados como archivo nuevo

November 4, 2012 1 comment

Esta herramienta publicada en nuestro add-in, permite guardar cualquier resultados de un filtro en un archivo nuevo con extensión .xls, .xlsx o .csv.

Cómo funciona:

Después de realizar nuestro filtro, elegimos la herramienta y nos pedirá confirmación de guardar los datos filtrados como un nuevo archivo. Si aceptamos que continúe, nos mostrará el clásico formulario de Guardar como, donde elegiremos la ubicación de nuevo archivo.

Los datos filtrados se guardarán en otro archivo para así ser manipulados o enviados por correo electrónico.

Animación de la herramienta en ejecución

Guardar datos filtrados

:: Descargar EXCELeINFO add-in 2.3.9

EXCELeINFO add-in: normalizar/unificar registros en bases de datos

November 4, 2012 2 comments

Cuando trabajamos con bases de datos, siempre nos topamos con registros que vienen escritos de manera diferente, pero que muchas veces se refieren a la misma cosa, tal es el caso de apellidos, departamentos. Dicha diferencia en captura provoca que nuestros filtros o tablas dinámicas no sean efectivas.

La herramienta

La herramienta que se incluye en esa versión del add-in intenta resolver el tema de las bases ‘sucias’, permitiendo filtrar todos los datos únicos e identificarlos para unificar los nombres y así normalizar/unificar nuestras bases para un mejor manejo en las distintas herramientas que nos ofrece Excel para manejo de bases de datos.

Cómo funciona

El primer paso que realiza la herramienta es un filtro avanzado sobre la columna elegida, para después llenar el ListBox del formulario y hacer el conteo de cada uno de los registros únicos. Al final podemos elegir los registros a unificar y asignarles la captura que deseemos.

Animación con la herramienta en ejecución

Normalizar bases de datos

:: Descargar EXCELeINFO add-in 2.3.9

Separar nombres y apellidos en Excel 2013 con llenado rápido

November 1, 2012 1 comment

El un artículo anterior publiqué Separar nombre y apellidos en distintas celdas en Excel en el cual compartía 3 fórmulas donde podíamos obtener Nombres, Apellido paterno y apellido materno.

En Excel 2013 se introduce una nueva funcionalidad que es Llenado rápido (Flash fill) el cual nos facilita el proceso de extraer información de celdas, siempre y cuando éstas estén en columnas y tengan la misma estructura.

Cómo se hace

En la imagen de ejemplo tenemos una columna de Nombre completo, la cual vamos a extraer los datos de Nombre, Paterno y Materno.

En la columna de Nombre, ingresamos el nombre de la celda que está a la izquierda. Después en la siguiente fila tecleamos el nombre que está en la siguiente fila y vemos cómo se llena los datos hacia abajo.

Repetimos lo mismo en la siguiente columnas y obtendremos los datos deseados.

Separa nombres y apellidos en 2013

Escuchar música desde Excel con el control WindowsMediaPlayer1

October 21, 2012 1 comment

El objetivo principal de este Post no es mostrar un reproductor de música en Excel, cosa que sería algo extensa de desarrollar por todo lo que implicaría los diferentes tipos de archivos de música y listas de reprodución.

El objetivo de este Post es mostrar como Excel puede manipular archivos de sonido mediante el control WindowsMediaPlayer, disponible en la librería de controles de Windows.

Al momento de insertar el control de Windows Media Player, ya podemos disponer de todas sus propiedades y métodos, como se muestra en la imagen.

image

Cómo funciona

El formulario contiene un ListBox donde se contendrá todos los archivos de audio en formato MP3 y WMA de la carpeta y sucarpetas que se elijan.

Posteriormente los botones de Anterior, Reproducir/Pausa, Parar y Siguiente se activarán para cumplir con las funciones de un reproductor de música.

En la parte inferior se mostrará el Título, artista, álbum, ubicación del archivo, género y duración de la canción. Aunque se podrán mostrar más etiquetas dependiendo de lo que se desee ver, tales como:

Sub Test()
    With frmAudio
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Name")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("author")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Title")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Album")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("copyright")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Artist")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Genre")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Bitrate") / 1000 & " kbps"
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("Abstract")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("bitRate")
        .WindowsMediaPlayer1.currentMedia.getItemInfo ("duration")
    End With
End Sub

Formulario en ejecución

image

Código del formulario

Private Sub btnAnterior_Click()
    On Error Resume Next
    Me.ListBox1.ListIndex = Me.ListBox1.ListIndex - 1
    Call Reproducir
    On Error GoTo 0
End Sub
'
Private Sub btnParar_Click()
    Me.WindowsMediaPlayer1.Controls.stop
    Me.btnReproducir.Caption = "Reproducir"
End Sub
'
Private Sub btnReproducir_Click()
    Items = Me.ListBox1.ListCount
    Cuenta = 0
    For i = 0 To Items - 1
        If Me.ListBox1.Selected(i) Then
            Cuenta = Cuenta + 1
        End If
    Next i
'
    If Cuenta = 0 Then
        Me.ListBox1.ListIndex = Me.ListBox1.ListIndex + 1
        Call Reproducir
    Else
        If Me.WindowsMediaPlayer1.playState = wmppsPaused Then
            Me.WindowsMediaPlayer1.Controls.Play
            Me.btnReproducir.Caption = "Pausa"
        Else
            If Me.WindowsMediaPlayer1.playState = wmppsPlaying Then
                Me.WindowsMediaPlayer1.Controls.pause
                Me.btnReproducir.Caption = "Reproducir"
            Else
                Call Reproducir
            End If
        End If
    End If
End Sub
'
Private Sub btnSiguiente_Click()
    On Error Resume Next
    Me.ListBox1.ListIndex = Me.ListBox1.ListIndex + 1
    Call Reproducir
    On Error GoTo 0
End Sub
'
Private Sub CommandButton1_Click()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = Application.DefaultFilePath & " \ "
        .Title = "EXCELeINFO - Seleccionar carpeta"
        .Show
        If .SelectedItems.Count = 0 Then
        Else
            Me.txtRuta.Value = .SelectedItems(1)
            frmAudio.ListBox1.Clear
            Call Listar
        End If
    End With
    Call EstadoBotones
End Sub

Sub Listar()
    If Me.txtRuta.Value = "" Then
        MsgBox "Debe seleccionar una ruta.", vbExclamation, AddIn
    Else
        Call ListFiles
    End If
End Sub
'
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Call Reproducir
    Me.btnReproducir.Caption = "Pausa"
End Sub
'
Private Sub UserForm_Initialize()
    Call EstadoBotones
    With Me
        .WindowsMediaPlayer1.Visible = False
        .lblTrack.Visible = False
        .lblTipo.Visible = False
        .lblUbicacion.Visible = False
        .ListBox1.ColumnWidths = "0 pt;170 pt;100 pt;200 pt"
    End With
End Sub

El código completo se podrá consultar dentro del mismo archivo.

:: Descargar EXCELeINFO – escuchar música en Excel con WindowsMediaPlayer1.xlsm

Eliminar filas en Excel que no cumplan una condición, largo, contenido, color

October 10, 2012 1 comment

Este tip me ha ayudado a depurar bases de datos donde, por ejemplo, necesito que en la columna Número telefónico sólo haya números con un largo de 10 caracteres.

Cómo funciona

En la imagen de ejemplo tenemos una tabla con 2 columnas: NOMBRE, TELEFONO. Elegimos la celda B2 y corremos la siguiente macro:

Sub EliminarFilas()
'Hacemos un bucle Do While el cual se ejecutará hasta que haya una celda vacía
Do While ActiveCell.Value <> ""
    'La condición es que si el largo es diferente a 10...
    If Len(ActiveCell) <> 10 Then
        '... elimina la fila
        ActiveCell.EntireRow.Delete
        ActiveCell.Offset(-1, 0).Select
    Else
    End If
    'Recorre una fila hacia abajo
    ActiveCell.Offset(1, 0).Select
Loop
End Sub

Resultado

Sólo quedarán las filas donde haya habido números a 10 dígitos

image

Otras condiciones

La macro anterior tiene la siguiente línea la cual es la que condiciona el largo de la celda.

If Len(ActiveCell) <> 10 Then

Pero también puede ser que queramos condicionar contenido o formato de la celda.

Ejemplos de otras codiciones:

'Eliminia diferente a largo de 10
If Len(ActiveCell) <> 10 Then

'Elimina diferentes a 1234567890
If ActiveCell.Value <> "1234567890" Then

'Eliminar los que tengan fondo rojo
If ActiveCell.Interior.ColorIndex = 3 Then

'Eliminar que comiencen con ABC""
If Mid(ActiveCell.Value, 1, 3) = "ABC" Then

Actualización: modificar tabla de Excel mediante ListBox con datos filtrados

September 30, 2012 17 comments

El 7-jul-12 había publicado un ejemplo que te permite pasar datos de una tabla de Excel a un objeto ListBox para después hacer modificaciones a los registros, así como poder eliminar los mismos.

En esta actualización añado un TextBox donde se podrá ingresar un texto para que los datos mostrados sean filtrados por ese texto.

Sugerencia: el ejemplo puede ser modificado para que tenga más prestaciones, lo cual podría convertirse es una aplicación en forma. Yo sólo dejo el ejemplo básico con el afán de que alguien lo pueda modificar a sus necesidades.

Formulario

image

Código del botón filtrar

Private Sub CommandButton5_Click()
On Error GoTo Errores
If Me.txtFiltro1.Value = "" Then Exit Sub
    Me.ListBox1.Clear
    j = 1
    For i = 1 To 18
        If Cells(i, j).Offset(0, 2).Value = CInt(Me.txtFiltro1.Value) Then
        Me.ListBox1.AddItem Cells(i, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
Else
End If
Next i
Exit Sub
Errores:
MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO"
End Sub

:: Descargar el ejemplo