Hi, Bob G.!
Give a look at the uploaded file. It compare 2 lists (ID & Attribute) in columns A:B vs D:E, generating a list of duplicate IDs in column G and a list of unique IDs in column H. Aside in columns I:K you'd get the status of Added, Deleted or Changed.
It uses many dynamic named ranges as follows:
Data1Table: =DESREF(Hoja1!$A$2;;;CONTARA(Hoja1!$A:$A)-1;2) -----> in english: =OFFSET(Hoja1!$A$2,,,COUNTA(Hoja1!$A:$A)-1,2)
Data2Table: =DESREF(Hoja1!$D$2;;;CONTARA(Hoja1!$D:$D)-1;2) -----> in english: =OFFSET(Hoja1!$D$2,,,COUNTA(Hoja1!$D:$D)-1,2)
IDDupList: =DESREF(Hoja1!$G$2;;;FILAS(Data1Table)+FILAS(Data2Table);1) -----> in english: =OFFSET(Hoja1!$G$2,,,ROWS(Data1Table)+ROWS(Data2Table),1)
IDUniqueList: =DESREF(Hoja1!$H$2;;;CONTAR(Hoja1!$H:$H);1) -----> in english: =OFFSET(Hoja1!$H$2,,,COUNT(Hoja1!$H:$H),1)
Just 2 things:
- Get sure you copy formula in G2 down until at least the 1st N/A error gets displayed
- Prepared for numeric ID values, so in COUNT function used in IDUniqueList definition; if not numeric, switch to the proper count function or expression
Formulas:
G2: =SI(FILA()-1<=FILAS(Data1Table);INDICE(Data1Table;FILA()-1;1);SI(FILA()-1<=FILAS(Data1Table)+FILAS(Data2Table);INDICE(Data2Table;FILA()-1-FILAS(Data1Table);1);NOD())) -----> in english: =IF(ROW()-1<=ROWS(Data1Table),INDEX(Data1Table,ROW()-1,1),IF(ROW()-1<=ROWS(Data1Table)+ROWS(Data2Table),INDEX(Data2Table,ROW()-1-ROWS(Data1Table),1),NA()))
H2: =INDICE(IDDupList;COINCIDIR(0;INDICE(CONTAR.SI(H$1:H1;IDDupList);0;0);0)) -----> in english: =INDEX(IDDupList,MATCH(0,INDEX(COUNTIF(H$1:H1,IDDupList),0,0),0))
I2: =SI(FILA()-1<=FILAS(IDUniqueList);SI(ESNOD(BUSCARV($H2;Data1Table;1;FALSO));"X";"");"") -----> in english: =IF(ROW()-1<=ROWS(IDUniqueList),IF(ISNA(VLOOKUP($H2,Data1Table,1,FALSE)),"X",""),"")
J2: =SI(FILA()-1<=FILAS(IDUniqueList);SI(ESNOD(BUSCARV($H2;Data1Table;1;FALSO));"";SI(ESNOD(BUSCARV($H2;Data2Table;1;FALSO));"X";""));"") -----> in english: =IF(ROW()-1<=ROWS(IDUniqueList),IF(ISNA(VLOOKUP($H2,Data1Table,1,FALSE)),"",IF(ISNA(VLOOKUP($H2,Data2Table,1,FALSE)),"X","")),"")
K2: =SI(FILA()-1<=FILAS(IDUniqueList);SI(ESNOD(BUSCARV($H2;Data1Table;1;FALSO));"";SI(ESNOD(BUSCARV($H2;Data2Table;1;FALSO));"";SI(BUSCARV($H2;Data1Table;2;FALSO)=BUSCARV($H2;Data2Table;2;FALSO);"";"X")));"") -----> in english: =IF(ROW()-1<=ROWS(IDUniqueList),IF(ISNA(VLOOKUP($H2,Data1Table,1,FALSE)),"",IF(ISNA(VLOOKUP($H2,Data2Table,1,FALSE)),"",IF(VLOOKUP($H2,Data1Table,2,FALSE)=VLOOKUP($H2,Data2Table,2,FALSE),"","X"))),"")
Copy down as required.
Just advise if any issue.
Regards!