Tính toán các ô được tô bóng


10

Tôi đang sử dụng Bảng tính Google để tạo ma trận (thời gian / hoạt động) dưới dạng lịch trình hàng ngày để nhân viên đăng nhập.

Có một công thức để tính số lượng ô trong một cột được tô bóng (hoặc không được tô bóng) một màu nhất định không?

Ví dụ: 20 ô có màu xám và 31 ô không có màu xám (tô bất kỳ màu nào khác) và thay vì đếm thủ công, nó sẽ tính toán phần này ở dưới cùng của cột tầm với.


Vấn đề với giải pháp của @ w0lf đến từ bộ đệm. Các chức năng chưa sẵn sàng để có được cập nhật trực tiếp. Tôi đã cố gắng đạt được khả năng đó bằng cách thêm "now ()" làm tham số bổ sung nhưng nó không hoạt động.
sự ấm áp

Tôi không thể trả lời vì vậy tôi sẽ chỉ để lại nhận xét. Nếu các ô không có bất kỳ văn bản nào, việc thêm bất kỳ văn bản nào bên trong có cùng màu với nền (sẽ bị ẩn) sẽ dễ dàng hơn và sau đó bạn chỉ cần thực hiện một thao tác đơn giản = Counta () để đếm các ô không trống. Nếu khóa học này là rất cụ thể tùy thuộc vào trường hợp.
sfratini

Câu trả lời:


17

Tôi đã tìm thấy một cách để làm điều này, bằng cách sử dụng chức năng tạo kịch bản mà Bảng tính Google cung cấp.

Đây là cách thực hiện:

  • mở bảng tính của bạn
  • trong menu, đi tới Công cụ -> Trình chỉnh sửa tập lệnh ...; Điều này sẽ mở một cửa sổ mới cho phép bạn nhập mã
  • sao chép mã dưới đây
  • dán mã vào cửa sổ Script Editor và nhấn CTRL+ Sđể lưu nó
  • đóng các cửa sổ soạn thảo Script và quay lại bảng tính

Mã số:

function getBackgroundColor(rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange(rangeSpecification);
  return cell.getBackground();
}

function sumWhereBackgroundColorIs(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x += parseFloat(cell.getValue());
    }
  }
  return x;
}

function countCellsWithBackgroundColor(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x++;
    }
  }
  return x;
}

Sau khi làm theo các bước trên, bạn có thêm ba chức năng có sẵn trong bảng tính:

  • countCellsWithBackgroundColor(<color>, <range specification>)
  • sumWhereBackgroundColorIs(<color>, <range specification>)
  • getBackgroundColor(<cell specification>)

Xin lưu ý rằng <range specification><cell specification>được thể hiện trong ký hiệu A1 , và phải được đặt trong dấu ngoặc kép .

Ví dụ: để lấy số lượng của tất cả các ô trong phạm vi B2: F13 có màu nền được đặt thành màu trắng , bạn nên nhập công thức sau:

=countCellsWithBackgroundColor("white", "B2:F13")

và để tính tổng của các ô giống nhau, hãy sử dụng công thức:

=sumWhereBackgroundColorIs("white", "B2:F13")

Một số ô có thể không có nền được đặt thành một màu như 'trắng', 'xám', nhưng màu như RGB #6fa8dc. Bạn không thể đoán màu sắc là gì, vì vậy nếu bạn muốn tìm ra màu cho một ô (ví dụ B9:), bạn nên nhập công thức này vào một ô:

=getBackgroundColor("B9")

và sau đó sử dụng giá trị này làm tham số cho hai hàm trên.

Có vẻ như nếu màu nền của một ô là "màu chủ đề", getBackground()luôn luôn trả về không chính xác #ffffff. Tôi không tìm thấy cách nào khác ngoài việc sử dụng màu từ bộ tiêu chuẩn.

Một lần nữa, lưu ý các trích dẫn trong tất cả các ví dụ trên; không có chúng, các công thức sẽ không hoạt động.


Tôi đã cố gắng làm theo gợi ý của bạn, nhưng trong lĩnh vực tôi sử dụng công thức tôi nhận được #NUM!, Bạn có biết tại sao không? Tôi đã cố gắng thực hiện một số nghiên cứu, nhưng tôi không thể tìm thấy câu trả lời chính xác cho điều đó. Cảm ơn một triệu, dami

@Dami bạn có thể đăng công thức của bạn ở đây? Ngoài ra, hãy kiểm tra chính tả - Tôi nghĩ rằng tên công thức phân biệt chữ hoa chữ thường
Cristian Lupascu

Chỉ nhận được số 0 ở đây, mặc dù làm theo hướng dẫn ...

Sự getBackgroundColor()phản đối Có lẽ bạn có thể cập nhật mã?
Jacob Jan Tuinstra

Khi tôi thay đổi màu nền thành giá trị khác, tổng không được cập nhật. Có cách nào để tự động cập nhật tổng khi tôi thực hiện một số thay đổi không?
Michal Kováč

0

Tôi chưa tìm được cách đếm trực tiếp các ô bằng một màu cụ thể trong Google Docs.

Điều gì làm cho họ bóng mờ. Có tự động không? Nếu họ có một giá trị họ sẽ tự động tô bóng? Nếu đó là trường hợp bạn có thể sử dụng hàm Counta () để đếm bất kỳ ô nào có giá trị. Nếu có một bộ quy tắc phức tạp hơn có liên quan, bạn có thể cần phải sử dụng hàm Countif ().

Lưu ý: bạn có thể phải tính đến bất kỳ hàng bổ sung nào ở trên cùng hoặc dưới cùng của cột

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.