Cara mendapatkan persimpangan dua set


16

Saya memiliki dua daftar (set unik) dalam spreadsheet dan saya ingin mendapatkan persimpangan keduanya.

Apakah ada cara mudah untuk melakukan ini?

Berikut ini contoh yang ingin saya capai:

Daftar 1 Daftar 2 Hasil yang diharapkan

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

Contoh Google Sheet


Bisakah Anda berbagi dokumen dengan kami dan menjelaskan hasil yang diharapkan sedikit?
Jacob Jan Tuinstra

Jawaban:


20

Tidak perlu beralih ke GAS, fungsi spreadsheet standar menangani ini dengan mudah.

Harap tempelkan yang berikut ke sel dalam contoh Anda

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

Fungsi kecocokan menghasilkan produk kartesius dari dua rentang penuh kesalahan kecuali di mana kecocokan ditemukan. Ia mengembalikan indeks ke-2 kisaran ketika pertandingan yang ditemukan.

Fungsi filter membuang semua sampah dan hanya mengembalikan nilai yang diindeks dengan benar.

The IFERROR membantu untuk mendapatkan hasil rapi jika tidak ada pertandingan sama sekali.

Rentangnya bisa berapa pun, seperti yang ditunjukkan oleh idiom $ A $ 2: $ A.


3

Skrip kecil ini akan membandingkan dua rentang, sebagai rumus:

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

Di lembar Anda, Anda dapat menambahkan dalam sel D2 rumus berikut:

=COMPARE(A2:A7,B2:B7)

Tambahkan skrip melalui menu alat, skrip editor.


Saya menyambut formula lama yang sederhana. Saya bisa memikirkan mereka segera .....
Jacob Jan Tuinstra

1
bisa seharusnya / tidak bisa tidak .......
Jacob Jan Tuinstra

1
Terima kasih, @ Jacob! Saya tidak pernah memiliki alasan nyata untuk menggunakan formula di gDocs - terima kasih telah membuka saya ke dunia ini!
NoamNelke

3

Jika Anda mencari cara untuk mengurangi dua rentang (elemen dari rentang 1 yang tidak di kisaran 2), seperti:

List 1  List 2  Expected result

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

Berikut ini rumus untuk Anda:

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

0

Skrip kecil ini akan membandingkan dua rentang, sebagai rumus:

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

Tambahan:

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

Di lembar Anda, Anda dapat menambahkan dalam sel D2 rumus berikut:

=intersect(A2:A7,B2:B7)

Tambahkan skrip melalui menu alat, skrip editor.

= intersect (A2: A7, B2: B7) mengembalikan hasil yang ada pada kedua array1 array1, array2.

= extersect (A2: A7, B2: B7) mengembalikan nilai-nilai array1 yang tidak ada dalam rentang B2: B7

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.