Mostrando las entradas con la etiqueta Consolidar Datos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Consolidar Datos. Mostrar todas las entradas

miércoles, noviembre 11, 2009

Comparación rápida de tablas con Datos-Consolidar

Una tarea común en Excel es comparar tablas (o listas) para encontrar diferencias o cambios. En varias notas de este blog hemos mostrado distintas técnicas para hacerlo. Existen varios complementos (Add Ins), algunos gratuitos, para este tipo de tareas.

Hoy mostraremos un pequeño truco.

Cuando queremos comparar qué datos han sido agregados, quitados o cambiados, una posibilidad es usar funciones de búsqueda como BUSCARV o COINCIDIR. Pero esta técnica tiene el inconveniente que sólo puede encontrar lo que existe en la lista de búsqueda o informarnos que lo que buscamos no se encuentra (o no coincide) con un resultado #NA.

Con Datos-Consolidar podemos ir más lejos. Supongamos que recibimos un reporte de ventas y unos días más tarde una segunda versión.




comparar datos con Excel
comparar datos con Excel














Como podemos apreciar, en el informe 1 faltan las sucursales 3, 4 y 5; también los datos de las sucursales 1, 2 y 9 son distintos.

El primer paso que damos es cambiar el encabezamiento de la columna B en ambas hojas. En lugar de Ventas pondremos Ventas1 y Ventas2 respectivamente.

El segundo paso es agregar una tercer hoja, “comparación” (podemos darle cualquier nombre que queramos). Seleccionamos la celda A1 de la nueva hoja y abrimos el menú Datos-Consolidar


comparar datos con Excel

En el formulario que se abre marcamos las opciones “Fila Superior” y “Columna Izquierda” de “Usar Rótulos en”; en la ventanilla “Examinar” seleccionamos el rango relevante de la hoja Informe1



Apretamos el botón Agregar y seleccionamos el rango relevante en la hoja Informe2


comparar datos con Excel

Volvemos a apretar Agregar y luego Aceptar. Excel crea en forma automática esta tabla




Podemos ver con facilidad con facilidad todos los cambios entre ambas listas. Con unas fórmulas sencillas tenemos en segundos un informe detallado de las diferencias



comparar datos con Excel

Una complicación puede surgir cuando tenemos más de una columna descriptiva a la izquierda de los datos que queremos comparar. Por ejemplo, si en nuestras tablas además de las sucursales también existe un campo (columna) con la zona



Como Excel consolida en referencia a la columna izquierda, el detalle de las sucursales no es tomado en cuenta. La solución es crear una columna auxiliar concatenando los valores de ambos campos

comparar datos con Excel

Enseguida explicaremos por qué separamos los valores con una coma. Ahora volvemos al proceso de consolidar partiendo de la columna auxiliar



El resultado es el siguiente

comparar datos con Excel

La coma que hemos agregado en la concatenación nos ayuda a separar la columna auxiliar en las dos originales usando Datos-Texto en columnas.

Primero insertamos una columna en blanco entre las columnas A y B


Luego seleccionamos el rango con valores en la columna A y usamos el menú Datos-Texto en columnas con la opción de separadores “coma”



El resultado:

comparar datos con Excel


Todo lo que nos queda por hacer es agregar las fórmulas y los formatos que queramos.



Technorati Tags:



viernes, julio 17, 2009

Transferir datos de Excel a Access - tercera nota

En las notas anteriores vimos cómo transferir datos de Excel a Access manualmente y programáticamente.

La necesidad de usar Access surge como una de las soluciones posibles cuando queremos, por ejemplo, consolidar datos de varias hojas en una única base de datos para generar a partir de ella una tabla dinámica.
Si el total de filas a consolidar supera el límite de una hoja de Excel (hasta la versión 2003 incluida, 65536 filas) no podemos almacenar los datos consolidados en una única hoja.
Si trabajamos con Excel 2007 podemos almacenar más de un millón de filas en una hoja, lo cual nos exime de tener que usar herramientas externas a Excel. Pero como más del 50% de los usuarios usa versiones anteriores a Excel 2007, almacenar datos en Access es una buena solución.

En las soluciones que muestro en las notas mencionadas suponemos que Access está instalado en la máquina del usuario. Por supuesto, éste no es siempre el caso y en esta nota mostraremos como usar Access como recipiente para nuestros datos aún cuando no esté instalado en nuestra máquina.

Empecemos por aclarar que los archivos con formato .mdb no requieren la presencia de Access para poder ser utilizados. Estos archivos están asociados con el Microsoft Jet Database Engine, que está incluido en el paquete de Office. Si bien este componente ha sido abandonado por Microsoft, sigue siendo vigente por motivos de compatibilidad.

Nuestra meta es crear dos rutinas, una para crear el archivo “.mdb” y otra para almacenar los datos de la hoja u hojas Excel en la tabla.

Nuestro primer paso es crear una referencia a

* Microsoft Ext. ADO 2.5 for DDL Security (o posteriores).
* Microsoft ActiveX Data Object 2.5 Library (o posteriores).
en el editor de VB, en el menú Tools—References



datos de Excel a Access

Un detalle a tomar en cuenta es que las macros que mostraré más adelante están construidas para el ejemplo específico de esta nota y hay que editarlas para adaptarlas a otros usos.
En nuestro ejemplo tenemos un cuaderno Excel con tres hojas. Cada hoja contiene datos de tres distintos años (2005, 2006 y 2007) que queremos consolidar en una única hoja para construir a partir de ella una tabla dinámica.
La rutina para crear el archivo “.mdb” con una tabla para almacenar los datos es la siguiente:

Option Explicit

Const dataSource As String = "provider=microsoft.jet.oledb.4.0;" _
& "data source=d:\BaseDeDatos.mdb"
Const tableName As String = "datos_export"

Sub crearDB()
Dim catalog As ADOX.catalog
Dim new_table As ADOX.Table


'crear la base de datos

Set catalog = CreateObject("adox.catalog")
catalog.Create dataSource

' crear la tabla para contener los datos

Set new_table = CreateObject("adox.table")
new_table.Name = tableName
new_table.Columns.Append "mes", adDate
new_table.Columns.Append "pais"
new_table.Columns.Append "suma", adDouble
catalog.Tables.Append new_table

End Sub

En la parte superior del módulo, antes de la rutina “crearDB” hemos definido dos constantes. Lo hacemos de esta manera ya que también en la segunda rutina haremos uso de estas constantes.
Esta macro crea una base de datos Access (BaseDeDatos.mdb) con una tabla (datos_export)

datos de Excel a Access

Ahora tenemos que exportar los datos de la hoja activa al la tabla “datos_export”, lo que hacemos con esta macro:

Sub AgregarDatos()
' exporta los datos de la hoja activa a una tabla de Access
' este procedimiento es especifico para el ejemplo.
' Para otros usos hay que adaptarlo

Dim cn As ADODB.Connection, rs As ADODB.Recordset, fila As Long

Set cn = New ADODB.Connection
cn.Open dataSource

Set rs = New ADODB.Recordset
rs.Open tableName, cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
fila = 2 ' la primer fila en la hoja despues de los encabezamientos

Do While Len(Cells(fila, 1)) > 0
With rs
.AddNew
.Fields("mes") = Range("A" & fila).Value
.Fields("pais") = Range("B" & fila).Value
.Fields("suma") = Range("C" & fila).Value
.Update
End With
fila = fila + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub


Esta rutina es la misma que hemos usado en la segunda nota de la serie, adaptada a nuestro ejemplo.


Ahora activamos la hoja cuyos datos queremos exportar y corremos la macro para cada una de las hojas que queremos consolidar.


A esta altura de los acontecimientos tenemos un archivo Access con un tabla que contiene los datos de las hojas (podemos ver que el tamaño del archivo se ha incrementado)

datos de Excel a Access

Ahora podemos crear la tabla dinámica usando la opción Fuente de datos Externa

datos de Excel a Access

En el segundo paso creamos una nueva fuente de datos, que en nuestro ejemplo llamaremos “consolidarMdb” usando el driver de Access

datos de Excel a Access


datos de Excel a Access


datos de Excel a Access


datos de Excel a Access

Después de apretar Connect, apretamos OK con lo cual hemos creado la nueva conexión. De aquí en adelante seguimos los pasos del asistente tal como hemos mostrado en esta nota.


El resultado:

datos de Excel a Access




Technorati Tags:

jueves, junio 11, 2009

Transferir datos de Excel a Access – segunda nota.

En la nota anterior vimos como transferir datos de Excel a Access manualmente usando los mecanismos nativos de Access.
Otra alternativa es exportar los datos de Excel a Access programáticamente, es decir usando Vba.

Para nuestro ejemplo usaremos nuevamente el archivo de la nota anterior.

En la nota anterior usamos los mecanismos de Access para importar los datos de Excel.
Al realizar la tarea con Vba haremos el camino a la inversa, decir crearemos una conexión a Access desde Excel. Esto lo haremos usando objetos de la ADO library (ADO = ActiveX Data Objects).

Antes de sumergirnos en los vericuetos del código, una observación importante: para poder usar las funciones de ADO en Excel debemos primero crear una referencia con el menú Tools-Reference del editor de Vb



Transferir datos de Excel a Access

Como en el ejemplo anterior, empezamos por crear una base de datos que contiene una tabla a la cual queremos exportar los datos de Excel. Nuestra base de datos (bd1.mdb) contiene la tabla Ventas que por ahora está vacía

Transferir datos de Excel a Access

Sin entrar demasiado en detalles técnicos, podemos describir la tarea de la siguiente manera:

# - creamos una conexión a la base de datos

#- definimos en qué tabla de la base de datos queremos poner los datos

# - definimos un objeto que contenga los datos a transferir (recordset)

# - definimos donde se encuentran los datos a transferir (en nuestro ejemplo el cuaderno tiene dos hojas con datos)

# - transferimos los datos

He agregado la hoja Parámetros en la cual podemos definir donde se encuentra la base de datos, cuál es la tabla a la cual queremos copiar los datos y en qué cuaderno se encuentran. De esta manera, podemos controlar los parámetros del código con facilidad.
Transferir datos de Excel a Access

Como ven he agregado también la línea a partir de la cual hay que transferir los datos de la hoja. En general los datos empiezan en la fila 2 (la 1 está ocupada por los encabezamientos). También podemos elegir de qué hoja pasar los datos, con una lista desplegable en la celda B3.
El código de la macro es el siguiente

Sub ExcelaAccess_ADO()

Dim Conn As ADODB.Connection, RecSet As ADODB.Recordset
Dim fila As Long, primerFila As Integer, ultimaFila As Long, iX As Long
Dim dataSource As String, Tabla As String
Dim wsName As String


'definimos los parametros que seran usados por el codigo

dataSource = Sheets("parametros").[B1]
Tabla = Sheets("parametros").[B2]
wsName = Sheets("parametros").[B3]
primerFila = Sheets("parametros").[B4]


' establecemos la conexion a la base de datos

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & _
dataSource & ";"

' definimos un recordset
Set RecSet = New ADODB.Recordset
RecSet.Open Tabla, Conn, adOpenKeyset, adLockOptimistic, adCmdTable

ultimaFila = WorksheetFunction.CountA(Sheets(wsName).Range("A:A"))

For iX = primerFila To ultimaFila 'mientras que la celda la columna A
'tenga un valor transferimos la fila
With RecSet
.AddNew
.Fields("Factura") = Sheets(wsName).Cells(iX, 1).Value
.Fields("Fecha") = Sheets(wsName).Cells(iX, 2).Value
.Fields("Producto") = Sheets(wsName).Cells(iX, 3).Value
.Fields("Descripcion") = Sheets(wsName).Cells(iX, 4).Value
.Fields("Cantidad") = Sheets(wsName).Cells(iX, 5).Value
.Fields("Precio") = Sheets(wsName).Cells(iX, 6).Value
.Fields("Total") = Sheets(wsName).Cells(iX, 7).Value
.Update
End With
Next iX


RecSet.Close
Set RecSet = Nothing
Conn.Close
Set Conn = Nothing
End Sub



Este código debe ponerse en un módulo común de Vba.

lunes, junio 08, 2009

Transferir datos de Excel a Access – primera nota.

Después de escribir la nota sobre cómo consolidar datos de más de dos cuadernos con MS Query, decidí que había llegado el momento de mostrar cómo podemos transferir datos de una hoja de Excel a una tabla de Access. Usar Access es una solución práctica cuando nuestra tabla de datos supera el límite de Excel (para las versiones 97-2003) de 65536 filas.

En esta nota mostraremos que no hay motivo para sentirse inhibido de usar Access, también si no estamos del todo familiarizados con su uso.

Básicamente hay dos caminos posibles para transferir los datos: manualmente y programáticamente (Vba). Esta nota se ocupa de cómo transferir datos de Excel a Access manualmente. Para poder hacerlo necesitamos, obviamente, que Access esté instalado en nuestra máquina (o servidor).

Para nuestro ejemplo consideraremos un cuaderno Excel con dos hoja. La primera contiene ventas del mes de abril y la segunda del mes de mayo. Por motivos de claridad usamos pocos datos.



Transferir datos de Excel a Access

El primer paso es abrir Access y crear una base de datos en blanco

Transferir datos de Excel a Access

En nuestro ejemplo aceptamos el nombre propuesto por Access (bd1), pero podemos darle cualquier otro nombre, preferentemente más significativo.


Una vez creada la base de datos veremos esta pantalla

Transferir datos de Excel a Access

Seleccionamos con un clic Tablas en el área de Objetos y abrimos el menú contextual (clic con el botón derecho del mouse); aquí seleccionamos la opción Importar.

Transferir datos de Excel a Access

En el diálogo que se abre elegimos Excel en Tipo de Archivo y seleccionamos el cuaderno que contiene la hoja que queremos importar.

Transferir datos de Excel a Access

En nuestro ejemplo Excel detecta que hay dos hojas en el cuaderno. Elegimos “abril” y apretamos Siguiente

Transferir datos de Excel a Access

Ahora debemos definir si la primer fila es contiene títulos. En caso afirmativo los títulos son usados como nombres de los campos de la tabla.

Transferir datos de Excel a Access

En este paso debemos definir donde guardar los datos. En nuestro caso no hemos creado ninguna tabla así que la opción es “en una nueva tabla”.

El próximo paso nos permite definir distintas opciones para los campos. En nuestro ejemplo, sencillamente seguimos adelante apretando “Siguiente”.

Transferir datos de Excel a Access

Ahora podemos definir claves principales (índices) para la tabla. Para nuestro ejemplo este paso no es crítico, pero en general es recomendable dejar la opción por defecto de Access.

Transferir datos de Excel a Access

En el último paso podemos definir el nombre de la tabla. Por defecto, Access propone el nombre de la hoja. Por lo general, como en nuestro ejemplo debemos cambiar el nombre a algo más significativo, como Ventas.


El último paso es apretar Finalizar. Al cabo de unos instantes Access nos informa que el proceso ha terminado (o fracasado si es que hemos cometido algún error o los datos no son los adecuados). Access ha creado ahora la tabla Ventas

Transferir datos de Excel a Access

que contiene los datos de la hoja

Transferir datos de Excel a Access

Ahora repetimos el proceso pero elegimos la hoja “mayo”.

Transferir datos de Excel a Access

En el tercer paso elegimos la tabla Ventas

Transferir datos de Excel a Access

Finalmente apretamos Finalizar. Los nuevos datos han sido agregados a los existentes en la tabla

Transferir datos de Excel a Access

Para totalizar y analizar los datos de base de datos podemos usar tablas dinámicas con la opción Fuente de datos externa



Technorati Tags:

martes, junio 02, 2009

Consolidar datos de más de dos cuadernos Excel con MS Query

En el pasado hemos mostrado cómo consolidar datos de distintas hojas de un mismo cuaderno empleando el MS Query.

Un lector me comenta que cuando quiere consolidar datos de tres hojas de tres distintos cuadernos, MS Query no permite agregar la tercera tabla (la hoja del tercer cuaderno). Como sucede frecuentemente con esta aplicación, la ayuda no viene a nuestro rescate en este problema.

Veamos un ejemplo (en este caso estaremos usando Excel 2007, pero el mecanismo es el mismo en Excel 97-2003).

Empezamos por establecer el nexo a la fuente de datos, en este caso dos cuadernos Excel



consolidar datos con Excel

Seleccionamos uno de los cuadernos (MS Query no nos permite hacer selecciones múltiples)

consolidar datos con Excel

Incluimos todos los campos de la hoja y seguimos adelante con el asistente hasta el último paso, donde seleccionamos la opción “Ver datos o modificar consulta con MS Query”. Al finalizar el proceso se abre la ventana de MS Query con los datos que hemos extraído de la hoja del primer cuaderno.

consolidar datos con Excel

Ahora agregamos la hoja del segundo cuaderno con el menú Tabla-Agregar Tablas

consolidar datos con Excel

Aquí nos topamos con el primer problema: no podemos ver el nombre del archivo a elegir dado que no podemos extender el ancho de la ventanilla. Guiándonos por la ubicación relativa de los archivos en la carpeta, elegimos el último

consolidar datos con Excel

Ahora queremos agregar la tercer tabla, para lo cual volvemos sobre el proceso anterior

consolidar datos con Excel

MS Query no nos permite agregar la tabla bajo la advertencia “Imposible el acceso..”.
Lo que hacemos en este caso es crear primero una unión entre las dos tablas presentes antes de intentar agregar la tercera. En nuestro caso la unión será entre los campos “factura” de ambas tablas.

Ahora intentamos agregar la tercer tabla, “Clientes”.

consolidar datos con Excel


Del momento que existe por lo menos una unión entre las dos primeras tablas podemos agregar la tercera.


Si intentamos agregar una cuarta tabla, cuyo origen es una hoja de un cuarto cuaderno, nuevamente tendremos que crear una unión a la tercer tabla antes de poder agregar la cuarta.


Otro rodeo posible es mover las hojas de los distintos cuadernos a un único cuaderno y luego proceder como mostramos en la nota mencionada.




Technorati Tags:

lunes, agosto 11, 2008

Consolidación de datos de distintos cuadernos.

En el pasado hemos mostrado cómo consolidar datos de distintas hojas de un cuaderno usando Datos-Consolidar, Tablas Dinámicas, y MS Query.
Naturalmente se presentan situaciones en las cuales queremos consolidar datos que se encuentran en hojas de distintos cuadernos.
En esta nota veremos algunas de las técnicas posibles. Supongamos estos dos cuadernos con datos de ventas del primer trimestre de una cadena de tiendas, un cuaderno para el año 2007 (2007.xls) y el otro para el 2008 (2008.xls).

Técnica #1 - transferir los datos a un único cuaderno.
La ventaja de esta técnica es que nos permite usar con facilidad Datos-Consolidar o Tablas Dinámicas. Podemos, por ejemplo, crear un nuevo cuaderno y transferir a él los datos en hojas separadas o en una única hoja. Por ejemplo, creamos el cuaderno "Consolidado" y pasamos a él las hojas de los cuadernos 2007 y 2008




Cambiamos el nombre de las hojas transferidas a "2007" y "2008"



Todo lo que nos queda por hacer es crear una hoja consolidada con Datos-Consolidar



Alternativamente podemos usar tablas dinámicas con rangos de consolidación múltiples



Técnica #2 - Datos en cuadernos separados
Usando Datos-Consolidar.
Como en el caso anterior, empezamos creando un cuaderno donde consolidaremos los datos (Consolidado.xls).
Una vez creado el cuaderno abrimos el menú datos consolidar y creamos la referencia al rango relevante en el cuaderno 2007.xls



Apretamos "agregar". Ahora veremos que Excel no nos permite crear una referencia al rango relevante en el cuaderno 2008.xls. Lo que haremos será crear la referencia manualmente



Sencillamente tecleamos la referencia manualmente, cambiando 2007 por 2008 y extendiendo el rango a D8.

Pulsamos "Aceptar" y Excel consolidará los datos.



Usando Tablas dinámicas.
También aquí usamos rangos de consolidación múltiples, creando referencias a las hojas relevantes de los distintos cuadernos. A diferencia de Datos-Consolidar, creamos las referencias directamente apuntando a los rangos en las hojas de los distintos cuadernos



El resultado es




Technorati Tags: