Macro para dividir cadenas con delimitador

Voy a iniciar este post en mi blog comentando sobre una herramienta muy utilizada por aquellos usuarios de Excel que importan información desde archivos planos hacia el interior de las hojas de Excel.

Si, me refiero indiscutiblemente a la herramienta: Texto en columnas. (asistente de varios cuadros de diálogo) que podemos encontrar en el grupo Herramientas de datos de la pestaña Datos.

Esta herramienta la cual bajo mi punto de vista me parece una herramienta formidable para tratar información dentro de archivos planos separada en muchos casos por caracteres especiales, es en todo su contexto una utilidad bastante practica que puede ser utilizada de manera similar con la información que podamos almacenar dentro de las celdas en una hoja de Excel.

En este caso afirmo enfáticamente que esta herramienta (Texto en columnas) no sólo puede usarse cuando queremos importar información a Excel, por el contrario, es muy factible poderla utilizar cuando queremos tratar información dentro de alguna(s) celda(s) que contengan delimitadores como caracteres inmersos dentro de cadenas de texto.


Es decir, cuando en una o quizás varias celdas queramos separar de manera individual (celdas independientes) porciones de texto de una cadena de texto mucho más grande que contenga algún patrón de separación (carácter separador).

Bajo este esquema dicha herramienta es bastante funcional. Sin embargo, esta herramienta tiene una limitante muy poco conocida, la cual se esconde de usuarios básicos por no estudiarla en su totalidad o de manera detenida.

Esta limitante que tiene la herramienta y que a simple vista puede ser interpretada como un error, es que no separa correctamente cadenas de texto cuando dichas cadenas son devueltas dentro de las celdas por funciones o fórmulas.

Por ejemplo, imagine que en la celda A1 usted tiene un nombre completo que usted mismo introdujo con el teclado dentro de la celda; Y en la celda A2 tiene ese mismo nombre, pero como fórmula de retorno desde la celda A1. Es decir, A1: Pedro Mora; A2: =A1.

Pues bien, si aplica el proceso que ejerce la herramienta (Texto en columnas) sobre ambas celdas, usted podrá apreciar que la herramienta sólo actúa sobre la celda A1 y no sobre la celda A2 (porque el nombre es devuelto mediante una fórmula).

Aquí quiero comentarle que esto no es un error de la herramienta, la verdad es que es, una limitante; una limitante que puede ser cubierta con programación mediante el entorno de desarrollo de VBA del Excel.

Por ejemplo, esta macro hace que el contenido de una celda (devuelta o no mediante fórmula) se divida si existe un carácter separador de coma (",") dentro de las palabras escritas o devueltas dentro de la celda.

Macro para dividir texto delimitado con comas

Sub DividirPorComa(MiRango As Range)
   Dim Celda As Range
   Dim MatrizResultado() As String
   Dim i As Long   
      For Each Celda In MiRango
         Range(Celda.Offset(0, 1), Celda.Offset(0, 6)).ClearContents
         MatrizResultado = Split(Celda.Value, ",")
         For i = 0 To UBound(MatrizResultado)
            Celda.Offset(0, i + 1).Value = Trim(MatrizResultado(i))
         Next i
      Next Celda
End Sub

Para implementarlo, sólo tienes que invocarlo desde otro procedimiento y pasarle la celda de interés que quiere que analice desde su argumento en la cabecera.


Formato de número personalizado - valores negativos

Al comenzar a leer estas líneas lo primero que quiero que hagas es que comprendas que un Formato de número personalizado no es algo mágico ni tampoco complicado ni mucho menos difícil de aprender.

Son simplemente un conjunto de reglas que se aplican siguiendo una lógica estructurada que se detalla con precisión en varios capítulos de la ayuda de Excel. En ellos (en los capítulos de la ayuda) se describen con gran detalle el uso de cada uno de los caracteres especiales que la caja de texto interpreta y traslada hacia el interior de cada una de las celdas. (Formato de celdas – Número – Categoría – Personalizada - Tipo).


Para crear, o mejor dicho para personalizar un nuevo tipo de Formato de número que pueda aplicarse a una o varias celdas, lo esencial es identificar inicialmente las cuatro partes de las que se compone un formato de número; en donde el total de las partes que se conoce como (código del formato) definen en su orden el formato de números positivos, números negativos, los valores de cero, y por último el texto.

<POSITIVO>;<NEGATIVO>;<CERO>;<TEXTO>

Esta regla que por lo regular no es estricta en todos los casos permite definir y trabajar con las secciones de código que necesitemos en un momento dado. Sin embargo, si se desea omitir una sección dentro del código del formato, siempre deberá tenerse cuidado de especificar y separar dicha sección con un punto y coma (;) dentro de los límites de la expresión.

Por otro lado, y algo que debe quedar claro, es que, si solo se especifican dos secciones de código para un formato de número personalizado, la primera sección de código siempre se usará para los números positivos y los ceros, y la segunda sección se utilizará para los números negativos.

Así mismo, si un formato de número sólo requiere únicamente de una sección de código, esta se usará para todos los números dentro del código del formato. Es decir, si solo se especifica una sola sección de código, está sección aplicará únicamente para los números dentro de las celdas de interés donde se aplique dicho formato.

Convenciones de algunos caracteres especiales de uso frecuente

• Comillas dobles (“ ”): se utilizan para especificar cadenas de texto dentro de todas las secciones de código de un formato de número.

• Símbolo de arroba (@): se utiliza únicamente en la sección de código de texto. (La sección de código de texto en el código del formato siempre será la última). Si omite la arroba en la última sección de código, el texto que escriba en la(s) celda(s) no se mostrará.

• Símbolo de subrayado (_): Se utiliza en cualquier sección del código del formato. Subrayado crea un espacio que tenga el ancho de un carácter que se especifique de manera subsiguiente a este último.

• Símbolo de asterisco (*): Se utiliza para repetir un determinado carácter dentro de un formato de número. Se usa en todas las secciones del código del formato. Al utilizar el asterisco con un carácter subsiguiente, dicho carácter rellena la celda hasta el ancho de toda la columna.

• Corchetes para colores ([Color]): Se utilizan para especificar un tipo de color dentro de cada sección del código del formato. Los colores disponibles y aceptados para un formato de numero son: [Negro], [Verde], [Blanco], [Azul], [Magenta], [Amarillo], [Cian], [Rojo].

• El cero (0): Es un marcador de posición de dígitos. Muestra los ceros no significativos si un número tiene menos dígitos que los ceros especificados en el formato. Ejemplo: si escribe 10.5 en una celda y desea mostrar 10.50 en dicha celda, use el formato de numero #.00 para agregar un cero adicional.

• El numeral (#): Es un marcador de posición de dígitos. (#) sigue las mismas reglas que el (0), sin embargo, (#) no muestra ceros adicionales cuando el número que escribe tiene menos dígitos a ambos lados de la coma decimal que el número de símbolos # especificados en el formato. Ejemplo, si en una celda escribe 10.5 y especifica el formato de número #.### el número mostrado siempre será 10.5.

• La interrogación (?): Es un marcador de posición de dígitos y sigue las mismas reglas que el (0). El detalle con este marcador de posición es que Excel lo interpreta con espacios de alineación para números con decimales de diferentes tamaños. Ejemplo, si escribe 50.5, 10.58, 852.45, 5487.365 y especifica el siguiente formato de número #,##0.00? Excel alinea todos los números por el separador decimal.

Así, al tener en cuenta estos parámetros básicos usted podrá emplearlos para dar una mejor presentación a los datos que escriba dentro de las celdas. No obstante, mi única recomendación es que lea la ayuda completa y verifique cada uno de los aspectos y demás convenciones que allí se estipulan.

Por ejemplo, con el siguiente video te enseño en menos de un minuto a crear un formato de numero personalizado para denotar los valores negativos de moneda contenidos en una o varias celdas de Excel.


Gráfico de barras internas

Diseñar un gráfico en Excel no es una tarea complicada, sólo es necesario ir a la pestaña Insertar y elegir una de las variadas opciones que tiene el grupo Gráficos.

No obstante, los gráficos por defecto que construye Excel, muchas veces no se adecuan al cien por ciento a nuestras necesidades para representar los datos como información útil que sirva para tomar alguna decisión.

Es por ello que muchas veces debemos realizar algunas modificaciones extras que hagan que los gráficos cambien y queden más pulidos para el público de nuestros datos. (clic en la imagen para ampliar).


Uno de los gráficos más populares que tiene Excel sin duda son los que constituyen el subgrupo de las barras o columnas, siendo el más representativo el gráfico de Columnas agrupadas. Este tipo de gráfico agrupa en columnas los datos que se conforman por series; donde una serie es un conjunto de datos que pueden o no estar asociados a una variable específica del entorno que queremos representar.

Sin embargo, este tipo de gráfico no es muy recomendable cuando queremos asociar a cada una de las series el total de los datos acumulados que componen dicha serie; Esto se debe a la aparición de una barra extremadamente larga que hace que la representación se vea desproporcionada respecto del resto de datos que se incluyen en el gráfico.

Una alternativa práctica y quizás muy elegante para representar los totales de cada una de las series dentro de un gráfico de barras o Columnas agrupadas, desde luego es y seguirá siendo al utilizar el eje secundario del gráfico. Donde en esencia se usará dicho eje para desplazar la(s) barra(s) de los totales que componen cada una de las series.

En este caso como la(s) barra(s) que representan los totales quedan aisladas en un eje independiente, es mucho más fácil su manipulación y/o modificación dentro del gráfico. Así, al estar en un eje independiente a la del resto de la serie pueden modificarse su ancho y superposición respecto de los otros componentes que se quieren mostrar como información relativa de un posible total general. (clic en la imagen para ampliar).


Al construir este tipo de gráficos deben tenerse en cuenta varios aspectos que yo considero concejos útiles que hacen que los gráficos hablen por si solos. El primero es no utilizar colores diferentes para representar las barras dentro de la serie (puedes usar colores degradados de un único color solido); El segundo es no saturar a tu espectador con proporciones que definan las medidas de las barras (puedes eliminar los ejes verticales [Principal y Secundario] y tu gráfico se leerá mejor).


Buscar el valor máximo y devolver registro(s)

Los métodos de búsqueda en Excel suelen ser muy variados y no necesariamente constituyen aquellos que únicamente utilizan a las funciones nativas de Excel para buscar y devolver valores.

Funciones nativas como: BUSCAR, BUSCARV, BUSCARH, DESREF, ELEGIR, etc. etc. Que muchas veces son limitadas para realizar operaciones complejas de búsqueda bajo condiciones que se delimitan con ciertos criterios que se presuponen y no se disponen dentro de otras celdas en una hoja de Excel. (clic en la imagen para ampliar).


Imagine por un momento que usted tiene una tabla de datos que contiene alguna información de interés de la cual, una columna dentro de esa tabla posee valores numéricos y usted quiere extraer registros completos que correspondan a los valores máximos contenidos en ese campo que posee números.

En otras palabras, identificar implícitamente dentro de la columna que posee valores numéricos, el valor o los valores máximo(s) que contenga dicha columna y posteriormente extraer esos registro(s) completos asociados a esos valores.

Este caso que parece algo trivial y que quizás usted piense puede resolverse con una mera y simple función de Búsqueda y referencia, es en todo sentido un ejemplo complejo que constituye un método de búsqueda que puede emplear otras cuantas funciones que nada tienen que ver con las que buscan valores.

Por ejemplo, un método que use la aritmética básica para detectar errores y posiciones de registros que contienen valores de interés, de los cuales tras una simple división por cero pueden mostrar cuales registros podemos y no podemos extraer.

En este caso los errores pueden ser fácilmente tratables con otras funciones, no obstante, siempre debe tenerse presente cuales funciones son las más eficientes a la hora de usarlas para detectar estos valores.

Una función que en particular yo uso con frecuencia es AGREGAR; esta función tiene la particularidad de llamar otras funciones dentro de sí misma y dotarlas de ciertas características que de manera nativa estas últimas no poseen.

Por ejemplo, pueden llamarse funciones básicas como PROMEDIO, SUMA, MAX, MIN, K.ESIMO.MENOR, etc. etc. De la cual, tras ser aplicada dentro de AGREGAR, usted puede omitir los errores que contenga el argumento de la función nativa de manera correspondiente.

No solo se pueden omitir errores con AGREGAR, también tiene un sinnúmero de otras características útiles que pueden usarse bajo ciertos parámetros de operación con esta función.

Si quieres ver un tutorial interesante que trata este tema con gran detalle y resuelve un caso del entorno real, por favor sigue el enlace de más abajo y aprende algo nuevo sobre métodos de búsqueda en Excel.


Indicador porcentual de tiempo transcurrido por mes

En esta publicación te voy a realizar una pregunta directa para entrar en contexto. ¿Es posible determinar el porcentaje de tiempo transcurrido de un mes particular teniendo como parámetro una fecha? La respuesta es Si.

Antes de explicarte en que consiste este ejercicio primero voy a detallarte con un ejemplo un caso concreto para que lo comprendas rápidamente. Clic en la imagen para ampliar.


Suponga que tiene una fecha cualquiera escrita dentro de una celda en una hoja de un libro de Excel. Esta fecha desde luego está constituida por un día, un mes, y un año, delimitados con un formato de fecha estándar (dd/mm/yyyy).

Como es de suponer, un mes de un año está constituido por días. Dependiendo del mes estipulado, este último puede tener 28, 30, ó 31 días (o 29 si el año es bisiesto).

Imagine que la totalidad de días de un mes que usted elija representa el 100% de días para ese mes. Entonces sin aplicar mucha lógica comprenderá que cada día de ese mes representa una fracción porcentual de ese 100% que representa todos los días para ese mes.

Por ejemplo, si un mes tiene 30 días, un solo día equivale a una fracción de 0.033 ó 3.33%. Si toma el mes de septiembre que tiene 30 días y agrupa mentalmente lo primeros 15 días, lógicamente usted tendrá agrupados el 50% de los días de ese mes.

Imagine ahora que tiene esa fecha dentro de la celda en una hoja de un libro de Excel; Pues bien, ¿Cómo haría para que una fórmula le diga cuanto porcentaje de días han transcurrido desde el inicio del mes que contiene esa fecha, hasta el día que se estipula en esa misma fecha? Clic en la imagen para ampliar.


Es decir, calcular inicialmente el primer día de ese mes y luego calcular cuántos días han transcurrido hasta la fecha que se estipuló en la celda. Esa cantidad de días que se obtienen como resultado de la operación inicial se dividen entre la cantidad de días totales de ese mes y así se obtiene un indicador porcentual de tiempo transcurrido por mes.

El método descrito anteriormente quizás no sea el más eficiente por la cantidad de cálculos que hacemos dentro de la celda, no obstante, para llegar a un término conceptual y explicarlo con simplicidad, este caso es bastante útil.

Si quieres observar un método más eficiente y rápido que nos lleva al mismo resultado, visualiza esta serie de 3 videos que he preparado cuidadosamente para explicarte con mucho detalle como calcular un indicador de este tipo.


Si quieres descargar el libro de Excel usado en los videos, haz clic aquí.

Formato condicional complejo - Construcción por partes

Una actividad muy frecuente que muchos usuarios medios y/o avanzados de Excel desarrollan desde la interfaz de usuario de esta aplicación, es la implementación de formatos condicionales sobre sus trabajos.

Sin duda, un Formato condicional en Excel es bastante útil cuando queremos marcar una o varias celdas con un color o quizás una fuente específica para hacer énfasis sobre determinados datos.


En este punto usted debe comprender que, cuando se habla de Formato condicional en Excel, siempre se están refiriendo a reglas de validación que se aplican sobre una o varias celdas y que, de cumplirse, dichas celdas cambiaran su formato al especificado por el usuario de manera personalizada mediante la herramienta que Excel tiene desde la interfaz de usuario.

Por defecto Excel tiene una gama de reglas para aplicar formatos condicionales (prestablecidos) que el usuario puede utilizar con tan sólo seleccionar las celdas y hacer unos cuantos clics. Por ejemplo: Escalas de color, Barras de datos, Conjuntos de iconos, Reglas superiores e inferiores, etc.

Sin embargo, cuando se trata de resaltar celdas que cumplan alguna condición lógica algo loca (compleja), Excel no cuenta con esas reglas para establecer la validación adecuada que cumpla con nuestros requisitos.

En esos casos la aplicación nos pone a disposición un elemento importante dentro del cuadro de dialogo Nueva regla de formato. Este sencillo cajón que muchas personas no utilizan por desconocimiento, no es más que un validador de reglas personalizadas que se implementan a partir de fórmulas que devuelven valores booleanos (falso o verdadero). Clic en la imagen para ampliar.


Aquí hay que comprender que una fórmula tradicional por sí sola no sirve para implementar un formato condicional, puesto que muchas de esas fórmulas no devuelven valores lógicos booleanos de (falso o verdadero) que la herramienta Formato condicional entienda correctamente.

Sin embargo, sí que es válido construir con esas fórmulas estructuras que devuelvan dichos valores (falso o verdadero). Para ello, sólo debemos realizar comparaciones directas que involucren los resultados de las fórmulas con los valores de interés que deseamos utilizar como criterios para devolver las reglas que deseamos construir.

Por regla general, una comparación que devuelve un valor booleano sin duda utiliza los operadores de comparación. Esto que a usted le puede sonar algo tonto y hasta trivial, es la clave para crear las reglas de validación que pueden usarse dentro de un Formato condicional. Los operadores de comparación desde luego serán: el mayor, el menor, el igual, el mayor igual, el menor igual, y el diferente.

Si quieres observar un ejemplo práctico que detalle estos conceptos, haz clic aquí y aprende algo nuevo con este video.

Participación porcentual por mes con tabla dinámica

Sin lugar a dudas, cuando se trata de presentar información de manera resumida para tomar alguna decisión, en lo primero que pensamos es, en una Tabla Dinámica.

Las Tablas Dinámicas en Excel son una herramienta poderosa a la hora de construir informes con los (datos crudos) que de manera estructurada debemos tener para pasarle como insumo a esta herramienta.

Podemos mediante sus opciones resumir los campos que contengan valores con operaciones como: suma, recuento, promedio, máximo, mínimo, producto, contar, etc. etc. (clic en la imagen para ampliar)


Además, esta herramienta nos permite darle (formato de número) a la información que queremos presentar. Estos formatos incluyen todos los que pueden aplicarse desde una celda cualquiera que de manera tradicional tengamos en una hoja de cálculo.

Sin embargo, algo que es realmente atractivo de esta herramienta de Excel, es que nos permite hacer algunos cálculos adicionales para encontrar de un modo muy rápido, relaciones porcentuales entre los campos que componen la tabla y la fuente de datos.

Estos campos pueden relacionarse con las filas o columnas ya procesadas en un informe de Tabla Dinámica; igualmente se procesan también con los totales generales calculados en cualquier otro campo; No obstante, la opción más poderosa es la de relacionar un campo de interés con un campo base para obtener indirectamente la relación porcentual de dos campos que no están ligados de manera natural en la fuente de datos.

Por ejemplo, imagine una fuente de datos estructurada que relacione las ventas de los comérciales de una organización. Una fuente de datos que contenga como mínimo: un campo fecha (día de la venta), un campo que describa el nombre del comercial, y un campo que describa el monto o valor de la venta realizada. (clic en la imagen para ampliar)


Usted puede obtener la relación porcentual mensual de las ventas de cada comercial de dos formas bien definidas, una que se tabule como relación del total general global de las ventas realizadas, y otra que se calcule respecto del total general parcial (mensual) para cada uno de los comérciales.

En este caso, para calcular la segunda relación porcentual usted puede pensar que la fecha es más que suficiente para llevar a cabo la operación, no obstante, como se quiere obtener respecto de cada mes (mensual), es vital agrupar el campo fecha por meses para que sirva de campo base para calcular la relación porcentual parcial de manera correcta para cada comercial.


Asignar descripción a Función Definida por el Usuario

Excel no sólo es famoso por poseer un gran número de funciones integradas que pueden servir literalmente para resolver muchos problemas con los datos; por el contrario, también lo es porque nos permite escribir nuestras propias funciones mediante el entorno Visual Basic para Aplicaciones o VBA.

Cuando un programador de esta aplicación decide escribir funciones que pueden usarse desde la interfaz de usuario estamos hablando de UDFs o Funciones Definidas por el Usuario.

Las UDFs al igual que las funciones integradas pueden procesar los datos y devolver un resultado; sin embargo, una diferencia con las UDFs respecto de las funciones integradas, es que las primeras no muestran por default una ayuda al usuario cuando este quiere utilizarlas mediante el cuadro de dialogo Insertar función.

Por ejemplo, suponga que implementamos una función (UDF) para el tratamiento de cadenas alfanuméricas con VBA en Excel; Una función con dos argumentos que extrae de cadenas de texto que posiblemente tengan números, únicamente sus números y los separa con un carácter separador de manera opcional.

UDF para extraer los números de una cadena alfanumérica - Ver resolución

Public Function NumerosSeparador(Cadena As String, Optional Separador As String = "") As Variant
   Dim LargoCadena As Long
   Dim i As Long
   Dim Caracter As Variant
   Dim Resultado As Variant
   Dim Marca As Boolean

   If Cadena = "" Then
      NumerosSeparador = VBA.CVErr(xlErrNull)
      Exit Function
   End If
   LargoCadena = VBA.Len(Cadena)
   Marca = False
   For i = 1 To LargoCadena
      Caracter = VBA.Mid(Cadena, i, 1)
      If VBA.IsNumeric(Caracter) And Separador = "" Then
         Resultado = Resultado & Caracter
      Else
         If VBA.IsNumeric(Caracter) Then
            Resultado = Resultado & Caracter
            Marca = True
         ElseIf Marca Then
            Resultado = Resultado & Separador
            Marca = False
         End If
      End If
   Next i
   If VBA.IsEmpty(Resultado) Then
      NumerosSeparador = VBA.CVErr(xlErrNA)
   ElseIf Separador = "" Or Marca Then
      NumerosSeparador = Resultado
   Else
      NumerosSeparador = VBA.Mid(Resultado, 1, VBA.Len(Resultado) - VBA.Len(Separador))
   End If
End Function

Si únicamente se implementara esta función dentro de un módulo en VBA del Excel, con total certeza no obtendremos la ayuda correspondiente en los cuadros de dialogo Insertar función y Argumentos de función que las funciones tradicionales si muestran (clic para ampliar).


Una manera efectiva para solucionar este inconveniente es crear un Procedimiento Sub que cargue mediante el método MacroOptions del objeto Application, todos los componentes descriptivos de la UDF.

Procedimiento Sub para cargar el componente descriptivo de la UDF

Sub EjecutarAlAbrir()
   Dim NombreDeLaFuncion As String
   Dim DescripcionDeLaFuncion As String
   Dim CategoriaDeLaFuncion As Variant
   Dim DescripcionDeLosArgumentos(1 To 2) As String

   NombreDeLaFuncion = "NumerosSeparador"
   DescripcionDeLaFuncion = "Devuelve los números de una cadena " & _
     "alfanumérica con un carácter separador opcional."
   CategoriaDeLaFuncion = "Tratamiento de cadenas"
   DescripcionDeLosArgumentos(1) = "Referencia de celda que " & _
     "contiene una cadena alfanumérica."
   DescripcionDeLosArgumentos(2) = "Opcional. Carácter separador " & _
     "por el cual se dividirá el número resultante."
   Application.MacroOptions Macro:=NombreDeLaFuncion, _
     Description:=DescripcionDeLaFuncion, Category:=CategoriaDeLaFuncion, _
     ArgumentDescriptions:=DescripcionDeLosArgumentos
End Sub

Cada componente descriptivo de la UDF puede cargarse en una variable independiente dentro del método MacroOptions; Incluso puede anclarse la función dentro de una categoría personalizada o una categoría ya existente. Si se trata de una categoría personalizada sólo deberá especificarse el nombre de la nueva categoría; en cambio si se trata de una categoría existente deberá usarse un valor numérico de la siguiente tabla (clic para ampliar).


Ejecutar el Procedimiento Sub hará que los componentes descriptivos se carguen en los cuadros de dialogo correspondientes al momento de usar a la función en la interfaz de usuario, sin embargo, si cierra y abre el libro de Excel nuevamente estos componentes se perderán. La solución más recomendable es ejecutar el Procedimiento Sub que carga a los componentes descriptivos cada que se abra el libro de Excel; esto puedes lograrlo si llamas al procedimiento desde el evento Open del objeto ThisWorkbook.

Ejecutar el Procedimiento Sub al abrir el libro de Excel

Private Sub Workbook_Open()
   Call Apertura.EjecutarAlAbrir
End Sub

Así, todo quedará más entendible para un usuario final cuando quiera usar las UDFs que usted haya programado para hacerle la vida más fácil.

El método que implementa la carga de los componentes descriptivos de una función (UDF) se implementó por Sergio Alejandro Campos – EXCELeINFO.


Buscar registros únicos o duplicados con fecha más reciente

Quiero plantearles a todos ustedes un caso muy peculiar que me gustaría resolvieran en su tiempo libre y así entrenen un poco con Excel para que adquieran más habilidades con esta aplicación.

El tema que quiero tratar se basa principalmente en la extracción de registros de una base de datos que contienen registros únicos y duplicados. Para ello quiero que observes detenidamente la imagen que presento a continuación (clic para ampliar).


Como pudiste analizar en la imagen, se trata de una base de datos que relaciona en su primera y segunda columna, el código y el nombre de personas (respectivamente) que pueden encontrarse de manera única o duplicada dentro de los registros de la base de datos.

En la última columna se encuentran registrados valores de fecha; estas fechas son únicas para cada persona. Es decir, si una persona se encuentra duplicada en la base de datos, los valores de fecha correspondientes para cada registro duplicado de esa persona siempre serán diferentes uno del otro.

Por ejemplo, el código 2826 (remarcado con rojo) que relaciona a María Quevedo se encuentra dos veces dentro de la base de datos. Ambos registros poseen fechas diferentes (15/06/2016 y 21/02/2017).

¿Cuál es el problema?

Se requiere extraer de la base de datos todos los registros de manera única (uno sólo por persona cuando existan duplicados) del cual su fecha asociada corresponda a la más reciente o la más actual.

Por ejemplo, para el código 2826 (remarcado con rojo) que relaciona a María Quevedo se debería extraer el registro con fecha 21/02/2017 (relleno amarillo).

Tenga en cuenta que los registros de la base de datos pueden estar ordenados en cualquier posición. Por ejemplo, para el código 2826 (remarcado con rojo) debe extraerse el segundo registro (relleno amarillo); en cambio para el código 22201 (remarcado con azul) que relaciona a Manuel Ubillus debe extraerse el sexto registro (relleno amarillo).

Para identificar un registro que corresponda a una persona que esté duplicada sólo ten en cuenta las columnas: Código y Nombre. Al finalizar el ejercicio sólo deberás extraer únicamente los registros con relleno amarillo. Imagina una base de datos con más de 500 registros.

Déjame tu solución en los comentarios de más abajo. Recuerda, puedes utilizar cualquier método que desees, lo único es que los extraigas de la base de datos a otro lugar de una hoja de Excel sin hacerlo manualmente (usa fórmulas, funciones, código VBA, lo que quieras). Reto personal - No para el premio.

Posdata: mientras escribo esto yo ya he imaginado tres posibles soluciones.



Como premio para la primera persona que me entregue una solución válida (utilizando sólo las herramientas de la interfaz de usuario de Excel - No VBA), le entregaré una suscripción por un año a la Suite de Office 365. La solución que implementes debes describirla muy bien en los comentarios del post. Válido hasta el 30 de julio de 2017 - inclusive.

Ver la resolución en video.

Descargar el libro de Excel.