Làm cách nào tôi có thể đặt định dạng có điều kiện trên một ô cụ thể phụ thuộc vào giá trị của ô khác?


69

Trong ví dụ của tôi, tôi muốn định dạng có điều kiện các ô B cột. Những người được đánh dấu x nên được định dạng theo giá trị trong cột A (trong ví dụ giá trị là 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

LƯU Ý 2014 QUAN TRỌNG : Định dạng có điều kiện dựa trên công thức có thể bao gồm các ô khác hiện có thể có trong Google Sheets và hoạt động rất giống với cách hoạt động của bảng tính Excel. Câu trả lời này giải thích việc sử dụng nó.


3
Vì bạn đã thêm ghi chú năm 2014, vui lòng xem xét việc chuyển dấu kiểm sang câu trả lời mô tả phương pháp hiện đại.

Câu trả lời:


50

Định dạng có điều kiện phức tạp có thể đạt được trong Bảng tính Google bằng Tập lệnh Google Apps. Ví dụ: bạn có thể viết một hàm thay đổi màu nền của toàn bộ một hàng dựa trên giá trị trong một trong các ô của nó, điều mà tôi không nghĩ là có thể với menu "Thay đổi màu theo quy tắc". Bạn có thể muốn đặt các kích hoạt cho chức năng này, chẳng hạn như "Bật chỉnh sửa", "Mở" và "Gửi biểu mẫu".

Tài liệu cho hàm setBackgroundRGB ()

CẬP NHẬT: Dưới đây là ví dụ về Google Apps Script về việc thay đổi màu nền của toàn bộ hàng dựa trên giá trị trong cột A. Nếu giá trị là dương, hãy sử dụng màu xanh lá cây. Nếu trống, trắng. Nếu không, màu đỏ. Xem kết quả trong Bảng tính Google công khai này . (Bạn sẽ phải đăng nhập để chạy tập lệnh, nhưng không đăng nhập bạn vẫn có thể thấy kết quả).

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

Là một tài tài, hay nói, qua, qua, qua một khác, qua giữ,, qua một tài khác, qua giữ, qua, qua, qua, qua một khác, qua, khi khác mới, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng đăng, mới đăng cam cam


Tôi đã gặp lỗi trên dòng 13: var dataRange = sheet.getRange (r, 1, 1, 3); Nếu tôi muốn sử dụng tập lệnh này để tô màu một hàng theo một tên cụ thể (ví dụ David), tôi sẽ thay đổi tập lệnh đó như thế nào. Và tôi có thể sẽ thay đổi phông chữ thay vì nền: setFontColor Ngoài ra, làm cách nào để chạy tập lệnh trên bảng tính của tôi? Cảm ơn

2
Liên kết đến ví dụ không còn hiệu lực. Làm thế nào để bạn sử dụng tập lệnh này một khi nó được tạo ra? Đó là thiếu từ câu trả lời này.
Daniel Williams

3
Bây giờ có một tùy chọn đơn giản hơn cho các trường hợp sử dụng phổ biến nhất, được mô tả trong câu trả lời của tôi dưới đây.
Sam Brightman

1
Không may liên kết Bảng tính Google bị hỏng. Sẽ rất tuyệt nếu có một mô tả ngắn về cách sử dụng / kích hoạt các tập lệnh. Tuy nhiên, câu trả lời tuyệt vời mà chỉ hoạt động. :)
brimborium

19

Các Sheets Google mới cho phép bạn thực hiện điều này, như mô tả ở đây . Trước tiên, bạn phải bật bảng tính mới trong cài đặt Trình điều khiển Google của mình như được mô tả trong bài viết. Sau đó, bạn có thể chọn 'Công thức tùy chỉnh là' từ các tùy chọn định dạng có điều kiện và nhập bất kỳ công thức nào (đừng quên thêm =tiền tố!). Tham chiếu ô không có $tiền tố được điều chỉnh tự động khi áp dụng cho các phạm vi như bạn mong đợi.

Có vẻ như việc hỗ trợ cho việc di chuyển từ cũ sang mới là thiếu - nó chỉ áp dụng cho các trang tính mới và tôi thấy rằng chỉ các giá trị có thể được sao chép từ trang này sang trang khác. Sao chép toàn bộ trang tính có thể là một tùy chọn.


1
Cảm ơn đã chỉ ra điều này. Nó thực sự hoạt động chính xác như tôi muốn.
Robert Koritnik

Tại thời điểm này, hầu hết các bảng tính cũ đã được di chuyển sang Google Sheets mới, vì vậy lưu ý về hỗ trợ cho việc di chuyển đã lỗi thời.
Rubén

2

Tôi đã viết ứng dụng web này, Color Code + , với Apps-Script, để đáp ứng hầu hết các nhu cầu định dạng có điều kiện cơ bản. Ném vào một số quy tắc và nó sẽ nhổ ra mã mà sau đó bạn có thể dán vào bảng tính của bạn, dưới Công cụSoạn thảo Script ... . ( Chủ đề trợ giúp trên các diễn đàn của Google.)


1

Các quy tắc định dạng có điều kiện của Google Sheets trông như thế này nếu bạn muốn định dạng có điều kiện với nền đỏ nếu tổng trong hai ô khác nhau trong ô thứ 3:

Google Sheets quy tắc định dạng có điều kiện với màu đơn và công thức tùy chỉnh


0

Định dạng có điều kiện - công thức tùy chỉnh

range 2:227

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

chọn màu bạn muốn hàng được tô sáng.


0

(Tháng 2 năm 2017) Như đã đề cập trong một câu trả lời khác, Google Sheets hiện cho phép người dùng thêm Định dạng có điều kiện trực tiếp từ giao diện người dùng, cho dù đó là trên máy tính để bàn / máy tính xách tay, thiết bị Android hoặc iOS. Tuy nhiên, phần còn lại của câu trả lời này chủ yếu dành cho các nhà phát triển vì bạn có thể viết các ứng dụng "làm" định dạng có điều kiện.

Với Google Sheets API v4 (và mới hơn), các nhà phát triển giờ đây có thể viết các ứng dụng theo quy tắc định dạng có điều kiện CRUD. Kiểm tra các trang hướng dẫnmẫu để biết thêm chi tiết cũng như các tài liệu tham khảo (tìm kiếm {add,update,delete}ConditionalFormatRule). Hướng dẫn có đoạn mã Python này (giả sử ID tệp SHEET_IDSHEETSlà điểm cuối dịch vụ 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()

Ngoài Python, Google API hỗ trợ nhiều ngôn ngữ khác nhau , do đó bạn có các tùy chọn. Dù sao, mẫu mã đó định dạng một Trang tính (xem hình ảnh bên dưới) sao cho những người trẻ hơn tuổi trung bình được tô sáng màu đỏ trong khi những người trên trung vị có dữ liệu được tô màu bằng phông chữ màu đỏ.

Ví dụ định dạng có điều kiện

LƯU Ý: câu trả lời của tôi ở đây giống hệt với câu hỏi trên SO cho câu hỏi này ngoại trừ tôi đã bỏ PSA vì nó không cần phải sống ở> 1 nơi.


Có một số câu trả lời cho câu hỏi này cũng như câu hỏi SO đề cập. Đó là "Câu trả lời khác" mà câu trả lời này đề cập đến? (: Mặt khác, trong khi những người đến trang web này có thể viết mã, tôi nghĩ rằng hầu hết họ làm điều này như "phát triển người dùng cuối" như trong các chức năng tùy chỉnh / chức năng do người dùng xác định. Tôi không chắc các thuật ngữ đó như CRUDđược hầu hết trong số họ biết và họ có thể thấy hữu ích tất cả các chi tiết bổ sung có trong câu trả lời này.
Rubén

0

Để giải quyết các chi tiết cụ thể của Q trong Trang tính 'mới', tôi khuyên bạn nên xóa mọi định dạng có điều kiện khỏi B: B, chọn Cột và áp dụng công thức Tùy chỉnh là :

=A1=1

với định dạng của sự lựa chọn và Done.


0

Khi chỉnh sửa định dạng có điều kiện, chọn Công thức tùy chỉnh và sử dụng ...

=if(A1 = 1 , true)

Chọn màu sắc của bạn và bạn đã hoàn tất.


-1

Chỉnh sửa để trả lời làm rõ câu hỏi:

Trong cửa sổ Bảng tính Google của bạn, có một Định dạng trình đơn với tùy chọn "Thay đổi màu theo quy tắc". Đây là kỹ thuật như định dạng có điều kiện của Bảng tính Google. Theo như tôi có thể nói, không có cách nào để tô màu một ô dựa trên giá trị của một ô khác - Google không cho phép bạn nhập công thức cho các ô khác.

Trừ khi bạn đưa dữ liệu khác vào cột B, bạn luôn có thể đặt tất cả các cột B bằng cột A, sau đó sử dụng tùy chọn "Thay đổi màu theo quy tắc" để tô màu tất cả các ô có giá trị 1 bằng các màu như - nghĩa là, nền đỏ và văn bản đỏ khi giá trị là 1, nền trắng và văn bản trắng khi không, ẩn hiệu quả giá trị trong cột B. Điều đó sẽ mang lại cho bạn giao diện bạn muốn.

Trong Excel, bạn có thể làm những gì bạn muốn. Lấy dữ liệu của bạn làm ví dụ, tôi định dạng B1 một cách có điều kiện khi công thức này là đúng:

=IF(A1=1,true,false)

và sau đó kéo định dạng xuống, chỉ tô sáng các ô trong B nơi hàng xóm trong cột A bằng 1.

Excel có thể làm điều đó, nhưng không phải Google


Câu trả lời gốc

Tôi không chắc liệu bạn có thể làm điều này trong 2 cột không, nhưng tôi biết bạn có thể làm điều đó trong 3:

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

Trong cột B, bạn có thể sử dụng IFcông thức để xem liệu x đã được đặt trong cột C thích hợp chưa:

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

Công IFthức có 3 phần - kiểm tra, giá trị sau đó và giá trị khác . Trong ví dụ trên, công thức kiểm tra xem có xcột C không. Nếu có, nó nhập giá trị từ A1, nếu không, nó sẽ nhập vào chỗ trống. Nó không quan trọng nếu xlà chữ hoa hoặc chữ thường.

Khi bạn nhập công thức này ở đầu danh sách của mình, bạn có thể sử dụng tính năng kéo để kéo công thức xuống cho phần còn lại của danh sách. Với ô được tô sáng màu xanh lam, di chuyển chuột của bạn qua hình vuông ở góc dưới bên phải cho đến khi con trỏ trở thành dấu thập. Sau đó chỉ cần nhấp và giữ trong khi kéo xuống để sao chép công thức vào các ô bên dưới.


1
tôi nghĩ bạn đã hiểu lầm tôi. Câu hỏi là về định dạng có điều kiện không đặt giá trị trong các ô.
Robert Koritnik

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.