domingo, 23 de junio de 2019

Listas Personalizadas

Sabemos que Excel cuenta con una cierta cantidad de Listas que nos sirven a la hora de rellenar u ordenar alguna tabla de datos.

Ahora veremos cómo podemos modificar o incrementar esta lista según nuestras necesidades.
Imaginemos una tabla de datos (ventas, compras, etc) que necesitamos ordenarla por mes. Seleccionaremos el rango de la tabla y desde menú Datos, Ordenar optaremos por campo MESES.

Pero es posible que nuestro ejercicio fiscal no coincida con el inicio de año o sea enero, sino que corresponda a otro período como puede ser Abril-Marzo.
En ese caso necesitamos otro ordenamiento lo que nos llevará  a crear nuestra propia lista.
Seleccionaremos nuevamente el rango de la tabla, menú Datos-Ordenar. Dejamos nuevamente la columna MESES y en Criterio de ordenación optamos por Lista Personalizada.

Esto nos abrirá una segunda ventana desde la que podemos crear otra lista personal. En el campo de la derecha se ingresará el primer mes (Abril para nuestro caso) presionando Enter a continuación. Y así completaremos la tabla de los 12 meses. A continuación presionamos el botón Agregar y luego Aceptar para guardar la nueva lista.

Ya tenemos una nueva lista para ordenar tablas por meses. 

NOTA: para quitar una lista personal se puede ingresar desde la opción ORDENAR como lo hemos hecho para crearla. Seleccionamos la lista que deseamos quitar y presionamos el botón  Eliminar y Aceptar para guardar los cambios.

OTRO MODO DE CREAR-ELIMINAR LISTAS PERSONALES:
Esta tarea también puede ser realizada desde el botón Archivo (Opciones de Excel), Avanzadas y buscar hacia abajo el botón que menciona 'Modificar Listas Personalizadas.
Este botón nos abrirá la ventana de la imagen anterior, tanto para crear como para eliminar listas agregadas.

Veamos el siguiente ejemplo:
Con frecuencia requerimos en nuestros libros una lista de Provincias, Sucursales o algún otro tipo de información repetitiva. Entonces ya dejaremos creada la lista desde esta herramienta de 'Listas Personalizadas'.
Podemos trabajar directamente desde la ventana que se observa en imagen anterior, como en el ejemplo de los meses, o previamente completaremos un rango de celdas y luego lo importamos.


Estas listas creadas aparecerán en cada libro Excel hasta que decidamos eliminarlas desde esta misma ventana.

VER VIDEO N° 26.

jueves, 13 de junio de 2019

BUSCAR información mediante VBA

Siguiendo con el tema de las búsquedas ya comentadas en entradas del mes de Febrero 2019 vamos a desarrollar 2 tipos de búsquedas simples, es decir con datos únicos.
NOTA: En una búsqueda siempre se debe contemplar la posibilidad de que no se encuentre el dato buscado.

1 - Con método FIND: 
Contamos con una hoja donde se encuentran 2 tablas semestrales (Hoja2). La intención es volcar datos de esas tablas a otra hoja (Hoja1) donde se encuentra el resumen anual.
En este ejemplo solo se tendrá 1 registro o contrato por cada mes.



La macro colocada en un módulo será la siguiente y se ejecutará desde la Hoja1 (hoja resumen anual).
Sub macroBusca()
'x Elsamatilde
'recorre la col A de hoja1... hoja activa
Sheets("Hoja1").Select
fini = Range("A" & Rows.Count).End(xlUp).Row
'tomo el rango desde fila 2 hasta la última con datos (fini) ....AJUSTAR
For i = 2 To fini
    dato = Range("A" & i)
   Set busco = Sheets("Hoja2").Range("B:H").Find(dato, LookIn:=xlValues,  lookat:=xlWhole)
        'si lo encuentra vuelca el resultado en col B y C de hoja 1
    If Not busco Is Nothing Then
        Range("B" & i) = busco.Offset(0, 1)   'devuelve info a derecha
        Range("C" & i) = busco.Offset(0, 2)
    Else
        'opcional: dejar un texto en celdas B y C
        Range("B" & i) = "Sin datos": Range("C" & i) = "Sin datos"
    End If
'sigue con la otra fila
Next i
MsgBox "Fin de la búsqueda"
End Sub

Con el método FIND programado de este modo (con control de dato encontrado o no - ver aclaraciones en entrada de Febrero 2019) le indicamos qué resultado debe volcar en caso de no encontrar algún registro o mes en este caso.

2- Con resultado de la función BUSCARV:
Para este caso, contaremos con una tabla de datos de varias columnas, de las que solo necesitaremos obtener el resultado de dos de ellas. La tabla resumen será igual a la anterior.

Suponiendo que en nuestra tabla de resumen no queremos colocar fórmulas sino solamente el valor encontrado, la macro a utilizar sería la siguiente:
Sub macroFormulaControlada()
'x Elsamatilde
Sheets("Hoja1").Select
'recorre la col A de la hoja activa hasta la última celda con datos.
fini = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To fini
    dato = Range("A" & i)
    'el control de error nos permite devolver otro valor o texto en caso de dato no encontrado
    On Error Resume Next
    Range("B" & i) = Application.WorksheetFunction.VLookup(dato, Sheets("Hoja2").Range("B:D"), 2, False)
    'si la función devolvió error se coloca un texto aclaratorio
    If Err.Number > 0 Then Range("B" & i) = "Sin datos"
    Range("C" & i) = Application.WorksheetFunction.VLookup(dato, Sheets("Hoja2").Range("B:D"), 3, False)
    If Err.Number > 0 Then Range("C" & i) = "Sin datos"
Next i
                     End Sub

Aquí se contempla si la función devuelve un número de error (Err.Number > 0) . Sería como cuando la función BuscarV nos devuelve el valor #N/A . Y en ese caso colocaremos otro resultado.

Descargar ejemplo desde aquí

                                   Ver VIDEO N° 25.