Bagaimana cara menyorot sel jika nilai duplikat di kolom yang sama untuk google spreadsheet?

271

Saya mencari rumus untuk sel sorotan spreadsheet google jika nilai duplikat di kolom yang sama

adakah yang bisa membantu saya untuk pertanyaan ini?

pengguna3331309
sumber

Jawaban:

474

Coba ini:

  1. Pilih seluruh kolom
  2. Klik Format
  3. Klik pemformatan bersyarat
  4. Klik Tambahkan aturan lain (atau edit aturan yang ada / default)
  5. Atur Format sel jika untuk:Custom formula is
  6. Tetapkan nilai ke: =countif(A:A,A1)>1(atau ubah Ake kolom yang Anda pilih)
  7. Setel gaya pemformatan.
  8. Pastikan rentang berlaku untuk kolom Anda (mis., A1:A100).
  9. Klik Selesai

Apa pun yang ditulis dalam sel A1: A100 akan diperiksa, dan jika ada duplikat (terjadi lebih dari sekali) maka akan diwarnai.

Untuk lokal yang menggunakan koma ( ,) sebagai pemisah desimal, pemisah argumen kemungkinan besar adalah titik koma ( ;). Artinya, coba =countif(A:A;A1)>1:, sebagai gantinya.

Untuk beberapa kolom, gunakan countifs.

zolley
sumber
50
Pada Google Sheets baru Anda dapat menggunakan COUNTIFS versi multi-kolom. Gunakan seperti ini jika duplikat adalah kombinasi dari lebih banyak kolom=COUNTIFS(A:A; A1; B:B; B1)>1
Christiaan Westerbeek
6
;hasil akhirnya merupakan kesalahan "rumus tidak valid" untuk saya. Menghapusnya saja sudah cukup. Hati-hati juga: sel yang Anda tentukan sebagai argumen ke-2 dari countifseharusnya sel pertama dari rentang yang Anda pilih.
edelans
11
Berhasil. Tapi kenapa? Dengan asumsi A1 adalah kriteria untuk persamaan, tidakkah rumus ini membandingkan semua sel dalam kisaran dengan A1?
mafonya
9
@ mafonya, rumus khusus adalah rumus umum yang harus dibaca berlaku untuk sel pertama. Semua referensi akan disesuaikan untuk masing-masing dan setiap sel dalam rentang yang dipilih. Jadi misalnya, ketika memeriksa sel B2 rumus akan menjadi internal =countif(B:B,B2)>1. Ini memungkinkan seseorang untuk melakukan beberapa pemformatan yang cukup canggih ketika menggunakan referensi sel relatif vs relatif.
asoundmove
14
Sebagai catatan tambahan, jika Anda ingin menerapkannya ke seluruh kolom, Anda dapat menggunakan rumus = countif (A: A, A: A)> 1 Ini berarti bahwa itu tidak hanya berlaku untuk sel A1, tetapi akan untuk A4 dan A8 jika keduanya sama (duplikat). Sekarang, baik A4 dan A8 akan diformat.
BBking
68

Sementara jawaban zolley sangat tepat untuk pertanyaan, berikut adalah solusi yang lebih umum untuk rentang apa pun, ditambah penjelasan:

    =COUNTIF($A$1:$C$50, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))) > 1

Harap perhatikan bahwa dalam contoh ini saya akan menggunakan rentang A1:C50. Parameter pertama ( $A$1:$C$50) harus diganti dengan rentang yang ingin Anda sorot duplikat!


untuk menyoroti duplikat:

  1. Pilih seluruh rentang yang diinginkan untuk menandai duplikat.
  2. Pada menu: Format>Conditional formatting...
  3. Di bawah Apply to range, pilih rentang penerapan aturan.
  4. Di Format cells if, pilih Custom formula ispada dropdown.
  5. Dalam kotak teks, masukkan formula yang diberikan, sesuaikan rentang untuk mencocokkan langkah (3).

Mengapa ini berhasil?

COUNTIF(range, criterion), akan membandingkan setiap sel di rangedalam criterion, yang diproses mirip dengan rumus. Jika tidak ada operator khusus yang disediakan, itu akan membandingkan setiap sel dalam rentang dengan sel yang diberikan, dan mengembalikan jumlah sel yang ditemukan cocok dengan aturan (dalam hal ini, perbandingan). Kami menggunakan rentang tetap (dengan $tanda) sehingga kami selalu melihat rentang penuh.

Blok kedua INDIRECT(ADDRESS(ROW(), COLUMN(), 4)),, akan mengembalikan konten sel saat ini. Jika ini ditempatkan di dalam sel, dokter akan menangis tentang ketergantungan melingkar, tetapi dalam kasus ini, rumus dievaluasi seolah-olah itu di dalam sel, tanpa mengubahnya.

ROW()dan COLUMN()akan mengembalikan nomor baris dan nomor kolom masing-masing sel. Jika tidak ada parameter yang diberikan, sel saat ini akan dikembalikan (ini berbasis 1, misalnya, B3akan mengembalikan 3 untuk ROW(), dan 2 untuk COLUMN()).

Kemudian kita menggunakan: ADDRESS(row, column, [absolute_relative_mode])untuk menerjemahkan baris dan kolom angka ke referensi sel (seperti B3. Ingat, ketika kita berada di dalam konteks sel, kita tidak tahu itu alamat ATAU konten, dan kita perlu konten untuk membandingkan dengan). Parameter ketiga menangani pemformatan, dan 4mengembalikan INDIRECT()suka pemformatan .

INDIRECT(), akan mengambil referensi sel dan mengembalikan kontennya. Dalam hal ini, konten sel saat ini. Kemudian kembali ke awal, COUNTIF()akan menguji setiap sel dalam rentang terhadap kita, dan mengembalikan hitungan.

Langkah terakhir adalah membuat rumus kita kembali boolean, dengan membuat ekspresi logis: COUNTIF(...) > 1. Ini > 1digunakan karena kita tahu setidaknya ada satu sel yang identik dengan kita. Itu sel kita, yang berada dalam kisaran, dan dengan demikian akan dibandingkan dengan dirinya sendiri. Jadi untuk menunjukkan duplikat, kita perlu menemukan 2 atau lebih sel yang cocok dengan kita.


Sumber:

Egois
sumber
4
Sayangnya ini tidak bekerja untuk saya. Gagal menyorot apa pun meskipun ada banyak duplikat. Tidak yakin mengapa, itu terdengar seperti solusi yang bagus.
JVC
Ini bekerja untuk saya, tetapi juga menyoroti sel kosong. Apakah ada cara untuk mengecualikan kosong?
gillespieza
1
@ Amanda - Ya, sedikit kreativitas dan itu mungkin. Saya AFK untuk minggu ini, tetapi menangkap saya dalam seminggu. Dan setengah dan saya akan dengan senang hati membantu. Idenya adalah untuk membuat pernyataan AND (menggunakan *) dan cek lain, jadi di sepanjang baris ((COUNTIF(...))*(NOT(ISBLANK(INDIRECT(...current cell...))))). Itu yang terbaik yang bisa saya lakukan di ponsel. :)
Egois
2
Tepatnya inilah solusi yang diperlukan. Ini hanya berfungsi seperti HASHMAP untuk mengidentifikasi duplikat.
AKh
1
Bekerja menawan, terima kasih @Selfish! Menghemat waktu saya. Catatan: hanya yang harus diubah $A$1:$C$50- sesuai dengan kolom yang dimaksud. Saya suka pendekatan yang lebih umum ini daripada zolley.
boldnik
28

Jawaban dari zolley benar. Hanya menambahkan Gif dan langkah-langkah untuk referensi.

  1. Menu goto Format > Conditional formatting..
  2. Temukan Format cells if..
  3. Tambahkan =countif(A:A,A1)>1bidangCustom formula is
    • Catatan: Ubah surat Adengan kolom Anda sendiri.

masukkan deskripsi gambar di sini

maheshwaghmare
sumber
2
Bagaimana saya bisa memfilternya berdasarkan warna setelah menyorot duplikat?
Faisal
@Faisal hanya dengan skrip atau addon
pemain0
27

Dari menu tarik-turun "Isi Teks", pilih "Formula khusus adalah:", dan tulis: "= countif (A: A, A1)> 1" (tanpa tanda kutip)

Saya melakukan persis seperti yang diusulkan zolley , tetapi harus dilakukan koreksi kecil: gunakan "rumus khusus" bukan " Isi Teks" . Dan kemudian rendering bersyarat akan bekerja.

Tangkapan layar dari menu

Shurik
sumber
1
Saya tidak menurunkan suara Anda (saya baru menemukan pertanyaan ini hari ini), tetapi di sini ada komentar atas jawaban Anda, seperti yang Anda minta. Saya tidak berpikir bahwa titik koma diperlukan dalam formula. Juga, saya masih melihat drop-down di panel pemformatan bersyarat di lembar google. Paling tidak, saya mengklik opsi pemilihan, dan satu set panjang opsi muncul, yang secara umum saya sebut menu drop-down. Opsi yang awalnya muncul di drop-down sering Text Contains, sehingga itulah yang biasanya diklik pengguna untuk mengakses menu dropdown.
Paul de Barros
Terima kasih Paul, atas komentar Anda. Mungkin saya salah paham: Saya mengerti bahwa "Isi Teks" (atau "Format sel jika ...") memiliki menu tarik-turun anak "Formula khusus adalah:". Selain itu "Isi Teks" harus memiliki nilai substring yang sesuai, bukan "= countif (A: A, A1)> 1;". Sebenarnya itu pendekatan lain.
Shurik
12

Sorot duplikat (di kolom C):

=COUNTIF(C:C, C1) > 1

Penjelasan: Di C1sini tidak merujuk ke baris pertama dalam C. Karena rumus ini dievaluasi oleh aturan format bersyarat, sebagai gantinya, ketika rumus diperiksa untuk melihat apakah itu berlaku, yang C1secara efektif merujuk ke baris mana pun yang saat ini sedang dievaluasi untuk lihat apakah highlight harus diterapkan. ( Jadi lebih seperti INDIRECT(C &ROW()), jika itu ada artinya bagimu! ). Pada dasarnya, ketika mengevaluasi formula format bersyarat, apa pun yang merujuk ke baris 1 dievaluasi terhadap baris yang sedang dijalankan terhadap formula tersebut. ( Dan ya, jika Anda menggunakan C2 maka Anda meminta aturan untuk memeriksa status baris tepat di bawah yang saat ini sedang dievaluasi. )

Jadi ini mengatakan, hitung kejadian apa pun yang ada di C1(sel saat ini sedang dievaluasi) yang ada di seluruh kolom Cdan jika ada lebih dari 1 dari mereka (yaitu nilai memiliki duplikat) maka: terapkan sorot ( karena rumus , keseluruhan, dievaluasi menjadiTRUE ).

Sorot duplikat pertama saja:

=AND(COUNTIF(C:C, C1) > 1, COUNTIF(C$1:C1, C1) = 1)

Penjelasan: Ini hanya menyoroti jika keduanya COUNTIFadalah TRUE(mereka muncul di dalam sebuah AND()).

Istilah pertama yang akan dievaluasi COUNTIF(C:C, C1) > 1adalah sama persis dengan contoh pertama; itu TRUEhanya jika apa yang ada di C1memiliki duplikat. ( Ingat bahwa C1secara efektif merujuk ke baris saat ini sedang diperiksa untuk melihat apakah harus disorot ).

Istilah kedua ( COUNTIF(C$1:C1, C1) = 1) terlihat mirip tetapi memiliki tiga perbedaan penting:

Itu tidak mencari seluruh kolom C(seperti yang pertama:) C:Ctetapi malah memulai pencarian dari baris pertama: C$1 ( $memaksa untuk melihat secara harfiah pada baris 1, bukan pada baris mana pun yang sedang dievaluasi).

Dan kemudian menghentikan pencarian di baris saat ini sedang dievaluasi C1.

Akhirnya dikatakan = 1.

Jadi, itu hanya akan terjadi TRUEjika tidak ada duplikat di atas baris yang saat ini sedang dievaluasi (artinya itu harus yang pertama dari duplikat).

Dikombinasikan dengan istilah pertama itu (yang hanya akan menjadi TRUEjika baris ini memiliki duplikat) ini berarti hanya kejadian pertama yang akan disorot.

Sorot duplikat kedua dan seterusnya:

=AND(COUNTIF(C:C, C1) > 1, NOT(COUNTIF(C$1:C1, C1) = 1), COUNTIF(C1:C, C1) >= 1)

Penjelasan: Ekspresi pertama sama seperti biasa ( TRUEjika baris yang saat ini dievaluasi adalah duplikat sama sekali).

Istilah kedua persis sama dengan yang terakhir kecuali itu dinegasikan: Ada NOT()di sekitarnya. Jadi itu mengabaikan kejadian pertama.

Akhirnya istilah ketiga mengambil duplikat 2, 3 dll. COUNTIF(C1:C, C1) >= 1Memulai rentang pencarian di baris yang saat ini dievaluasi ( C1di dalam C1:C). Maka hanya mengevaluasi untuk TRUE(menerapkan highlight) jika ada satu atau lebih duplikat di bawah ini (dan termasuk yang ini): >= 1(itu harus >=bukan hanya >jika tidak duplikat terakhir diabaikan).

RedYeti
sumber
3

Saya mencoba semua opsi dan tidak ada yang berhasil.

Hanya skrip aplikasi google yang membantu saya.

sumber: https://ctrlq.org/code/19649-find-duplicate-rows-in-google-sheets

Di bagian atas dokumen Anda

1.- buka alat> editor skrip

2.- tetapkan nama skrip Anda

3.- tempel kode ini:

function findDuplicates() {
  // List the columns you want to check by number (A = 1)
  var CHECK_COLUMNS = [1];

  // Get the active sheet and info about it
  var sourceSheet = SpreadsheetApp.getActiveSheet();
  var numRows = sourceSheet.getLastRow();
  var numCols = sourceSheet.getLastColumn();

  // Create the temporary working sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = ss.insertSheet("FindDupes");

  // Copy the desired rows to the FindDupes sheet
  for (var i = 0; i < CHECK_COLUMNS.length; i++) {
    var sourceRange = sourceSheet.getRange(1,CHECK_COLUMNS[i],numRows);
    var nextCol = newSheet.getLastColumn() + 1;
    sourceRange.copyTo(newSheet.getRange(1,nextCol,numRows));
  }

  // Find duplicates in the FindDupes sheet and color them in the main sheet
  var dupes = false;
  var data = newSheet.getDataRange().getValues();
  for (i = 1; i < data.length - 1; i++) {
    for (j = i+1; j < data.length; j++) {
      if  (data[i].join() == data[j].join()) {
        dupes = true;
        sourceSheet.getRange(i+1,1,1,numCols).setBackground("red");
        sourceSheet.getRange(j+1,1,1,numCols).setBackground("red");
      }
    }
  }

  // Remove the FindDupes temporary sheet
  ss.deleteSheet(newSheet);

  // Alert the user with the results
  if (dupes) {
    Browser.msgBox("Possible duplicate(s) found and colored red.");
  } else {
    Browser.msgBox("No duplicates found.");
  }
};

4.- simpan dan jalankan

Dalam waktu kurang dari 3 detik, baris duplikat saya sudah berwarna. Cukup salin-lewati skrip.

Jika Anda tidak tahu tentang skrip google apps, tautan ini dapat membantu Anda:

https://zapier.com/learn/google-sheets/google-apps-script-tutorial/

https://developers.google.com/apps-script/overview

Saya harap ini membantu.

JRichardsz
sumber
Apakah kode ini dapat dimodifikasi untuk hanya menyorot bidang duplikat di kolom dengan merah alih-alih baris penuh?
Amr