Comparar 2 filas para luego mostrar datos faltantes

Se tiene una hoja tal como se muestra a continuación:
                ColA ColB ColC ColD ColE ColF ...
Fila 1 Juan Pedro Pablo Felipe Cristobal Eduardo
Fila 2 Juan Felipe
En dicha hoja se pueden apreciar datos en la Fila 1 y en la Fila 2 en donde hay una lista de nombres. La idea es que luego de ejecutar la macro, ésta me entregue como resultado los nombres faltantes en la Fila 2.. Poniéndolos uno a uno en las columnas que le siguen ..
El resultado final se debería ver de la siguiente forma:
                ColA ColB ColC ColD ColE ColF ...
Fila 1 Juan Pedro Pablo Felipe Cristobal Eduardo
Fila 2 Juan Felipe Pedro Pablo Crostobal Eduardo
He intentado de hacerlo mediante varias funciones pero he fracasado ya en varios intentos. Te adjunto un código relacionado para que me ayudes desde éste para que salga más fácil y rápida tu ayuda, de antemano muchas gracias.
Sub nombres()
Sheets("Hoja1").Select
Range("A1").Select
While ActiveCell.Value <> ""
nombre1 = Range("A1").Value
Range("A2").Select
While ActiveCell.Value <> ""
    nombre2 = ActiveCell.Value
    If nombre1 = nombre2 Then
    Else
    Range("A2").Offset(0, 1).End(xlToRight) = nombre1
    End If
    Wend
    ActiveCell.Offset(0, 1).Select
    Wend
End Sub

1 Respuesta

Respuesta
1
El problema que se queda "pensando para siempre" es porque utilizas un While y esa condición que tiene nunca es falsa de allí que se queda allí siempre.
Deberías cambiar los while por unos for que si tendrían un limite, si el numero de columnas es variable en la primera linea que es la base de la comparación, entonces colócale un limite a tu programa solo funciona para máximo 50 columnas por ejemplo.
El rango en que pegaba el "nombre1" estaba claramente malo ya que me lo pegaba al final de la ultima columna existente en excel..
El código en que estoy trabajando hasta el momento es el siguiente:
Sub nombres()
Range("A1").Select
While ActiveCell.Value <> ""
nombre1 = Range("A1").Value
Range("A2").Select
While ActiveCell.Value <> ""
nombre2 = Range("A2").Value
If nombre1 = nombre2 Then
Else:
MsgBox (nombre1 & "    no es igual a    " & nombre2)
Range("Z2").End(xlToLeft).Offset(0, 1).FormulaR1C1 = nombre1
End If
Wend
ActiveCell.Offset(0, 1).Select
Wend
End Sub
En donde al correrlo se queda pensando para siempre (error en la comparación del nombre 1 = nombre 2)
Claro, un "for" vendría de lo más bien.
En estos minutos que pasaron se me ocurrió utilizar un "Do whie" que en caso de que encuentre el nombre termine dicha rutina que antes parecía infinita.
Mi código actualizado es el siguiente, pero sigue estando erróneo debido a no se me ocurre una forma de declarar de mejor forma lavariable "nombre2) ya que al ejecutar eñ nuevo código que te adjuntaré me escribe infinitamente el nombre nuevo no encontrado en la fila 2...
En caso de que encuentres una forma alternativa de resolverlo, se agradecería mucho.
Código:
Sub nombre()
Range("A1").Select
While ActiveCell.Value <> ""
nombre1 = ActiveCell.Value
Range("A2").Select
Do While ActiveCell.Value <> ""
nombre2 = ActiveCell.Value
If nombre1 = nombre2 Then
Exit Do
Else:
Range("Z2").End(xlToLeft).Offset(0, 1).FormulaR1C1 = nombre1
End If
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(0, 1).Select
Wend
End Sub
Debes hacer una pregunta para cada campo, por eso solo preguntas por nombre 2 debes hacerlo para cada columna o campo que quieres copiar
Tuve que enfocarlo completamente de otra forma para poder resolverlo...
Te adjunto como terminó el código en caso de ineteresarte.
Sub nombre2()
Range("A1").Select
While ActiveCell.Value <> ""
nombre1 = [1:1].Find(What:=ActiveCell.Value)
On Error Resume Next
nombre3 = [2:2].Find(What:=nombre1)
If nombre3 = nombre1 Then
Else
    Range("Z2").End(xlToLeft).Offset(0, 1).FormulaR1C1 = nombre1
End If
ActiveCell.Offset(0, 1).Select
Wend
End Sub
Saludos
Super que lo hayas podidoresolver

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas