我正在解决这种情况:
根据B1(输入单元格)中随时间变化的值,在输出单元格(D1)中打印特定的“状态”。
具有3种可能的状态:
第一名:“有效”
2nd:“待处理”
第3个:“已批准”
具有3个主要属性:
A1 =固定值(不随时间变化)
B1 =值随时间变化
C1 =字符串“ APPROVED”(要手动输入)
D1 =输出单元格
遵循以下公式:
=IFS(len(C1),"APPROVED",B1>A1,"VALID",B1<=A1,"PENDING",TRUE,"ERROR")
我想做的是:
将B1> A1(“有效”状态)更改为B1 <= A1(“待处理”状态)后,将D1单元格状态“待处理”锁定为“待处理”。 即当/当B1 <= A1变回B1> A1时,不恢复为“有效”。
此外,只有在随后满足状态“已批准”(len(C1)-手动将字符串“ APPROVED”输入到C1)的条件时,才将“待定”状态解锁为“已批准”状态。
以下是预期结果的简单示例:
B1> A1->状态=有效
A1 = 1.2(在A1中为固定数字)
B1 = 1.5(在B1中,数字随时间变化)
C1 =(空单元格)
D1 = 有效
B1 <= A1->状态=待处理
A1 = 1.2(比如说2019年5月27日,12:15 pm)
B1 = 1.2(或1.1)(在B1中,数字随时间变化)
C1 =(空单元格)
D1 = 待审核
B1> A1->状态=待处理(尽管B1恢复为B1> A1也没有恢复为有效)
A1 = 1.2(在A1中为固定数字)
B1 = 1.4 (在B1中,数字随时间变化)
C1 =(空单元格)
D1 = 待审核
A1 = 1.2(在A1中为固定数字)
B1 = 1.4或1.1 (在B1中,数字随时间变化)
D1 = 已批准(因为手动将任何字符输入到C1中)
C1 = (到C1的任何字符长度)
(用户手动将任何字符/字符串输入C1-> Status = APPROVED(由于len(C1),PENDING状态被解锁为APPROVED状态)
在T3,这是我目前面临的问题。
使用以下公式:
=IFS(len(C1),"APPROVED",B1>A1,"VALID",B1<=A1,"PENDING",TRUE,"ERROR")
“待处理”状态(从T2获得)恢复为“有效”
一旦B1> A1(“有效”状态)变为B1 <= A1(“待处理”状态),如何锁定“待处理”状态?
然后在将“ APPROVED”字符串手动键入D1时解锁“ PENDING”状态吗?
新问题: 我们也可以对状态进行颜色和粗体编码吗?
例如:
下表中的单元格A22至A25。
在这里放置:
https://docs.google.com/spreadsheets/d/1UjjMnLmNbEDUfXjeCIOgBZwYqTeXdm_t_4N45OL0k6I/edit#gid=0
非常感谢您的帮助!
答案 0 :(得分:0)
关于第二个参数,以便在将任何字符长度输入C1时启用将状态从“ PENDING”更改为“ APPROVED”,我添加了等效的IFS函数len(C1)应用程序脚本:
Loan Nego New Maturity Loan Amount in OCUR New Interest
2019-03-01 2019-03-11 1000 0.65
2019-03-01 2019-03-29 2000 3.671
答案 1 :(得分:0)
要为文本状态添加颜色和粗体,我已将.setFontColor和.setFontWeight参数添加到应用程序脚本代码中:
/**
* Colors specific words
*
* @param arg2: Colors "VALID" Status to orange, "PENDING" Status to gree, and "APPROVED" to purple
*
* @customfunction
*/
function COLORWORDS(arg2) {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var fixedvalueCell = activeSheet.getRange(1, 1).getValue();
var changingvalueCell = activeSheet.getRange(1, 2).getValue();
var approveCell = activeSheet.getRange(1, 3).getValue();
var statusCell = activeSheet.getRange(1, 4).getValue();
if
(approveCell !== "") {
activeSheet.getRange(1, 4).setValue("APPROVED").setFontColor("#7F00FF").setFontWeight("bold");
}
else if
(changingvalueCell <= fixedvalueCell) {
activeSheet.getRange(1, 4).setValue("PENDING").setFontColor("#7FFF00").setFontWeight("bold");
}
else {
activeSheet.getRange(1, 4).setValue("VALID").setFontColor("#FF3D0D").setFontWeight("bold");
}
var result = arg2;
return result;
}
答案 2 :(得分:0)
最后把它整理好了!
这是类似于IFS功能操作模式的操作优先顺序的问题:
关于“已批准”状态的第一条If语句作为对机器的第一条指令。
(如果1st是FALSE
,机器将继续对其进行计算)
作为对机器的第二条操作指令,进入IF语句的“ PENDING”状态(常规)。
(如果第一个语句是(静止)FALSE
,第二个语句是(静止)TRUE
,机器将继续对其进行计算)
如果单元格D1包含字符串“ PENDING”(从第2个操作语句,从TRUE
之前继承过来),则继续锁定单元格D1中的““ PENDING”状态(statusCell =“ PENDING” —> D1 = “正在等待”)
(如果第一,第二/第三操作语句都不是TRUE
,机器将继续对其进行计算)
作为对机器的第4/3条操作指令,进入状态IF语句“ VALID”。
因此,与通常的人类思维相比,机器必须以向后的方式继续执行其操作:首先批准,然后挂起,然后锁定挂起,最后有效。
/**
* Locks the Status of a cell according to criteria and Colors and bolds the specific words of status
*
* @param arg3: Colors "VALID" Status to orange, "PENDING" Status to green, and "APPROVED" to purple
*
* @customfunction
*/
function LOCKVALUE&COLOR&BOLDWORDS(arg3) {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
//(read left to right) get the value from range A1:A1, from active sheet, and assign it the variable "fixedvalueCell"
var fixedvalueCell = activeSheet.getRange(1, 1).getValue();
//(read left to right) get the value from range B1:B1, from active sheet, and assign it the variable "changingvalueCell"
var changingvalueCell = activeSheet.getRange(1, 2).getValue();
//(read left to right) get the value from range C1:C1, from active sheet, and assign it the variable "approveCell"
var approveCell = activeSheet.getRange(1, 3).getValue();
//(read left to right) get the value from range D1:D1, from active sheet, and assign it the variable "statusCell"
var statusCell = activeSheet.getRange(1, 4).getValue();
//[1.] if the value of approveCell is blank, then set/print "APPROVED" into D1, and color it to purple, and bold it.
if
(approveCell !== "") {
activeSheet.getRange(1, 4).setValue("APPROVED").setFontColor("#7F00FF").setFontWeight("bold");
}
//[2.] if the value of changingvalueCell is smaller or equal to the value of fixedvalueCell, then set/print "PENDING" into D1, and color it to green, and bold it.
else if
(changingvalueCell <= fixedvalueCell) {
activeSheet.getRange(1, 4).setValue("PENDING").setFontColor("#7FFF00").setFontWeight("bold");
}
//[3.] if the value of statusCell is "PENDING", then set/print "PENDING" into D1, and color it to green, and bold it.
else if
(statusCell = "PENDING") {
activeSheet.getRange(1, 4).setValue("PENDING").setFontColor("#7FFF00").setFontWeight("bold");
}
//[4.] if all [1.] and [2.] and [3.] IF statements are FALSE (for everithing else), then set/print "VALID" into D1, and color it to orange, and bold it.
else {
activeSheet.getRange(1, 4).setValue("VALID").setFontColor("#FF6600").setFontWeight("bold");
}
var result = arg3;
return result;
}
答案 3 :(得分:-1)
到目前为止,这是我来的地方。
经过一些研究,我成功介绍了如何使用基本的应用程序脚本自定义功能,并成功地复制了if语句,如下所示。 但我仍然看不到如何通过B1 <= A1参数验证“ PENDING”状态的存储方式。照原样,当B1值恢复为B1> A1时,下面的脚本恢复为“有效”状态。
如何在应用脚本中表达这种缺失的存储参数?
/**
* Stores Status 'PENDING' As soon as B1>A1 changes to B1<=A1
*
* @param arg1: The "PENDING" status that will be stored as soon as B1>A1 changes to B1<=A1
* @customfunction
*/
function STATUSPENDING(arg1) {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var fixedvalueCell = activeSheet.getRange(1, 1).getValue();
var changingvalueCell = activeSheet.getRange(1, 2).getValue();
var statusCell = activeSheet.getRange(1, 4).getValue();
if(changingvalueCell <= fixedvalueCell) {
activeSheet.getRange(1, 4).setValue("PENDING");
} else {
activeSheet.getRange(1, 4).setValue("VALID");
}
var result = arg1;
return result;
}