ฉันจะตั้งค่าการจัดรูปแบบตามเงื่อนไขในเซลล์หนึ่งที่ขึ้นอยู่กับค่าของเซลล์อื่นได้อย่างไร


69

ในตัวอย่างของฉันฉันต้องการจัดรูปแบบคอลัมน์เซลล์ B แบบมีเงื่อนไข ผู้ที่ทำเครื่องหมายด้วยxควรจัดรูปแบบตามค่าในคอลัมน์ A (ในตัวอย่างค่าคือ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

สำคัญ 2014 หมายเหตุ : การจัดรูปแบบตามเงื่อนไขตามสูตรที่อาจรวมเซลล์อื่นเป็นไปได้ใน Google ชีตและทำงานคล้ายกับการทำงานของสเปรดชีต Excel คำตอบนี้อธิบายการใช้งาน


3
เมื่อคุณเพิ่มหมายเหตุ 2014 โปรดพิจารณาย้ายเครื่องหมายถูกไปยังคำตอบที่อธิบายวิธีการที่ทันสมัย

คำตอบ:


50

การจัดรูปแบบตามเงื่อนไขที่ซับซ้อนสามารถทำได้ใน Google Spreadsheets โดยใช้ Google Apps Script ตัวอย่างเช่นคุณสามารถเขียนฟังก์ชั่นที่เปลี่ยนสีพื้นหลังของทั้งแถวโดยยึดตามค่าในหนึ่งในเซลล์ของมันซึ่งเป็นสิ่งที่ฉันไม่คิดว่าเป็นไปได้ด้วยเมนู "เปลี่ยนสีด้วยกฎ" คุณอาจต้องการตั้งค่าทริกเกอร์สำหรับฟังก์ชั่นนี้เช่น "On Edit", "On Open" และ "On Form Submit"

เอกสารประกอบสำหรับฟังก์ชั่น setBackgroundRGB ()

UPDATE: นี่คือตัวอย่างสคริปต์ของ Google Apps ในการเปลี่ยนสีพื้นหลังของทั้งแถวตามค่าในคอลัมน์ A หากค่าเป็นบวกให้ใช้สีเขียว ถ้าว่างเปล่าสีขาว มิฉะนั้นสีแดง ดูผลลัพธ์ในสเปรดชีตสาธารณะของ Googleนี้ (คุณจะต้องลงชื่อเข้าใช้เพื่อให้สคริปต์ทำงาน แต่ไม่มีการลงชื่อเข้าใช้คุณยังสามารถเห็นผลลัพธ์ได้)

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


ฉันพบข้อผิดพลาดในบรรทัดที่ 13: var dataRange = sheet.getRange (r, 1, 1, 3); หากฉันต้องการใช้สคริปต์นี้เพื่อระบายสีแถวตามชื่อเฉพาะ (เช่น David) ฉันจะเปลี่ยนได้อย่างไร และฉันอาจจะเปลี่ยนแบบอักษรแทนพื้นหลัง: setFontColor นอกจากนี้ฉันจะรันสคริปต์บนสเปรดชีตของฉันได้อย่างไร ขอบคุณ

2
ลิงก์ไปยังตัวอย่างไม่ถูกต้องอีกต่อไป คุณจะใช้สคริปต์นี้อย่างไรเมื่อมันถูกสร้างขึ้น? ที่หายไปจากคำตอบนี้
Daniel Williams

3
ขณะนี้มีตัวเลือกที่ง่ายกว่าสำหรับกรณีการใช้งานทั่วไปที่อธิบายไว้ในคำตอบของฉันด้านล่าง
Sam Brightman

1
ลิงก์ของสเปรดชีต Google เสียไปอย่างน่าเสียดาย ยินดีที่จะมีคำอธิบายสั้น ๆ เกี่ยวกับวิธีการใช้ / เปิดใช้งานสคริปต์ อย่างไรก็ตามคำตอบที่ยอดเยี่ยมที่ใช้งานได้ดี :)
brimborium

19

Google ชีตใหม่ช่วยให้คุณสามารถทำเช่นนี้ตามที่อธิบายไว้ที่นี่ คุณต้องเปิดใช้งานสเปรดชีตใหม่ก่อนในการตั้งค่า Google Driver ตามที่อธิบายไว้ในบทความ จากนั้นคุณสามารถเลือก 'สูตรที่กำหนดเองคือ' จากตัวเลือกการจัดรูปแบบตามเงื่อนไขและป้อนสูตรใด ๆ (อย่าลืมเพิ่ม=คำนำหน้า!) การอ้างอิงเซลล์โดยไม่มี$คำนำหน้าจะปรับโดยอัตโนมัติเมื่อนำไปใช้กับช่วงตามที่คุณคาดหวัง

ดูเหมือนว่าการสนับสนุนการโยกย้ายจากเก่าไปสู่ใหม่ขาด - มันใช้กับชีตใหม่เท่านั้นและฉันพบว่ามีเพียงค่าที่สามารถคัดลอกจากที่หนึ่งไปยังอีกที่หนึ่ง การทำสำเนาแผ่นทั้งหมดอาจเป็นตัวเลือก


1
ขอบคุณที่ชี้นำสิ่งนี้ มันได้ผลตรงตามที่ฉันต้องการ
Robert Koritnik

ในขณะนี้สเปรดชีตเก่าส่วนใหญ่ถูกย้ายไปยัง Google ชีตใหม่ดังนั้นบันทึกเกี่ยวกับการสนับสนุนการย้ายข้อมูลจะล้าสมัย
Rubén

2

ฉันเขียนแอปพลิเคชันเว็บรหัสสี +พร้อมด้วย Apps-Script เพื่อให้ครอบคลุมความต้องการการจัดรูปแบบตามเงื่อนไขส่วนใหญ่ โยนในกฎบางอย่างและมันจะคายออกรหัสที่คุณสามารถวางในสเปรดชีตของคุณภายใต้เครื่องมือแก้ไขสคริปต์ ... ( ช่วยเหลือด้ายบนฟอรัม Google)


1

กฎรูปแบบตามเงื่อนไขของ Google ชีตมีลักษณะเช่นนี้หากคุณต้องการจัดรูปแบบตามเงื่อนไขด้วยพื้นหลังสีแดงหากผลรวมในสองเซลล์แตกต่างจากในเซลล์ที่ 3:

กฎการจัดรูปแบบตามเงื่อนไขของ Google ชีตที่มีสีเดียวและสูตรที่กำหนดเอง


0

การจัดรูปแบบตามเงื่อนไข - สูตรที่กำหนดเอง

range 2:227

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

เลือกสีที่คุณต้องการเน้นแถว


0

(ก.พ. 2017)ดังที่ได้กล่าวไว้ในคำตอบอื่นตอนนี้ Google ชีทอนุญาตให้ผู้ใช้เพิ่มการจัดรูปแบบตามเงื่อนไขได้โดยตรงจากส่วนติดต่อผู้ใช้ไม่ว่าจะเป็นบนเดสก์ท็อป / แล็ปท็อปอุปกรณ์ Android หรือ iOS อย่างไรก็ตามส่วนที่เหลือของคำตอบนี้เป็นหลักสำหรับนักพัฒนาเพราะคุณสามารถเขียนแอพ "ทำ" การจัดรูปแบบตามเงื่อนไข

ด้วยGoogle ชีต API v4 (และใหม่กว่า) ตอนนี้นักพัฒนาสามารถเขียนแอปพลิเคชันที่กฎการจัดรูปแบบตามเงื่อนไข CRUD ตรวจสอบหน้าคำแนะนำและหน้าตัวอย่างสำหรับรายละเอียดเพิ่มเติมรวมถึงเอกสารอ้างอิง (ค้นหา{add,update,delete}ConditionalFormatRule) คู่มือมีข้อมูลโค้ด Python นี้ (สมมติว่า ID ไฟล์ของSHEET_IDและSHEETSเป็นจุดสิ้นสุดบริการ 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()

นอกจาก Python แล้ว Google API ยังรองรับภาษาที่หลากหลายดังนั้นคุณจึงมีตัวเลือกต่างๆ อย่างไรก็ตามตัวอย่างโค้ดนั้นจะจัดรูปแบบชีต (ดูภาพด้านล่าง) เพื่อให้ผู้ที่อายุน้อยกว่าค่ามัธยฐานถูกไฮไลต์ด้วยสีแดงอ่อนในขณะที่ผู้ที่อยู่เหนือค่ามัธยฐานจะมีข้อมูลสีเป็นตัวอักษรสีแดง

ตัวอย่างการจัดรูปแบบตามเงื่อนไข

หมายเหตุ: คำตอบของฉันที่นี่เหมือนกันกับคำตอบ SO สำหรับคำถามนี้ยกเว้นฉันลบ PSA เนื่องจากไม่จำเป็นต้องอยู่ใน> 1 แห่ง


มีหลายคำตอบสำหรับคำถามนี้เช่นเดียวกับคำถามที่อ้างอิงดังนั้น "คำตอบอื่น" ที่คำตอบนี้อ้างถึงคืออะไร (: ในอีกด้านหนึ่งในขณะที่คนที่มาที่ไซต์นี้สามารถเขียนโค้ดได้ฉันคิดว่าพวกเขาส่วนใหญ่ทำเช่นนี้ว่า "การพัฒนาผู้ใช้ปลายทาง" เช่นในฟังก์ชั่นที่กำหนดเอง / ฟังก์ชั่นที่ผู้ใช้กำหนดCRUDเป็นที่รู้จักกันโดยส่วนใหญ่ของพวกเขาและพวกเขาสามารถหาประโยชน์ทุกรายละเอียดเพิ่มเติมที่จะรวมอยู่ในคำตอบนี้.
Rubén

0

หากต้องการระบุรายละเอียดของ Q ในชีต 'ใหม่' ฉันขอแนะนำให้ล้างการจัดรูปแบบตามเงื่อนไขใด ๆ จาก B: B โดยเลือก ColumnB และใช้สูตรที่กำหนดเองคือ :

=A1=1

Doneที่มีการจัดรูปแบบของการเลือกและ


0

เมื่อแก้ไขการจัดรูปแบบตามเงื่อนไขให้เลือกสูตรที่กำหนดเองและใช้สิ่งต่อไปนี้ ...

=if(A1 = 1 , true)

เลือกสีของคุณและคุณเสร็จแล้ว


-1

แก้ไขเพื่อตอบคำถามชี้แจง:

ในหน้าต่าง Google Spreadsheet ของคุณมีเมนูจัดรูปแบบพร้อมตัวเลือก "เปลี่ยนสีตามกฎ" นี่เป็นเรื่องทางเทคนิคเท่ากับการจัดรูปแบบตามเงื่อนไขของ Google สเปรดชีตคือ เท่าที่ฉันสามารถบอกได้ไม่มีวิธีใดที่จะระบายสีเซลล์หนึ่งตามค่าของเซลล์อื่น - Google ไม่อนุญาตให้คุณใส่สูตรสำหรับเซลล์อื่น

ถ้าคุณไม่ใส่ข้อมูลอื่นลงในคอลัมน์ B คุณสามารถสร้างคอลัมน์คอลัมน์ B เท่ากับเท่ากันได้เสมอจากนั้นใช้ตัวเลือก "เปลี่ยนสีด้วยกฎ" เพื่อกำหนดสีของเซลล์ทั้งหมดด้วยค่า 1 ที่มีสีคล้ายกัน - เช่น พื้นหลังสีแดงและข้อความสีแดงเมื่อค่าเป็น 1, พื้นหลังสีขาวและข้อความสีขาวเมื่อไม่ได้อย่างมีประสิทธิภาพซ่อนค่าในคอลัมน์ B ที่จะให้รูปลักษณ์ที่คุณต้องการ

ใน Excel คุณสามารถทำสิ่งที่คุณต้องการ โดยใช้ข้อมูลของคุณเป็นตัวอย่างฉันจัดรูปแบบตามเงื่อนไข B1 เมื่อสูตรนี้เป็นจริง:

=IF(A1=1,true,false)

จากนั้นลากการจัดรูปแบบลงซึ่งเน้นเฉพาะเซลล์ใน B ซึ่งเป็นเพื่อนบ้านในคอลัมน์ A เท่ากับ 1

Excel สามารถทำได้ แต่ไม่ใช่ Google


คำตอบเดิม

ฉันไม่แน่ใจว่าคุณสามารถทำได้ใน 2 คอลัมน์ แต่ฉันรู้ว่าคุณสามารถทำได้ใน 3:

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

ในคอลัมน์ B คุณสามารถใช้IFสูตรเพื่อดูว่าวาง x ในคอลัมน์ C ที่เหมาะสมหรือไม่:

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

IFสูตรมี 3 ส่วน - การทดสอบที่แล้วคุ้มค่าและอื่น ๆค่า ในตัวอย่างข้างต้นสูตรจะตรวจสอบเพื่อดูว่ามีxในคอลัมน์ C หรือไม่ หากมีมันจะเข้าสู่ค่าจาก A1 มิฉะนั้นจะเข้าสู่ที่ว่างเปล่า ไม่สำคัญว่าตัวxพิมพ์ใหญ่หรือตัวพิมพ์เล็ก

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


1
ฉันคิดว่าคุณเข้าใจฉันผิด คำถามเกี่ยวกับการจัดรูปแบบตามเงื่อนไขไม่วางค่าในเซลล์
Robert Koritnik

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