30 octubre 2006

Tablas dinámicas en Excel

Las tablas dinámicas son una herramienta creada para analizar listas o bases de datos creadas en Excel o fuentes externas como archivos de texto o distintos manejadores de bases de datos. Sirven para organizar de manera sencilla y rápida grandes cantidades de datos procedentes de dichas listas. Permiten agrupar y filtrar la información por cualquiera de los campos de la lista, creando una tabla-resumen.
Para crearlas Excel cuenta con un asistente que en tres pasos genera un reporte de tabla dinámica, no obstante, existe un camino más rápido, la programación de tablas desde VBA.
A continuación les presento algunos ejemplos fáciles para generar tablas dinámicas desde el código de VBA.

Sub TablaDinamica1()

'Esta Macro genera una tabla dinámica a partir de un conjunto de datos
'que se encuentra en la hoja activa.
'Este método no muestra el Asistente para tablas dinámicas.
'No está disponible para orígenes de datos OLE DB.

Dim MiRango As String

'En esta macro se presupone que los datos inican en la celda A1
Range("a1").Select

'Con esta instrucción no importa cual sea el tamaño del rango de datos
'en Excel, automáticamente tomará todo el rango.

MiRango = Selection.CurrentRegion.Address

ActiveSheet.PivotTableWizard xlDatabase, Range(MiRango)


End Sub

Sub TablaDinámica2()
'
' Esta macro hace una tabla dinámica a partir de datos externos
'En este caso la ruta esta definida y apunta en esa sola dirección
'Este método no muestra el Asistente para tablas dinámicas.
'No está disponible para orígenes de datos OLE DB.
'
Dim Ruta As Variant
Dim Conexion As String, sql As String

sql = "SELECT PrimerNivel, ServicioGeneral, Rama, Servicio, Categoría FROM PruebaCubo PruebaCubo" 'Esta es la consulta sql a la base de datos

Ruta2 = "C:\Documents and Settings\JPaisano\Mis documentos\Felix\Cubos2"
Ruta = "C:\Documents and Settings\JPaisano\Mis documentos\Felix\Cubos2\Cubo.mdb"

Conexion = "ODBC;DSN=MS Access Database;DBQ=" & Ruta & ";DefaultDir=" & Ruta2 & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"

With ActiveWorkbook.PivotCaches.Add(xlExternal)
.Connection = Conexion
.CommandText = sql
.CreatePivotTable "", "Tabla dinámica3", DefaultVersion:=xlPivotTableVersion10 'En esta sección se incluye el destino, Nombre y versión de la tabla
End With


ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
End Sub

Sub MostrarRuta()
'Esta macro muestra cual es la ruta, por defecto, de trabajo
MsgBox "La ruta por definición es: " & Application.DefaultFilePath
End Sub

Sub TablaDinámica3()
'Esta macro genera una tabla dinámica a partir de datos externos
'que podemos seleccionar nosotros mismos
'Macro grabada el 26/10/2006 por José Félix Paisano
Dim Ruta As Variant
Dim Conexion As String, sql As String
Ruta = Application.GetOpenFilename("Bases de datos,*.mdb")
sql = "SELECT PrimerNivel, ServicioGeneral, Rama, Servicio, Categoría FROM PruebaCubo PruebaCubo"

Set Db = OpenDatabase(Ruta)

Ruta2 = Application.DefaultFilePath 'la base de datos debe estar guardada
'en la ruta definida de inicio

Conexion = "ODBC;DSN=MS Access Database;DBQ=" & Ruta & ";DefaultDir=" & Ruta2 & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
'Se establece la conexión al origen de datos
With ActiveWorkbook.PivotCaches.Add(xlExternal)
.Connection = Conexion
.CommandText = sql
.CreatePivotTable "", "Tabla dinámica3", DefaultVersion:=xlPivotTableVersion10 'En esta sección se incluye el destino, Nombre y versión de la tabla
End With

ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select

End Sub

Etiquetas: , ,