Как получить пересечение двух множеств


16

У меня есть два списка (уникальных набора) в электронной таблице, и я хочу, чтобы пересечение этих двух.

Есть простой способ сделать это?

Вот пример того, чего я хочу достичь:

Список 1 Список 2 Ожидаемый результат

 1 е
 б 2 ф
 в.п.      
 д 4      
 эф      
 f 6      

Пример Google Sheet


Можете ли вы поделиться с нами документом и немного объяснить ожидаемый результат?
Джейкоб Ян Туинстра

Ответы:


20

Нет необходимости переходить в GAS, стандартные функции обработки электронных таблиц легко справляются с этим.

Пожалуйста, вставьте следующее в ячейку в вашем примере

=iferror(filter($A$2:$A, match($A$2:$A, B2:$B , false)), "no match")

Функция соответствия генерирует декартово произведение двух диапазонов, полных ошибок, за исключением случаев, когда найдено совпадение. Он возвращает индекс в диапазоне 2 , когда матч будет найден.

Функция фильтра отбрасывает все дерьмо и возвращает только правильно проиндексированные значения.

ЕСЛИОШИБКА помогает получить аккуратный результат , если нет ссылок на все.

Диапазоны могут быть любой длины, как указано в идиоме $ A $ 2: $ A.


3

Этот маленький скрипт будет сравнивать два диапазона в виде формулы:

function COMPARE(array1, array2) {
  var array = [];  
  for(i=0; i<array1.length; i++) {
    for(j=0; j<array2.length; j++) {
      if(array1[i][0] == array2[j][0]) {
        // the extra square brackets will make it a 2D array, 
        // aligning it vertically
        array.push([array1[i][0]]);
      }
    }
  }
  return array;
}

В свой лист вы можете добавить в ячейку D2 следующую формулу:

=COMPARE(A2:A7,B2:B7)

Добавьте скрипт через меню инструментов, редактор скриптов.


Я приветствую простые старые формулы. Я мог думать о них немедленно .....
Джейкоб Ян Туинстра

1
мог бы / должен быть не мог .......
Джейкоб Ян Туинстра

1
Спасибо, @Jacob! У меня никогда не было реальной причины использовать формулы в gDocs - спасибо за то, что открыли мне этот мир!
NoamNelke

3

Если вы ищете, как найти вычитание двух диапазонов (элементы диапазона 1, которые не находятся в диапазоне 2), например:

List 1  List 2  Expected result

 a       1        a
 b       2        b
 c       e        c
 d       4        d
 e       f      
 f       6    

Вот формула для вас:

=iferror(filter($A$2:$A, iserror(match($A$2:$A, B2:$B , false))), "no match")

0

Этот маленький скрипт будет сравнивать два диапазона в виде формулы:

function intersect(array1, array2) {
  var array = [];  
  for(i=0; i<array1.length; i++) {
    for(j=0; j<array2.length; j++) {
      if(array1[i][0] == array2[j][0]) {
        // the extra square brackets will make it a 2D array, 
        // aligning it vertically
        array.push([array1[i][0]]);
      }
    }
  }
  return array;
}

Дополнительно:

function extersect(array1, array2) {
  var array = [];  
  var tmp = true;
  for(i=0; i<array1.length; i++) {
    for(j=0; j<array2.length; j++) {
      if(array1[i][0] == array2[j][0]) {
        // the extra square brackets will make it a 2D array, 
        // aligning it vertically
        tmp = false;
      }      
    }
    if(tmp == true) 
    {
      array.push([array1[i][0]]);
    }
    tmp = true;
  }
  return array;
}

В свой лист вы можете добавить в ячейку D2 следующую формулу:

=intersect(A2:A7,B2:B7)

Добавьте скрипт через меню инструментов, редактор скриптов.

= intersect (A2: A7, B2: B7) возвращает результаты, которые присутствуют в обоих массивах array1, array2.

= extersect (A2: A7, B2: B7) возвращает значения массива1, которого нет в диапазоне B2: B7

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.