Jak uzyskać przecięcie dwóch zestawów

17

Mam dwie listy (unikalne zestawy) w arkuszu kalkulacyjnym i chcę uzyskać ich przecięcie.

Czy jest na to łatwy sposób?

Oto przykład tego, co chcę osiągnąć:

Lista 1 Lista 2 Oczekiwany wynik

 a 1 e
 b 2 f
 ce      
 d 4      
 ef      
 f 6      

Przykładowy arkusz Google

NoamNelke
źródło
Czy możesz podzielić się z nami dokumentem i wyjaśnić nieco oczekiwany wynik?
Jacob Jan Tuinstra

Odpowiedzi:

21

Nie ma potrzeby wskakiwania do GAS, standardowe funkcje arkuszy kalkulacyjnych radzą sobie z tym łatwo.

Wklej następujące elementy do komórki w swoim przykładzie

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

Funkcja dopasowania generuje iloczyn kartezjański dwóch pełnych zakresów błędów z wyjątkiem przypadków znalezienia dopasowania. Zwraca wskaźnik do 2. Zakres gdy mecz jest znaleziony.

Funkcja filtrowania wyrzuca wszystkie bzdury i zwraca tylko poprawnie zindeksowane wartości.

IFERROR pomaga uzyskać schludny wynik, jeśli nie znaleziono żadnego meczu w ogóle.

Zakresy mogą mieć dowolną długość, jak wskazuje idiom $ A $ 2: $ A.

Martin Bramwell
źródło
3

Ten mały skrypt porównuje dwa zakresy jako formułę:

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;
}

W swoim arkuszu możesz dodać w komórce D2 następującą formułę:

=COMPARE(A2:A7,B2:B7)

Dodaj skrypt za pomocą menu narzędzi, edytora skryptów.

Jacob Jan Tuinstra
źródło
Z zadowoleniem przyjmuję proste, stare formuły. Mogłem od razu o nich pomyśleć .....
Jacob Jan Tuinstra
1
mógł powinien / powinien być nie mógł .......
Jacob Jan Tuinstra
1
Dzięki, @Jacob! Nigdy nie miałem prawdziwego powodu, aby używać formuł w gDocs - dzięki za otwarcie mnie na ten świat!
NoamNelke,
3

Jeśli szukasz sposobu odjęcia dwóch zakresów (elementów zakresu 1, które nie znajdują się w zakresie 2), takich jak:

List 1  List 2  Expected result

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

Oto formuła dla Ciebie:

=iferror(filter($A$2:$A, iserror(match($A$2:$A, B2:$B , false))), "no match")
Zhenya Morozov
źródło
0

Ten mały skrypt porównuje dwa zakresy jako formułę:

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;
}

Dodatkowy:

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;
}

W swoim arkuszu możesz dodać w komórce D2 następującą formułę:

=intersect(A2:A7,B2:B7)

Dodaj skrypt za pomocą menu narzędzi, edytora skryptów.

= przecięcie (A2: A7, B2: B7) zwraca wyniki, które występują na obu tablicach tablica 1, tablica 2.

= extersect (A2: A7, B2: B7) zwraca wartości z tablicy 1, która nie istnieje w zakresie B2: B7

GlobeCore.com
źródło