Сравнивая две ячейки и покажи обе, когда они не равны - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть таблица в EXCEL, которая выглядит следующим образом:

ATTRIBUTE_IN_1|TYPE_IN_1|ATTRIBUTE_IN_2 |TYPE_IN_2      |
________________________________________________________
advance       |String   | accounts      |decimal(20,10) |
education     |String   | Job_category  |String         |
date of birth |date     | advance       |decimal(20,10) |

и т. Д.

Я хочу сравнить TYPE_IN_1 и TYPE_IN_2 (2-й и 4-й столбцы) дляравные значения в ATTRIBUTE_IN_1 и ATTRIBUTE_IN_2 (1-й и 3-й столбцы).

В результате я хочу видеть значения, когда ATTRIBUTE_IN_1 и ATTRIBUTE_IN_2 имеют одинаковое значение, а TYPE_IN_1 и TYPE_IN_2 (2-й и 4-й столбцы) имеют неравные значения.

Для этого примера в результате я хочу увидеть:

ATTRIBUTE_IN_1|TYPE_IN_1|ATTRIBUTE_IN_2 |TYPE_IN_2      |
_______________________________________________________
advance       |String   | advance       |decimal(20,10) |

Какую формулу я могу использовать в MS EXCEL для решения этой проблемы?

1 Ответ

0 голосов
/ 20 декабря 2018

Excel на самом деле не подходит для такого типа вопросов.Вы можете сделать что-то вместе, возможно, по этим линиям (для атрибута 1):

=IFERROR(INDEX($A$2:$A$10,INT(SMALL(IF(($A$2:$A$10=TRANSPOSE($C$2:$C$10))*($B$2:$B$10<>TRANSPOSE($D$2:$D$10)),
ROWS($A$2:$A$10)*(ROW($A$2:$A$10)-ROW($A$2))+TRANSPOSE(ROW($A$2:$A$10)-ROW($A$2))),ROW(1:1))/ROWS($A$2:$A$10))+1),"")

Это устанавливает 2D-массив, где строки - это атрибут 1, а столбцы - атрибут 2.Элементы массива, в которых есть конфликт, устанавливаются в 1. Остальная часть формулы - вывести соответствующие значения в порядке строк / столбцов.

Для типа 1:

=IFERROR(INDEX($B$2:$B$10,INT(SMALL(IF(($A$2:$A$10=TRANSPOSE($C$2:$C$10))*($B$2:$B$10<>TRANSPOSE($D$2:$D$10)),
ROWS($A$2:$A$10)*(ROW($A$2:$A$10)-ROW($A$2))+TRANSPOSE(ROW($A$2:$A$10)-ROW($A$2))),ROW(1:1))/ROWS($A$2:$A$10))+1),"")

Для типа 2:

=IFERROR(INDEX($D$2:$D$10,MOD(SMALL(IF(($A$2:$A$10=TRANSPOSE($C$2:$C$10))*($B$2:$B$10<>TRANSPOSE($D$2:$D$10)),
ROWS($A$2:$A$10)*(ROW($A$2:$A$10)-ROW($A$2))+TRANSPOSE(ROW($A$2:$A$10)-ROW($A$2))),ROW(1:1)),ROWS($A$2:$A$10))+1),"")

enter image description here

Интересно сравнить это с SQL для того же, например, в SQLite:

.mode csv
.import book2.csv test1
select a.attribute_in_1,a.type_in_1,b.type_in_2
from
test1 a inner join test1 b
on a.attribute_in_1=b.attribute_in_2 and a.type_in_1<>b.type_in_2;

enter image description here

...