Як отримати перетин двох множин


17

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

Чи є простий спосіб це зробити?

Ось приклад того, що я хочу досягти:

Список 1 Список 2 Очікуваний результат

 a 1 е
 b 2 f
 се      
 d 4      
 еф      
 f 6      

Приклад Google Sheet


Чи можете ви поділитися з нами документом і трохи пояснити очікуваний результат?
Яків Ян Туінстра

Відповіді:


21

Не потрібно стрибати в 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)

Додайте скрипт через меню інструментів, редактор сценаріїв.

= перетинається (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.