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


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.


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.


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")

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.