Bagaimana cara menetapkan pemformatan bersyarat pada sel tertentu yang bergantung pada nilai sel lain?

69

Dalam contoh saya, saya ingin memformat sel B kolom secara kondisional. Yang ditandai dengan x harus diformat sesuai dengan nilai di kolom A (dalam contoh nilainya 1):

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

CATATAN PENTING 2014 : Pemformatan bersyarat berdasarkan rumus yang mungkin menyertakan sel lain sekarang dimungkinkan di Google Sheets, dan berfungsi sangat mirip dengan cara kerja lembar kerja Excel. Jawaban ini menjelaskan penggunaannya.

Robert Koritnik
sumber
3
Karena Anda menambahkan catatan 2014, harap pertimbangkan juga memindahkan tanda centang ke jawaban yang menjelaskan pendekatan modern.

Jawaban:

50

Pemformatan bersyarat yang kompleks dapat dicapai di Google Spreadsheets menggunakan Google Apps Script. Misalnya, Anda bisa menulis fungsi yang mengubah warna latar belakang dari seluruh baris berdasarkan nilai di salah satu selnya, sesuatu yang menurut saya tidak mungkin dilakukan dengan menu "Ubah warna dengan aturan". Anda mungkin ingin mengatur pemicu untuk fungsi ini seperti "On Edit", "On Open" dan "On Form Submit".

Dokumentasi untuk fungsi setBackgroundRGB ()

UPDATE: Berikut adalah contoh Skrip Google Apps untuk mengubah warna latar belakang dari seluruh baris berdasarkan nilai pada kolom A. Jika nilainya positif, gunakan hijau. Jika kosong, putih. Kalau tidak, merah. Lihat hasilnya di Google Spreadsheet publik ini . (Anda harus masuk untuk menjalankan skrip, tetapi tanpa masuk Anda masih dapat melihat hasilnya).

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}

Liam
sumber
Saya mendapat kesalahan pada baris 13: var dataRange = sheet.getRange (r, 1, 1, 3); Jika saya ingin menggunakan skrip ini untuk mewarnai baris berdasarkan nama tertentu (misalnya David), bagaimana saya mengubahnya. Dan saya mungkin akan mengubah font daripada latar belakang: setFontColor Juga, bagaimana saya menjalankan skrip pada spreadsheet saya? Terima kasih
2
Tautan ke contoh tidak lagi valid. Bagaimana Anda MENGGUNAKAN skrip ini setelah dibuat? Itu hilang dari jawaban ini.
Daniel Williams
3
Sekarang ada opsi yang lebih sederhana untuk kasus penggunaan yang paling umum, dijelaskan dalam jawaban saya di bawah ini.
Sam Brightman
1
Sayangnya, tautan Google Spreadsheet rusak. Akan menyenangkan untuk memiliki deskripsi singkat tentang cara menggunakan / mengaktifkan skrip. Meskipun demikian jawaban yang bagus itu hanya berfungsi. :)
brimborium
19

The Lembar Google baru memungkinkan Anda untuk melakukan hal ini, seperti yang dijelaskan di sini . Anda harus terlebih dahulu mengaktifkan spreadsheet baru di pengaturan Google Driver Anda seperti yang dijelaskan dalam artikel. Kemudian Anda dapat memilih 'Formula khusus adalah' dari opsi pemformatan bersyarat dan masukkan formula apa pun (jangan lupa untuk menambahkan =awalan!). Referensi sel tanpa $awalan disesuaikan secara otomatis ketika diterapkan pada rentang seperti yang Anda harapkan.

Tampaknya dukungan untuk migrasi dari yang lama ke yang baru kurang - hanya berlaku untuk sheet baru dan saya menemukan bahwa hanya nilai yang dapat disalin dari satu ke yang lain. Menyalin seluruh lembar mungkin menjadi pilihan.

Sam Brightman
sumber
1
Terima kasih telah menunjukkan ini. Ini benar-benar berfungsi persis seperti yang saya inginkan.
Robert Koritnik
Saat ini sebagian besar spreadsheet lama dimigrasikan ke Google Sheets baru, sehingga catatan tentang dukungan untuk migrasi sudah usang.
Rubén
2

Saya menulis aplikasi web ini, Kode Warna + , dengan Apps-Script, untuk memenuhi sebagian besar kebutuhan pemformatan bersyarat dasar. Lemparkan dalam beberapa aturan dan itu akan meludahkan kode yang Anda kemudian dapat menyisipkan dalam spreadsheet Anda, di bawah AlatEditor Script ... . ( Bantuan utas di forum Google.)

Bryan P
sumber
1

Aturan format Bersyarat Google Sheets terlihat seperti ini jika Anda ingin memformat bersyarat dengan latar belakang merah jika jumlah dalam dua sel berbeda dari pada sel ke-3:

Google Sheets aturan format bersyarat dengan satu warna dan formula khusus

ViliusK
sumber
0

Pemformatan bersyarat - formula khusus

range 2:227

= if($i:$i = "Duplicate",True,False)

pilih warna yang Anda inginkan baris yang akan disorot.

Hari R
sumber
0

(Feb 2017) Sebagaimana disebutkan dalam jawaban lain, Google Sheets sekarang memungkinkan pengguna untuk menambahkan Pemformatan Bersyarat langsung dari antarmuka pengguna, baik itu di desktop / laptop, perangkat Android atau iOS. Namun, sisa jawaban ini terutama untuk pengembang karena Anda dapat menulis pemformatan bersyarat aplikasi "do".

Dengan Google Sheets API v4 (dan yang lebih baru), pengembang sekarang dapat menulis aplikasi yang aturan pemformatan bersyarat CRUD. Lihat halaman panduan dan sampel untuk detail lebih lanjut serta dokumen referensi (mencari {add,update,delete}ConditionalFormatRule). Panduan ini menampilkan cuplikan Python ini (dengan asumsi ID file SHEET_IDdan SHEETSsebagai titik akhir layanan API):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

Selain Python, Google APIs mendukung berbagai bahasa , sehingga Anda memiliki opsi. Bagaimanapun, contoh kode tersebut memformat Sheet (lihat gambar di bawah) sedemikian rupa sehingga mereka yang lebih muda dari usia rata-rata disorot dalam warna merah terang sedangkan mereka yang di atas median memiliki data mereka yang berwarna font merah.

Contoh pemformatan bersyarat

CATATAN: jawaban saya di sini sama dengan jawaban di SO untuk pertanyaan ini, kecuali saya menjatuhkan PSA karena tidak perlu tinggal di> 1 tempat.

wescpy
sumber
Ada beberapa jawaban untuk pertanyaan ini juga pada pertanyaan yang dirujuk SO. Manakah "jawaban lain" yang mengacu pada jawaban ini? (: Di sisi lain, sementara orang yang datang ke situs ini dapat menulis kode, saya pikir sebagian besar dari mereka melakukan ini sebagai "pengembangan pengguna akhir" seperti pada fungsi khusus / fungsi yang ditentukan pengguna. Saya tidak yakin istilah seperti itu CRUDdiketahui oleh sebagian besar dari mereka dan bahwa mereka dapat menemukan semua rincian tambahan yang disertakan dalam jawaban ini bermanfaat
Rubén
0

Untuk membahas spesifikasi Q dalam Lembar 'baru', saya sarankan menghapus semua pemformatan bersyarat dari B: B, memilih ColumnB dan menerapkan rumus Kustom adalah dari:

=A1=1

dengan format pilihan dan Done.

kacang
sumber
0

Saat mengedit pemformatan bersyarat, pilih rumus Kustom dan gunakan ...

=if(A1 = 1 , true)

Pilih warna Anda dan Anda selesai.

pengguna3246197
sumber
-1

Edit dalam menanggapi klarifikasi pertanyaan:

Di jendela Google Spreadsheet Anda, ada Format menu dengan opsi "Ubah warna dengan aturan". Ini sama teknisnya dengan pemformatan bersyarat Google Spreadsheet. Sejauh yang saya tahu, tidak ada cara untuk mewarnai satu sel berdasarkan nilai yang lain - Google tidak membiarkan Anda memasukkan formula untuk sel lain.

Kecuali jika Anda memasukkan data lain ke dalam kolom B, Anda selalu bisa membuat semua kolom B sama dengan kolom A, dan kemudian gunakan opsi "Ubah warna dengan aturan" untuk mewarnai semua sel dengan nilai 1 dengan warna yang serupa - yaitu, latar belakang merah dan teks merah ketika nilainya 1, latar belakang putih dan teks putih ketika tidak, secara efektif menyembunyikan nilai dalam kolom B. Itu akan memberi Anda tampilan yang Anda inginkan.

Di Excel, Anda bisa melakukan apa yang Anda inginkan. Menggunakan data Anda sebagai contoh, saya secara kondisional memformat B1 saat rumus ini benar:

=IF(A1=1,true,false)

dan kemudian menyeret pemformatan ke bawah, yang hanya menyoroti sel dalam B di mana itu adalah tetangga di kolom A sama dengan 1.

Excel dapat melakukannya, tetapi tidak Google


Jawaban Asli

Saya tidak yakin apakah Anda bisa melakukan ini dalam 2 kolom, tetapi saya tahu Anda bisa melakukannya dalam 3:

 A  |  B  |  C
----------------
 1  |  f  |  x

Di kolom B, Anda dapat menggunakan IFrumus untuk melihat apakah x telah ditempatkan di kolom C yang sesuai:

=IF(C1="x",A1,"") 

The IFRumus memiliki 3 bagian - tes, yang kemudian nilai, dan lain nilai. Dalam contoh di atas, rumus memeriksa untuk melihat apakah ada xdi kolom C. Jika ada, itu memasukkan nilai dari A1, jika tidak, itu memasukkan kosong. Tidak masalah apakah xhuruf besar atau kecil.

Setelah Anda memasukkan formula ini di bagian atas daftar Anda, Anda dapat menggunakan fitur seret untuk menarik formula ke bawah untuk sisa daftar Anda. Dengan sel yang disorot dengan warna biru, gerakkan tetikus Anda di atas bujur sangkar di sudut kanan bawah hingga kursor menjadi garis bidik. Kemudian cukup klik dan tahan sambil menyeret ke bawah untuk menyalin rumus ke sel di bawah ini.

Jared Harley
sumber
1
Saya pikir Anda salah paham. Pertanyaannya adalah tentang pemformatan bersyarat yang tidak menempatkan nilai dalam sel.
Robert Koritnik
1
Saat ini jawaban ini sudah usang. Lihat Menerapkan aturan pemformatan bersyarat - Bantuan editor
dokumen