วิธีการหาจุดตัดของสองชุด


17

ฉันมีสองรายการ (ชุดที่ไม่ซ้ำกัน) ในสเปรดชีตและฉันต้องการได้จุดตัดของทั้งสอง

มีวิธีง่าย ๆ ในการทำเช่นนี้?

นี่คือตัวอย่างของสิ่งที่ฉันต้องการบรรลุ:

รายการ 1 รายการ 2 ผลลัพธ์ที่คาดหวัง

 a 1 e
 ข 2 f
 CE      
 d 4      
 EF      
 ฉ 6      

ตัวอย่าง Google ชีต


คุณสามารถแบ่งปันเอกสารกับเราและอธิบายผลลัพธ์ที่คาดหวังได้บ้างไหม?
Jacob Jan Tuinstra

คำตอบ:


21

ไม่จำเป็นต้องกระโดดเข้าไปใน GAS ฟังก์ชั่นสเปรดชีตมาตรฐานจัดการเรื่องนี้ได้อย่างง่ายดาย

โปรดวางสิ่งต่อไปนี้ลงในเซลล์ในตัวอย่างของคุณ

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

จับคู่ฟังก์ชั่นสร้างผลิตภัณฑ์คาร์ทีเซียนของทั้งสองช่วงเต็มรูปแบบของข้อผิดพลาดยกเว้นในกรณีที่การแข่งขันพบ มันกลับ index เข้าไปในช่วงที่ 2 เมื่อการแข่งขันจะพบ

กรองฟังก์ชั่นพ่นออกทั้งหมดอึและผลตอบแทนเฉพาะค่าจัดทำดัชนีได้อย่างถูกต้อง

IFERRORช่วยให้ได้รับผลเป็นระเบียบเรียบร้อยถ้ามีการแข่งขันที่ไม่ทั้งหมด

ช่วงสามารถมีความยาวเท่าใดก็ได้ตามที่ระบุโดยสำนวน $ 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)

เพิ่มสคริปต์ผ่านเมนูเครื่องมือตัวแก้ไขสคริปต์


ฉันยินดีต้อนรับสูตรเก่าธรรมดา ฉันจะนึกถึงพวกเขาในทันที .....
Jacob Jan Tuinstra

1
ทำได้ / ต้องไม่สามารถ .......
Jacob Jan Tuinstra

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) ส่งคืนผลลัพธ์ที่มีอยู่ในทั้งสองอาร์เรย์ 1 อาร์เรย์ 1

= extersect (A2: A7, B2: B7) ส่งคืนค่าของ array1 ที่ไม่มีอยู่ในช่วง B2: B7

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.