Làm thế nào để có được giao điểm của hai bộ


16

Tôi có hai danh sách (bộ duy nhất) trong một bảng tính và tôi muốn có giao điểm của hai.

Có cách nào làm dễ hơn không?

Đây là một ví dụ về những gì tôi muốn đạt được:

Danh sách 1 Danh sách 2 Kết quả mong đợi

 1 e
 b 2 f
 ce      
 ngày 4      
 ef      
 f 6      

Ví dụ Google Sheet


Bạn có thể chia sẻ tài liệu với chúng tôi và giải thích kết quả mong đợi một chút không?
Jacob Jan Tuinstra

Câu trả lời:


20

Không cần phải nhảy vào GAS, các chức năng bảng tính tiêu chuẩn xử lý việc này dễ dàng.

Vui lòng dán phần sau vào một ô trong ví dụ của bạn

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

Hàm so khớp tạo ra một sản phẩm cartesian của hai phạm vi đầy lỗi trừ trường hợp tìm thấy kết quả khớp. Nó trả về một chỉ số vào trong phạm vi 2 khi một trận đấu được tìm thấy.

Hàm bộ lọc sẽ loại bỏ tất cả các crap và chỉ trả về các giá trị được lập chỉ mục chính xác.

Các hàm IFERROR giúp để có được một kết quả gọn gàng nếu không có trận đấu nào cả.

Các phạm vi có thể có độ dài bất kỳ, như được biểu thị bằng thành ngữ $ A $ 2: $ A.


3

Kịch bản nhỏ này sẽ so sánh hai phạm vi, như một công thức:

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

Trong trang tính của bạn, bạn có thể thêm vào ô D2 công thức sau:

=COMPARE(A2:A7,B2:B7)

Thêm tập lệnh thông qua menu công cụ, trình soạn thảo tập lệnh.


Tôi hoan nghênh công thức cũ đơn giản. Tôi có thể nghĩ về họ ngay lập tức .....
Jacob Jan Tuinstra

1
có thể / phải là không thể .......
Jacob Jan Tuinstra

1
Cảm ơn, @Jacob! Tôi chưa bao giờ có lý do thực sự để sử dụng các công thức trong gDocs - cảm ơn vì đã mở cửa cho tôi đến với thế giới này!
NoamNelke

3

Trong trường hợp bạn đang tìm cách tìm phép trừ hai phạm vi (các phần tử của phạm vi 1 không nằm trong phạm vi 2), như:

List 1  List 2  Expected result

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

Đây là một công thức cho bạn:

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

0

Kịch bản nhỏ này sẽ so sánh hai phạm vi, như một công thức:

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

Thêm:

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

Trong trang tính của bạn, bạn có thể thêm vào ô D2 công thức sau:

=intersect(A2:A7,B2:B7)

Thêm tập lệnh thông qua menu công cụ, trình soạn thảo tập lệnh.

= giao nhau (A2: A7, B2: B7) trả về các kết quả có trên cả hai mảng mảng1, mảng2.

= extersect (A2: A7, B2: B7) trả về các giá trị của mảng1 không tồn tại trong phạm vi B2: B7

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.