我有一个Google Drive
电子表格与两张。谷歌驱动器电子表格公式检查值
Sheet 1
有三列:name
,date
,type
Sheet 2
也有三列:name
,date
,proposed
我想编写一个脚本,将运行,当我编辑这片和突出proposed
在Sheet 2
(如果条件得到满足)。
该脚本应取Sheet 2
的名称并查找Sheet 1
上的所有相关记录。然后,从这些记录中,找到那些有特定type
(在这种情况下,“最后日期”,并从这些行,返回MAX()
日期。如果该日期Sheet 2
的proposed
列匹配,然后突出显示proposed
。
我我已经能够彩色proposed
如果date
的比赛,但我需要帮忙基础上,提到的标准,正确的日期为date
。
是否有更好的/可在Sheet 2 date
写一个公式来从Sheet 1
得到所需要的数据吗?或者,我是否需要编写一个脚本来填充proposed
c在更改为Sheet 1
之后的列?
无论是哪种情况,我该怎么做?我的搜索没有帮助我达到目标。
我试图写出像这样的单元格公式:=arrayformula(IF('Sheet 1'!C2:C500="Last Date",min(ROW('Sheet 1'!C2:C500)),""))
和许多变化,但没有产生我需要的结果。
我可以很容易地写在Excel
,但不能找出相当于Google Drive
。下面是做这件事Excel
一种方式:
=MAX(IF(2name=1nameRage, IF(1typeRange = "Last Date",1dateRange)))
这里是我的功能来检查的名称,并调用相关功能。
function onEdit(e){
var sheet = SpreadsheetApp.getActiveSheet().getSheetName();
if(sheet.toString()=="Sheet 2"){
dataCheck(e);
}else if(sheet.toString()=="Sheet 1"){
colorItems("Sheet 2","dataRange");
}
}
function dataCheck(e){
var col = e.range.getColumn();
if(col==2){
var row = e.range.getRow();
var cell = SpreadsheetApp.getActiveSheet().getRange(row,col);
var bgc = cell.getBackground();
var cProp = cell.getValue();
var cLast = SpreadsheetApp.getActiveSheet().getRange(row,col+1).getValue();
if(cLast.toString()==cProp.toString() && cProp.toString()!=""){
cell.setBackgroundRGB(190, 190, 190);
}else if (bgc=="#bebebe"){
cell.setBackgroundRGB(255, 255, 255);
}
}
}
function colorItems(sheetName,nameRange){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
var data = sheet.getDataRange();
var numRows = data.getNumRows();
var pDates = ss.getRangeByName(nameRange);
var pDateObject = getRowsData(sheet, pDates);
for (var i = 0; i <= numRows; i++) {
var cell = sheet.getRange(i+2, 2, 1, 1);
var cLast = pDateObject[i].last;
var cProp = pDateObject[i].proposed;
if(!isCellEmpty(cProp)){
if(cLast.toString() ==cProp.toString()){
cell.setBackgroundRGB(190, 190, 190);
}
}else{
cell.setBackgroundRGB(255, 255, 255);
}
}
}