การคำนวณเซลล์ที่แรเงา


10

ฉันใช้ Google Spreadsheets เพื่อสร้างเมทริกซ์ (เวลา / กิจกรรม) เป็นตารางประจำวันสำหรับพนักงานที่จะลงชื่อเข้าใช้

มีสูตรในการคำนวณจำนวนเซลล์ในคอลัมน์ที่แรเงา (หรือไม่แรเงา) สีใดสีหนึ่งหรือไม่?

ตัวอย่างเช่น: 20 เซลล์เป็นสีเทาและ 31 ไม่ใช่สีเทา (เป็นสีเทาอื่น ๆ ) และแทนที่จะนับมันด้วยตนเองระบบจะคำนวณสิ่งนี้ที่ด้านล่างของคอลัมน์การเข้าถึง


ปัญหาเกี่ยวกับการแก้ปัญหาของ @ w0lf มาจากแคช ฟังก์ชันนี้ยังไม่พร้อมที่จะรับการอัปเดตสด ฉันพยายามเพิ่มความสามารถนั้นโดยการเพิ่ม "now ()" เป็นพารามิเตอร์พิเศษแต่ไม่ได้ผล
ความอบอุ่น

ฉันไม่สามารถตอบได้ดังนั้นฉันจะแสดงความคิดเห็น หากเซลล์ไม่มีข้อความใด ๆ จะเป็นการง่ายกว่าที่จะเพิ่มข้อความใด ๆ ข้างในด้วยสีเดียวกับพื้นหลัง (ดังนั้นจึงถูกซ่อนอยู่) จากนั้นคุณเพียงทำ = counta () ง่ายๆเพื่อนับเซลล์ที่ว่างเปล่า หากหลักสูตรนี้เฉพาะเจาะจงมากขึ้นอยู่กับกรณี
sfratini

คำตอบ:


17

ฉันได้พบวิธีในการทำเช่นนี้โดยใช้ฟังก์ชันการเขียนสคริปต์ที่ Google Spreadsheet มีให้

นี่คือวิธีการ:

  • เปิดสเปรดชีตของคุณ
  • ในเมนูไปที่เครื่องมือ -> ตัวแก้ไขสคริปต์ ... ; นี่จะเป็นการเปิดหน้าต่างใหม่ที่ให้คุณใส่รหัสได้
  • คัดลอกรหัสด้านล่าง
  • วางรหัสในหน้าต่างตัวแก้ไขสคริปต์และกดCTRL+ 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;
}

หลังจากทำตามขั้นตอนข้างต้นคุณมีสามฟังก์ชันเพิ่มเติมในสเปรดชีต:

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

โปรดทราบว่า<range specification>และ<cell specification>จะแสดงในA1สัญกรณ์และต้องอยู่ในคำพูด

ตัวอย่างเช่นในการรับจำนวนเซลล์ทั้งหมดในช่วง B2: F13 ที่มีการตั้งค่าสีพื้นหลังเป็นสีขาวคุณควรป้อนสูตรต่อไปนี้:

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

และเพื่อคำนวณผลรวมของเซลล์เดียวกันให้ใช้สูตร:

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

เซลล์บางคนอาจไม่ได้มีชุดพื้นหลังสีเช่น 'สีขาว', 'สีเทา' แต่สี RGB #6fa8dcเช่น คุณไม่สามารถเดาได้ว่าสีคืออะไรดังนั้นหากคุณต้องการค้นหาสีของเซลล์ (เช่นB9) คุณควรป้อนสูตรนี้ในเซลล์:

=getBackgroundColor("B9")

และหลังจากนั้นใช้ค่านี้เป็นพารามิเตอร์ของทั้งสองฟังก์ชั่นด้านบน

ปรากฏว่าถ้าสีพื้นหลังของเซลล์เป็น "ชุดรูปแบบสี" ผลตอบแทนที่ไม่ถูกต้องเสมอgetBackground() #ffffffฉันไม่พบวิธีอื่นนอกเหนือจากการใช้สีจากชุดมาตรฐาน

ให้สังเกตเครื่องหมายคำพูดในตัวอย่างข้างต้นทั้งหมดอีกครั้ง หากไม่มีพวกเขาสูตรจะไม่ทำงาน


ฉันพยายามทำตามคำแนะนำของคุณแล้ว แต่ในสนามฉันใช้สูตรที่ฉันได้รับ #NUM! คุณรู้หรือไม่ว่าทำไม ฉันพยายามค้นคว้าบางอย่าง แต่ไม่สามารถหาคำตอบที่แน่นอนได้ ขอขอบคุณหนึ่งล้าน

@Dami คุณสามารถโพสต์สูตรของคุณได้ที่นี่? ตรวจสอบการสะกดคำด้วย - ฉันคิดว่าชื่อสูตรจะคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
Cristian Lupascu

รับศูนย์ที่นี่แม้จะทำตามคำแนะนำ ...

getBackgroundColor()จะเลิก บางทีคุณสามารถปรับปรุงรหัสได้หรือไม่
Jacob Jan Tuinstra

เมื่อฉันเปลี่ยนสีพื้นหลังเป็นค่าอื่นผลรวมจะไม่ได้รับการอัพเดต มีวิธีอัปเดตผลรวมโดยอัตโนมัติเมื่อฉันทำการเปลี่ยนแปลงบ้างไหม?
Michal Kováč

0

ฉันไม่พบวิธีนับเซลล์โดยตรงด้วยสีที่ระบุใน Google เอกสาร

สิ่งที่ทำให้พวกเขาแรเงา เป็นอัตโนมัติหรือไม่ หากพวกเขามีค่าพวกเขาจะถูกแรเงาโดยอัตโนมัติ? หากเป็นกรณีนี้คุณสามารถใช้ฟังก์ชัน counta () เพื่อนับเซลล์ใด ๆ ที่มีค่า หากมีชุดของกฎที่ซับซ้อนมากขึ้นคุณอาจต้องใช้ฟังก์ชัน countif ()

หมายเหตุ: คุณอาจต้องคำนึงถึงแถวพิเศษใด ๆ ที่ด้านบนหรือด้านล่างของคอลัมน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.