Material registrado:

    Safe Creative #1709190281730

    Cajón de sastre:

    ¿Está mi número en esta lista?

    Planteamiento del problema

    El problema que pretendemos solucionar con Excel es el siguiente: dada una lista de números de longitud indeterminada contenida en una única celda y teniendo en cuenta que los números van separados por comas, queremos saber si un cierto número está en la lista. Por ejemplo, tenemos esta lista de números:

    2,23,6,8,14,57,9,12,6,3,47

    Y queremos saber si el número 5 está comprendido en ella.

    Soluciones con fórmulas clásicas

    Primera solución

    La primera función de la biblioteca de Excel que viene a la cabeza es =ENCONTRAR, que nos devuelve la posición del caracter o grupo de caracteres buscados. Pero esta función nos dará problemas en un caso como el expuesto. Observemos que si esa lista de números está en la celda A1 y escribimos en celda A2 la función:

    =ENCONTRAR(«5»;A1)

    Nos devuelve el valor 11, es decir, está actuando como si encontrara el número 5, ya que nos está devolviendo el 5 del número 57, y eso es un FALSO POSITIVO que no nos interesa. Luego esta primera solución puede dar FALSOS POSITIVOS.

    Segunda solución

    La segunda solución puede consistir en encontrar primero las posiciones de todas las comas del string, a base de usar consecutivamente la función ENCONTRAR de la forma:

    =ENCONTRAR(«,»;$A$13;B14+1)

    Suponiendo que el texto original está en A13 y la posición de la coma anterior en B14.

    Después podríamos usar =EXTRAER entre cada dos posiciones de comas, luego transformar los strings (todas estas funciones aceptan y devuelven caracteres) a números sin más que sumarles 0, y finalmente usar =CONTAR.SI, que solo nos devolverá 0 si no encuentra el número. Así evitamos los falsos positivos.

    Tercera solución

    Otra solución que no comento en el video puede empezar por la utilidad TEXTO A COLUMNAS, con la coma como separador, lo que nos cribaría los números y nos permitiría otra vez usar =CONTAR.SI.

    Solución con Función Definida por el Usuario

    Función que comprueba presencia de número en una lista
     
    Function COMPROBARNUMERO(queNumero As Long, queString As String) As Boolean
        'Cribado de la cadena de entrada
        COMPROBARNUMERO = False
        Dim qChars As Long, qComas As Long, i As Long, j As Long
        Dim qNums() As String
        qChars = Len(queString)
        'Contamos el número de comas
        For i = 1 To qChars
            If Mid(queString, i, 1) = "," Then qComas = qComas + 1
        Next i
        'El número de números será el de comas más uno
        ReDim qNums(1 To qComas + 1)
        'Cribemos los números entre las comas
        j = 1
        For i = 1 To qChars
            If Mid(queString, i, 1) = "," Then
                j = j + 1
            Else
                qNums(j) = qNums(j) & Mid(queString, i, 1)
            End If
        Next i
        'Tengo el vector qNums() con mis números cribados
        'Si encuentro coincidencia, entonces mi número está en la cadena
        For i = 1 To UBound(qNums)
            If CStr(queNumero) = qNums(i) Then COMPROBARNUMERO = True
        Next i
    End Function

    Os propongo como tarea hacer los cambios pertinentes en esta función para que en lugar de comprobar si está o no un número, compruebe si está o no una palabra en cierta lista de palabras separadas por comas.

    Comments

    This post currently has 4 responses

    • Hola amigo Eloy, felicitaciones por los vídeos, me gustaría contactarme contigo, para que me ayudes con un macro para ingresar datos de 800 alumnos, salida y entrada a la INSTITUCIÓN EDUCATIVA.

      • Le ayudaré si puedo. Por favor, suba el archivo de Excel y un archivo de word explicando claramente cual es su necesidad a una carpeta compartida en dropbox, onedrive u otro servicio similar que tenga.
        Después notifíquemelo a través de un nuevo comentario en este hilo, incluyendo el enlace a esos archivos.
        Finalmente yo me los descargaré e intentaré ayudarle.
        Para cualquier comunicación adicional, podremos usar este hilo de comentarios.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Sidebar



    "

    Si continuas utilizando este sitio, significa que aceptas el uso de cookies. más información

    Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

    Cerrar