ฉันมีสองรายการ (ชุดที่ไม่ซ้ำกัน) ในสเปรดชีตและฉันต้องการได้จุดตัดของทั้งสอง
มีวิธีง่าย ๆ ในการทำเช่นนี้?
นี่คือตัวอย่างของสิ่งที่ฉันต้องการบรรลุ:
รายการ 1 รายการ 2 ผลลัพธ์ที่คาดหวัง a 1 e ข 2 f CE d 4 EF ฉ 6
ฉันมีสองรายการ (ชุดที่ไม่ซ้ำกัน) ในสเปรดชีตและฉันต้องการได้จุดตัดของทั้งสอง
มีวิธีง่าย ๆ ในการทำเช่นนี้?
นี่คือตัวอย่างของสิ่งที่ฉันต้องการบรรลุ:
รายการ 1 รายการ 2 ผลลัพธ์ที่คาดหวัง a 1 e ข 2 f CE d 4 EF ฉ 6
คำตอบ:
ไม่จำเป็นต้องกระโดดเข้าไปใน GAS ฟังก์ชั่นสเปรดชีตมาตรฐานจัดการเรื่องนี้ได้อย่างง่ายดาย
โปรดวางสิ่งต่อไปนี้ลงในเซลล์ในตัวอย่างของคุณ
=iferror(filter($A$2:$A, match($A$2:$A, B2:$B , false)), "no match")
จับคู่ฟังก์ชั่นสร้างผลิตภัณฑ์คาร์ทีเซียนของทั้งสองช่วงเต็มรูปแบบของข้อผิดพลาดยกเว้นในกรณีที่การแข่งขันพบ มันกลับ index เข้าไปในช่วงที่ 2 เมื่อการแข่งขันจะพบ
กรองฟังก์ชั่นพ่นออกทั้งหมดอึและผลตอบแทนเฉพาะค่าจัดทำดัชนีได้อย่างถูกต้อง
IFERRORช่วยให้ได้รับผลเป็นระเบียบเรียบร้อยถ้ามีการแข่งขันที่ไม่ทั้งหมด
ช่วงสามารถมีความยาวเท่าใดก็ได้ตามที่ระบุโดยสำนวน $ A $ 2: $ A
สคริปต์ตัวเล็ก ๆ นี้จะเปรียบเทียบสองช่วงเป็นสูตร:
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 ที่ไม่อยู่ในช่วง 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")
สคริปต์ตัวเล็ก ๆ นี้จะเปรียบเทียบสองช่วงเป็นสูตร:
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