Comparar 2 columnas y resultado en una tercera.

He aquí el dilema:
Tengo una tabla con dos columnas con palabras:
(A)                               (B)
Casa Antonio
Perro Juanito
Gato Feo
Juanito Casa
Masticar Felpudo
Lo que necesito es una fórmula que genere una tercera columna (C) con las palabras que hay en B que no estén en A. Es decir:
(C)
Antonio
Feo
Felpudo
Naturalmente mayúsculas y minúsculas no deben importar y mucho menos las tildes.

2 Respuestas

Respuesta
1
Estoy en ello, dame un poco de tiempo y te adjunto la solución.
De nuevo bitt, despúes de divagar un poco, se me ha ocurrido via código VB y ahi te adjunto dicho código. Te hago notar que para evitar el tema de los acentos, los elimino de la columna A:B y tambien lo cambio todo a mayusculas, si esto te genera problemas, me lo comentas.
Private Sub CommandButton1_Click()
   Columns("A:B").Replace What:="á", Replacement:="A", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="é", Replacement:="E", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="í", Replacement:="I", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="ó", Replacement:="O", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="ú", Replacement:="U", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    For Each mivalor In Range("A:B")
      If mivalor <> Empty Then Range(mivalor.Address) = UCase(mivalor.Value)
    Next
    f = 1
    ff = 1
    Range(Cells(f, 3), Cells(f, 3).End(xlDown)) = ""
    Do While Cells(f, 2) <> Empty
      With Range("a:a")
          Set c = .Find(Cells(f, 2), LookIn:=xlValues)
          If c Is Nothing Then
                  Cells(ff, 3) = Cells(f, 2)
                  ff = ff + 1
          End If
      End With
      f = f + 1
    Loop
End Sub
Hola
El Código en Vbasic me compara los valores de la Columna B con la columna A y me pone los valores que no se repiten de B en la columna C, pero tambien necesito que compare A con B al igual que B con A y me ponga los valores en la columna resultante.
Muchas gracias, está muy bien el ejemplo.
Entonces te quedría de la siguiente manera:
Private Sub CommandButton1_Click()
   Columns("A:B").Replace What:="á", Replacement:="A", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="é", Replacement:="E", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="í", Replacement:="I", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="ó", Replacement:="O", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:B").Replace What:="ú", Replacement:="U", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    For Each mivalor In Range("A:B")
      If mivalor <> Empty Then Range(mivalor.Address) = UCase(mivalor.Value)
    Next
    f = 1
    ff = 1
    Range(Cells(f, 3), Cells(f, 3).End(xlDown)) = ""
    Do While Cells(f, 2) <> Empty
      With Range("a:a")
          Set c = .Find(Cells(f, 2), LookIn:=xlValues)
          If c Is Nothing Then
                  Cells(ff, 3) = Cells(f, 2)
                  ff = ff + 1
          End If
      End With
      f = f + 1
    Loop
    f = 1
    Do While Cells(f, 1) <> Empty
      With Range("b:b")
          Set c = .Find(Cells(f, 1), LookIn:=xlValues)
          If c Is Nothing Then
                  Cells(ff, 3) = Cells(f, 1)
                  ff = ff + 1
          End If
      End With
      f = f + 1
    Loop
End Sub
Hola,
Muchas gracias, por la respuesta, he podido ver ejemplos con Formulas mitrotti, y este ejemplo contigo de VB. Es estupendo, he aprendido bastante.
Muchas gracias.
Respuesta
1
Según entiendo quieres identificar que palabra de la columna B "NO" esta en A, en ese caso intenta lo siguiente:
Supongamos que en la fila 1 tienes los títulos entonces en C2:
=SI(ESERROR(BUSCARV(B2;A:A;1;0));B2;"")
Y luego arrastra esa fórmula para todas las filas donde tengas Datos.
En la columna C te identificara con la misma palabra de B que no esta en A.
Hola,
Gracias por la rápida respuesta, esto hace más o menos lo que solicito pero en el ejemplo que he preparado en el excel, me coge los valores que en la columna B no se encuentran en la columna A, pero si en la columna A hay un valor que no existe en la B no me lo pone en la columna C.
Y necesito exactamente que los valores que no coincidan en ninguna de las columnas aparezca en la columna C.
Muchas Gracias por vuestro tiempo.
Ok, eso no lo habías dicho anteriormente, habías comentado que:
"... Lo que necesito es una fórmula que genere una tercera columna (C) con las palabras que hay en B que no estén en A..."
¿Deseas qué adicional en la tercera columna (C) con las palabras que hay en A que no estén en B? Se puede hacer (Te muestro más adelante) pero hay una condición que podría ocurrir y es por ejemplo:
¿Qué en una misma fila la palabra que están en A y la que esta en B (Diferentes una de la otra) no estén en la otra columna (la de A en la B y viceversa), lo que traería la pregunta de que quieres que te muestre C? Ya que deberían aparecer las dos palabras ya que no están en las otras columnas respectivamente.
Ej:
          A B C
Loro casa
Amigo casa amigo
Casa loro
Luz sombra luz sombra
Aquí te dejo lo que deberás colocar en C y luego arrastrar hasta donde tengas datos para hacer lo que pides y en el caso anterior te colocara las 2 palabras separadas por un espacio.
=CONCATENAR(SI(ESERROR(BUSCARV(B2;A:A;1;0));B2;"");SI(O(C2=0;C2="");"";" ");SI(ESERROR(BUSCARV(A2;B:B;1;0));A2;""))
Hola! Ante todo Gracias de nuevo.
Lo que me has puesto tu lo conseguí en varias tablas, de la siguiente manera:
=SI(ESERROR(BUSCARV(B2:B9;A:A;1;0));B2;"")
=SI(ESERROR(BUSCARV(A2:A9;B:B;1;0));A2;"")
= C2 & " " & D2
La última condición me concatena dos celdas en una. Pero visto tu ejemplo es mucho más limpio que el mio. Muchas gracias, es lo que necesitaba. Y perdona no haberme explicado correctamente la primera vez.
¿Hay alguna manera de separar luz sombra, los casos que dos posiciones se juntan en una?
Muchas gracias
¿Separarlo? ¿En qué sentido?
¿En 2 celdas separadas?
Podrías hacer y creo que es lo que conseguiste es colocar una opción en la columna C y otra condición en la DE (Yo uni las 2 condiciones en la C).
¿Separar por un símbolo en la misma celda? (-  /)
En el código que te envíe en la siguiente parte:
SI(O(C2=0;C2="");"";" ")
cambialo por (si deseas que sea un - lo que separe)
SI(O(C2=0;C2="");"";"-")
Por más que miro alguna fórmula en la que haga lo siguiente, si los valores son
Luz Luz
Perro Perro
Gato Gato
Casa Juan Casa

Pablo Pablo
                             Juan
Quiero que separe las palabras de la celda y las añada al final de la columna. He encontrado algún ejemplo en VB pero con fórmula no consigo nada. Lo único que he conseguido es separarlo en dos celdas pero de distintas columnas.
Gracias
Prueba con el codogo que te di y cambia:
En el código que te envíe en la siguiente parte:
SI(O(C2=0;C2="");"";" ")
cambialo por (si deseas que sea varios espacios que lo separe)
SI(O(C2=0;C2="");"";"         ")
Me comentas
Eso no me hace lo que realmente necesito.
Gracias de todas maneras he conseguido el objetivo inicial. :)
Muy buenas las explicaciones.
En ese caso recuerda puntuar y cerrar la pregunta.
Cualquier otra cosa vuelve a preguntar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas