2018-02-27

Cómo trabajar con ficheros que sobrepasan el límite de filas Excel

Problema

En Excel queremos importar y trabajar con ficheros que exceden el límite de 1.048.576 filas.

Solución

  1. En la ficha Datos en el grupo Obtener datos externos hacemos clic en Desde un archivo de texto.
  2. En el cuadro de diálogo Importar archivo de texto, buscamos la ubicación del fichero de texto y hacemos clic en Importar.
  3. En el Asistente para importar texto, seleccionamos las opciones correspondientes: encabezados, delimitadores, calificadores de texto, y clic en Finalizar.
  4. En Importar Datos, nos aseguramos de seleccionar primero Agregar estos datos al Modelo de datos y luego Informe de tabla dinámica.
  5. Excel empezará a procesar el fichero mostrando en la parta inferios Cargando modelo de datos. Tardará varios minutos, dependiendo del tamaño del fichero y de la memoria RAM del ordenador.
  6. Finalizada la importación podremos generar una tabla dinámica cuyo origen de datos será el fichero de texto importado.

Resultados

Para examinar los datos importados, en la ficha Power Pivot, seleccionamos Administrar en la sección Modelo de datos. Ahí podremos comprobar y examinar los millones de registros importados, crear Medidas (campos calculados) y acceder a otras opciones.

Entradas relacionadas

  • Importar datos desde la web a Excel
  • Importar ficheros CSV en Excel mediante VBA
  • Actualizar origen de datos de Excel: atajo y con VBA
  • No es posible editar o actualizar los vínculos o el origen de datos
  • Consulta SQL en Excel mediante Microsoft ActiveX Data Objects (ADO)
  • Conectar una consulta de unión (union query) de Access desde Excel
  • Referencias

  • Conectarse con datos externos
  • Propiedades de conexión
  • 2018-02-20

    Añadir descripción a una función y a sus argumentos en Excel con VBA


    Problema

    Queremos añadir una descripción a una función definida por el usuario (UDF) y a sus argumentos en Excel mediante VBA. Por ejemplo a la siguiente función:

      Function MAYUSCULAS(Núm_función As Integer, Texto As Range)
      
          Select Case Núm_función
              Case 0 ' No: minúsculas
              MAYUSCULAS = LCase(Texto)
              Case 1 ' Sí: MAYÚSCULAS
              MAYUSCULAS = UCase(Texto)
              Case Else ' Resto: Nombre Propio
              MAYUSCULAS = WorksheetFunction.Proper(Texto)
          End Select
          
      End Function
      

    Solución

    1. Abrimos el Editor de Microsoft Visual Basic: Alt+F11.
    2. Creamos la siguiente subrutina en un módulo.
    3. Sub AsignaDescripciones()
      
         Dim FuncName As String
         Dim FuncDesc As String
         Dim Category As String
         Dim ArgDesc(1 To 2) As String
             
         FuncName = "MAYUSCULAS"
         FuncDesc = "Convierte una cadena de texto a minúsculas MAYÚSCULAS o Nombre Propio"
         Category = 7 'Categoría de texto
         ArgDesc(1) = "Número indicando la conversión. 0: minúsculas. 1: MAYÚSCULAS. Otro número: Nombre Propio."
         ArgDesc(2) = "Texto (celda) que deseamos convertir"
        
         Application.MacroOptions _
            Macro:=FuncName, _
            Description:=FuncDesc, _
            Category:=Category, _
            ArgumentDescriptions:=ArgDesc
      
       End Sub
      
    4. Ejecutamos la subrutina.
    5. La descripción de la función y de los argumentos estarán disponibles en el libro de Excel que almacena dicha función. Si queremos modificar la información, cambiamos el código y la ejecutaremos de nuevo.
      • Descripción y primer argumento
      • Segundo argumento

    Entradas relacionadas

    Referencias

    2018-02-04

    Representar serie continua con geom_ribbon de ggplot2

    Problema

    Cuando intentamos representar una serie continua, en nuestro ejemplo WS (Winter Solstice), ggplot2 une el último dato de WS (invierno) en marzo con el primero en diciembre, obteniendo el siguiente resultado indeseado.

    • Datos
    library(ggplot2)
    
    getSeason <- function(DATES) {
    #found here https://stackoverflow.com/questions/9500114/find-which-season-a-particular-date-belongs-to
    WS <- as.Date("2012-12-15", format = "%Y-%m-%d") # Winter Solstice
    SE <- as.Date("2012-3-15",  format = "%Y-%m-%d") # Spring Equinox
    SS <- as.Date("2012-6-15",  format = "%Y-%m-%d") # Summer Solstice
    FE <- as.Date("2012-9-15",  format = "%Y-%m-%d") # Fall Equinox
    
    # Convert dates from any year to 2012 dates
    d <- as.Date(strftime(DATES, format="2012-%m-%d"))
    
    ifelse (d >= WS | d < SE, "Winter",
      ifelse (d >= SE & d < SS, "Spring",
        ifelse (d >= SS & d < FE, "Summer", "Fall")))
    }
    
    zz <- sample(1:10000,365)/1000
    dag <- seq(as.Date("2014-01-01"), as.Date("2014-12-31"), by = "day")
    seas <-  getSeason(dag)
    test <- data.frame(zz,dag,seas)
    
    ggplot(data=test, aes(x=dag,ymax=zz,ymin=0,fill=seas))+
    geom_ribbon()
    

    Solución

    Dividimos los datos con dplyr en dos subconjuntos, igual o mayor que el 2014-12-15 y por debajo de dicha fecha. Así convertimos la serie WS en dos secciones discretas, evitando que una los dos extremos de WS.

    library(dplyr)
    ggplot() +
      geom_ribbon(data = filter(test, dag >= "2014-12-15") ,
                  aes(x = dag, ymax = zz, ymin = 0, fill = seas)) +
      geom_ribbon(data = filter(test, dag < "2014-12-15") ,
                  aes(x = dag, ymax = zz, ymin = 0, fill = seas))
    

    Resultados

    Referencias

    2018-02-01

    Representar cuartiles con geom_pointrange de ggplot2

    Problema

    Deseamos representar con una recta el rango intercuartílico marcando la mediana con un punto.

    Solución

    Empleamos la función geom_pointrange del paquete ggplot2. Delimitamos el min y máximo de y con fun.ymin y fun.ymax respectivamente. Con fun.y marcamos la coordinada del punto y para la mediana.

    library(ggplot2)
    ggplot(data = diamonds) +
      geom_pointrange(mapping = aes(x = cut, y = depth),
                      stat = "summary",
                      fun.ymin = function(z) {quantile(z,0.25)},
                      fun.ymax = function(z) {quantile(z,0.75)},
                      fun.y = median)
    

    Resultados

    Entradas relacionadas

    Referencias

    Nube de datos