Làm cách nào tôi có thể tìm thấy các bản sao trong một cột, bằng cách sử dụng các công thức?


11

Có ai đã đưa ra một công thức để tìm các bản sao trong một cột không? Ví dụ:

a
b
c
d
b
d

=somefunction(A1:A6)

Đầu ra:

b
d

Tôi biết có một =unique()chức năng, về cơ bản nó là một =not_unique()chức năng. Đã tự hỏi nếu nó có thể được xây dựng mà không cần sử dụng mã.


Dưới đây là một ví dụ trong chủ đề stackoverflow.com/questions/19843406/ này có một cái nhìn về điều này có thể giúp bạn có một số ý tưởng.
Vembu

Đợi đã, thứ bạn đang tìm kiếm là một not_uniquechức năng phải không? Bạn dường như đang tìm kiếm các trường không phải là duy nhất (các bản sao), không phải các trường duy nhất.
David Mulder

Câu trả lời:


16

Giải pháp có thể không có cột bổ sung là:

=FILTER(UNIQUE(A2:A7), ARRAYFORMULA( COUNTIF(A2:A7,UNIQUE(A2:A7))>1 ))

Xin vui lòng, xem ví dụ chuẩn bị ở đây: Tìm bản sao


3

Cách duy nhất tôi tìm thấy (sử dụng công thức) là giới thiệu một countcột mới .

Nếu các giá trị của bạn được liệt kê trong cột A, bắt đầu trên hàng 2, hãy nhập công thức =COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))vào B2và kéo xuống để sao chép nó. Điều này mang lại:

| A: VALUE  | B: COUNT |
|-----------|----------|
|     a     |     1    |
|     b     |     2    |
|     c     |     1    |
|     d     |     2    |
|     b     |     2    |
|     d     |     2    |

Bây giờ chúng ta có số lần xuất hiện của từng giá trị, chúng ta có thể lọc Acột theo các giá trị từ đó B. Trong ô C2, chèn công thức =UNIQUE(FILTER(A2:A7, B2:B7 > 1)). Điều này mang lại:

| A: VALUE  | B: COUNT | C: DUPS |
|-----------|----------|---------|
|     a     |     1    |    b    |
|     b     |     2    |    d    |
|     c     |     1    |         |
|     d     |     2    |         |
|     b     |     2    |         |
|     d     |     2    |         |

Giải thích về công thức

=COUNTA(FILTER(A$2:A$7, A$2:A$7 = A2))

  • Các filterđiều khoản kiểm tra các Acột, và tìm thấy tế bào có giá trị tương tự như tế bào A2( A2được thay thế bằng các tế bào tương ứng khi sao chép công thức).
  • counta đếm các giá trị (bao gồm cả số không).

=UNIQUE(FILTER(A2:A7, B2:B7 > 1))

  • Điều này filterkiểm tra cột Bcho các giá trị đó > 1và trả về các giá trị tương ứng từ cột A. Các uniquechức năng đơn giản là làm cho chắc chắn chúng tôi chỉ trả lại mỗi giá trị một lần, vì vậy chúng tôi đừng có được bhai lần, ví dụ.

Tuy nhiên , một cách thanh lịch hơn sẽ là sử dụng chức năng tập lệnh:

function dups(rows) {
  var values = {};
  var duplicates = [];
  for (var i = 0; i < rows.length; i++) {
    var value = rows[i][0];
    if (values[value] !== undefined && duplicates.indexOf(value) == -1) {
      duplicates.push(value);
    } else {
      values[value] = true
    }
  }
  return duplicates;
}

Chuyển đến Công cụ → Trình chỉnh sửa tập lệnh , dán mã ở trên và lưu. Bây giờ bạn có thể gọi hàm bằng cách nhập công thức ở =dups(A2:A7)bất cứ đâu. Điều này trả về các bản sao được tìm thấy trong A2:A7.


Tôi đã thiết lập một bảng tính ví dụ để chứng minh cả hai possibilites , cứ thoải mái nhìn vào nó và sao chép nó.


giá trị var = {} cần phải là giá trị var = [] phải không?
Jacob Jan Tuinstra

1
Thật ra, không. valuesđược sử dụng như một bản đồ khóa-giá trị, không phải là một mảng, để dễ dàng kiểm tra xem chúng tôi đã xử lý một giá trị cụ thể chưa - có values[property]tồn tại hay không.
Vidar S. Ramdal

1
Tôi nghĩ bạn đã đẩy vào một mảng .... Tôi đã thử nghiệm mã của bạn và nó giữ cho thấy mục trùng lặp, như trong d, d, d, d ... . Giải pháp công thức bạn cung cấp không làm điều đó.
Jacob Jan Tuinstra

1
Ý tôi là đối tượng.
Jacob Jan Tuinstra

1
@JacobJanTuinstra Ah, vâng - Tôi thấy điều đó ngay bây giờ. Sửa mã.
Vidar S. Ramdal
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.