LibreOffice Calc: Control de valores duplicados, triplicados, …

Hoja de cálculo
¿Cómo hacerte con el control de esos valores duplicados que aparecen en tus hojas de cálculo?  Sigue leyendo y verás que no es tan difícil como parece.
 
 

Por José Francisco Martínez Jiménez, del Servicio de Gestión Contable. Intervención General de la Junta de Andalucía. Consejería de Hacienda, Industria y Energía.

Introducción

Tenemos que trabajar con una hoja de cálculo de LibreOffice Calc (en este caso, si fuera de Microsoft Excel no habría diferencias), en la que debemos estar seguros de que no existen filas (registros) con valores duplicados en una o varias columnas (campos).

Veamos los pasos para controlar la existencia de valores duplicados que pudieran desvirtuar el resultado final de nuestra hoja de cálculo.

Antes de comenzar debemos tener claro si:

  • Los posibles valores duplicados sólo se encuentran en una columna (campo), o
  • si para saber si una fila (registro) está duplicada necesitamos comprobar los valores de varias columnas. La unión o concatenación de esos valores nos indica si la fila está repetida o no.

También hemos de tener en cuenta si sólo queremos saber cuáles son los registros duplicados o si además necesitamos saber las veces que se repite o el orden que ocupa en cada repetición.

Los posibles valores duplicados se encuentran en una columna y sólo queremos saber cuáles son los registros duplicados

Imagen 1

Este es el caso más sencillo. En nuestro ejemplo (datos ficticios), el campo o la columna de nuestra hoja donde queremos comprobar los duplicados es:

  • Número del Expediente.

Y necesitamos saber si existe algún número de expediente duplicado, sin importarnos los valores que pudieran tener el resto de columnas para la misma fila.

En nuestro ejemplo la hoja tiene solamente 17 filas, sin contar el nombre del campo, en el mundo real puede tener miles de filas. Obviamente, a mayor número de filas, más tiempo empleará Calc en realizar los cálculos necesarios.

Imagen 2

Podríamos usar el Formato Condicional (ver el artículo LibreOffice Calc: Formato condicional -primera parte-) pero, en este caso, nos interesa tener el resultado en otra columna.

Antes de continuar se debe ordenar ascendentemente por la columna a comprobar, bien mediante el menú “Datos > Ordenar …” o por la opción “Ordenar ascendentemente” si tenemos un filtro activo.

Imagen 3

1. Una vez ordenado ascendentemente, en una columna “auxiliar”, en este caso la B, y en la primera fila a comprobar, la 2, escribimos la función:

       Celda B2 =(A2=A1)

Esta fórmula devuelve VERDADERO o FALSO dependiendo si el valor de la celda  A2 es igual o no al valor de la celda A1.

Imagen 4
2. Copiamos B2 y pegamos en el rango B3:B18. Si nos interesara eliminar las filas duplicadas (valor VERDADERO) entonces seguiremos estos pasos:
  • Seleccionaremos el rango B2:B18.
  • Pincharemos en Datos > Calcular > Fórmula a valor.
  • Ordenaremos ascendentemente esa misma columna B.
  • Seleccionaremos los valores VERDADEROS (duplicados), que se mostrarán al final ya que el valor FALSO se ordena antes y …
  • Eliminaremos las filas completas (ver Imagen 5).
 ¡Atención! La primera vez que aparece un expediente no está duplicado.
Seleccionamos las líneas duplicadas y las eliminamos
Imagen 5

Los posibles valores duplicados sólo se encuentran en una columna y nos interesa saber cuántos son y su orden de aparición

Nos volvemos a fijar en la Imagen 1 pero esta vez necesitamos saber cuántas veces aparece cada uno de los números de expediente y, si se repite, saber el orden de repetición, es decir, cuándo es la primera vez que aparece, cuándo es la segunda, la tercera, y así sucesivamente, sin importarnos los valores que pudieran tener el resto de columnas para la misma fila.

Imagen 6

1. En una columna “auxiliar”, en este caso la B, y en la primera fila a comprobar, la 2, escribimos la función:

       Celda B2 =CONTAR.SI($A$2:$A$18;A2)

Esta función devuelve el número de celdas en un rango que cumplen un determinado requisito o criterio.

En nuestro caso, el rango es $A$2:$A$18 (columna A / campo Número del Expediente) y el requisito es que sea igual al valor contenido en la celda A2. Le estamos preguntando a Calc cuántas veces aparece el número del expediente 234307333 entre todos los números de expediente. ¿Por qué escribimos el signo $ delante de la columna y de la fila del rango? Para que al copiar hacia abajo la función no modifique la dirección de ese rango. Es lo que se denomina una referencia absoluta, es decir, en todas las celdas donde peguemos esa función, el rango donde compara siempre será el mismo. Por el contrario A2 es una referencia relativa, es decir, irá modificándose de acuerdo a la posición relativa de la celda donde peguemos la función. Cuando peguemos B2 en B3 veremos que figura

Celda B3 =CONTAR.SI($A$2:$A$18;A3)

Y así con todas las celdas del rango B3:B18.

Para saber más sobre referencias absolutas y relativas consulta la Ayuda de LibreOffice Calc.

Imagen 7

2. Vemos que los números de expedientes 234307333 y 238205028 se encuentran tres veces cada uno y el número de expediente 239471386 se encuentra dos veces.

Como hemos comentado al principio de este artículo, también necesitamos saber el orden de aparición porque, cuando un número de expediente aparece por primera vez, esa vez no está repetido. Estará repetido la segunda, tercera, etc., vez que aparezca.

Por esta razón es importante conocer el orden de aparición.

Imagen 8

3. En otra columna “auxiliar”, en este caso la C, y en la primera fila a comprobar, la 2, escribimos la función:

       Celda C2 =CONTAR.SI($A$2:A2;A2)

Es la misma función pero si observamos bien el rango, ya no es todo el rango de la columna con números de expediente si no solamente la primera celda a comprobar de la columna A. También nos hemos dado cuenta que sólo la celda $A$2 es una referencia absoluta mientras que la celda final del rango A2 es una referencia relativa.

¿Por qué escribimos el signo $ sólo delante de la columna y de la fila de la primera celda del rango? Para que al copiar hacia abajo la función no modifique la dirección de esa primera celda del rango. En todas las celdas donde peguemos esa función, la primera celda del rango donde compara siempre será la misma. Por el contrario A2 irá modificándose de acuerdo a la posición relativa de la celda donde peguemos la función. A este tipo de referencia, mitad absoluta, mitad relativa, se le denomina referencia mixta. Cuando peguemos C2 en C3 veremos que figura

Celda C3 =CONTAR.SI($A$2:A3;A3)

Y así con todas las celdas del rango C3:C18.

Si no habéis consultado antes en la Ayuda de LibreOffice Calc el tema de las referencias absolutas, relativas y mixtas, este es un buen momento … El saber cómo trabaja Calc con estos tipos de referencias os ahorrará muchos quebraderos de cabeza.

Imagen 9

4. Con la ayuda de un filtro (menú Datos > Filtro automático) controlaremos y visualizaremos mejor los números de expediente repetidos.

En el filtro de la columna “B” desmarcamos “1” que son los números de expediente que no se repiten y dejamos marcados todos los demás.

Imagen 10

5. Vemos que la primera aparición del expediente 234307333 se produce en la fila 2, la segunda en la fila 8 y la tercera en la fila 18.

Imagen 11

6. Si en el filtro de la columna “C” desmarcamos “1” dejamos marcados todos los demás se nos mostrarán los números de expediente verdaderamente repetidos.

Y …

Imagen 12

7. … Se pueden seleccionar esas filas repetidas y eliminarlas (botón derecho del ratón y en el menú contextual seleccionar “Eliminar …”), si eso es lo que nos interesa, obviamente.

Imagen 13

8. O se puede crear una tabla dinámica con el campo “Expte Orden de aparición” en la zona de “Campos de página” para poder filtrar convenientemente …

Imagen 14

9. …Y sólo tener en cuenta la primera aparición de cada expediente, es decir, los expedientes no repetidos …

Como habéis podido comprobar, la columna “B” realmente no es necesaria pero se ha incluido para una mejor comprensión del caso.

Los posibles valores duplicados se encuentran en la unión de varias columnas

En este caso, la unión o concatenación de los valores de varias columnas es lo que nos identifica si una fila está repetida o no, pero hay que tener en cuenta que los valores de esas columnas pueden ser de varios tipos: fecha, números enteros (sin decimales), números reales (con decimales), texto, etc. Volvamos por un momento a primaria, ¿qué es lo primero que hacíamos para comparar fracciones con distinto denominador? Lo primero era poner un denominador común para encontrar una fracción equivalente porque si no no se podían comparar.

Entonces, ¿cómo creamos un denominador común, en nuestro caso, un formato común, con los valores de varias columnas para poder comparar? Pues bien, debemos convertir los campos a unir a formato texto. Nos ayudaremos de la función TEXTO(Número; Formato) que convierte un Número en un texto según un Formato determinado.

Consultar la Ayuda de LibreOffice para más información sobre esta función y los formatos posibles.

Imagen 15

En este ejemplo, para comprobar si existen filas duplicadas tenemos que tener en cuenta tres campos o columnas:

  • Fecha del Expediente.
  • Número del Expediente.
  • Importe.
Imagen 16

En una columna “auxiliar”, en este caso la D, y en la primera fila a comprobar, la 2, escribimos la fórmula:

=TEXTO(A2;”AAAAMMDD”)&”-“&TEXTO(B2;”000000000″)&”-“& TEXTO(100*C2;”00000000”)

  • TEXTO(A2;”AAAAMMDD”). Convierte una fecha (A2 = 10/01/2016), en un texto (parece un número pero no lo es, informáticamente hablando): “20160110”.
  • TEXTO(100*C2;”00000000″). Convierte un número (C2 = 23.523,24), multiplicándolo por 100 para eliminar los decimales, en un texto rellenando con ceros a la izquierda si el número tiene menos cifras que ceros tiene el formato: “02352324”.
  • & (en inglés ampersand y en español et): Operador para unir dos textos. Es como el signo + para sumar dos números pero en versión texto.
  • En lugar del operador anterior podríamos usar la función CONCATENAR():

   =CONCATENAR(TEXTO(A2;”AAAAMMDD”);”-“;TEXTO(B2;”000000000″);”-“;TEXTO(100*C2;”00000000”))

Imagen 17

A partir de aquí repetiríamos los pasos desde el número 1 del apartado anterior, teniendo en cuenta que la columna a contar ahora es la D:

       Celda E2 =CONTAR.SI($D$2:$D$18;D2)

       Celda F2 =CONTAR.SI($D$2:D18;D2)

Este artículo se ha escrito utilizando LibreOffice Writer, Calc e Impress 6.1.5 en su versión empresarial, antes llamada “estable”.

Saludos cordiales.


Si te ha gustado este artículo, compártelo en tus redes sociales. Y no dejes de echar un vistazo a nuestra sección de Tecnología Práctica.