Google sheets ';同步';谷歌电子表格中的单元格值相互依赖
假设我有三个单元格,一个包含距离,一个包含速度,另一个包含时间。现在,我希望能够填写两个单元格(例如距离和速度),并在第三个单元格中计算时间。但是当我填写速度和时间时,应该计算距离Google sheets ';同步';谷歌电子表格中的单元格值相互依赖,google-sheets,Google Sheets,假设我有三个单元格,一个包含距离,一个包含速度,另一个包含时间。现在,我希望能够填写两个单元格(例如距离和速度),并在第三个单元格中计算时间。但是当我填写速度和时间时,应该计算距离 如何在谷歌电子表格中实现这一点?我认为应该进行某种检查,以避免创建无限循环。我试图搜索单元格同步或单元格依赖项,但我认为这不是解决此问题的正确术语。您可以使用嵌套的if语句: =if(And(isnumber(A2),isnumber(C2)),ROUND(A2/C2),if(And(isnumber(A2),isn
如何在谷歌电子表格中实现这一点?我认为应该进行某种检查,以避免创建无限循环。我试图搜索单元格同步或单元格依赖项,但我认为这不是解决此问题的正确术语。您可以使用嵌套的if语句:
=if(And(isnumber(A2),isnumber(C2)),ROUND(A2/C2),if(And(isnumber(A2),isnumber(B2)),round(A2/B2),if(and(isnumber(B2),isnumber(C2)),B2*TIMEVALUE(C2)*24,)))
以下是所有三个场景的屏幕截图:
您可以使用嵌套的if语句执行此操作:
=if(And(isnumber(A2),isnumber(C2)),ROUND(A2/C2),if(And(isnumber(A2),isnumber(B2)),round(A2/B2),if(and(isnumber(B2),isnumber(C2)),B2*TIMEVALUE(C2)*24,)))
以下是所有三个场景的屏幕截图:
您可以使用
OnEdit
事件:
函数onEdit(t){
var workSheetName='Sheet1';//将工作表名称更改为您的工作表名称
var distanceRangeAddress='A2:A';//如果需要,请更改
var speedRangeAddress='B2:B';//如果需要,请更改
var timeRangeAddress='C2:C';//如果需要,请更改
var ss=SpreadsheetApp.getActiveSheet();
var sn=ss.getName();
距离、速度、时间;
如果(sn==工作表名称){
var-tr=t.range;
if(t.oldValue!=tr.getValue()&&tr.getNumColumns()==1&&tr.getNumRows()==1){
//距离
var myr=ss.getRange(distanceRangeAddress);
if(量程(tr,myr)){
距离=tr.getValue();
速度=tr.offset(0,1).getValue();
time=tr.offset(0,2).getValue();
如果(时间>0){
速度=距离/时间;
tr.偏移量(0,1).设定值(时间);
返回;
}
如果(速度>0){
时间=距离/速度;
tr.偏移量(0,2).设定值(时间);
返回;
}
}
//速度
myr=ss.getRange(speedRangeAddress);
if(RangeIntersect(tr,myr)){
速度=tr.getValue();
距离=tr.offset(0,-1).getValue();
time=tr.offset(0,1).getValue();
如果(时间>0){
距离=速度*时间;
tr.偏移量(0,-1).设定值(距离);
返回;
}
如果(距离>0){
时间=距离/速度;
tr.偏移量(0,1).设定值(时间);
返回;
}
}
//时间
myr=ss.getRange(timeRangeAddress);
if(量程(tr,myr)){
时间=tr.getValue();
距离=tr.offset(0,-2).getValue();
速度=tr.offset(0,-1).getValue();
如果(速度>0){
距离=速度*时间;
tr.偏移量(0,-2).设定值(距离);
返回;
}
如果(距离>0){
速度=距离/时间;
tr.偏移量(0,-1).设定值(速度);
返回;
}
}
}
}
}
函数范围相交(R1,R2){
var LR1=R1.getLastRow();
var Ro2=R2.getRow();
如果(LR1 }
您可以使用OnEdit
事件:
函数onEdit(t){
var workSheetName='Sheet1';//将工作表名称更改为您的工作表名称
var distanceRangeAddress='A2:A';//如果需要,请更改
var speedRangeAddress='B2:B';//如果需要,请更改
var timeRangeAddress='C2:C';//如果需要,请更改
var ss=SpreadsheetApp.getActiveSheet();
var sn=ss.getName();
距离、速度、时间;
如果(sn==工作表名称){
var-tr=t.range;
if(t.oldValue!=tr.getValue()&&tr.getNumColumns()==1&&tr.getNumRows()==1){
//距离
var myr=ss.getRange(distanceRangeAddress);
if(量程(tr,myr)){
距离=tr.getValue();
速度=tr.offset(0,1).getValue();
time=tr.offset(0,2).getValue();
如果(时间>0){
速度=距离/时间;
tr.偏移量(0,1).设定值(时间);
返回;
}
如果(速度>0){
时间=距离/速度;
tr.偏移量(0,2).设定值(时间);
返回;
}
}
//速度
myr=ss.getRange(speedRangeAddress);
if(RangeIntersect(tr,myr)){
速度=tr.getValue();
距离=tr.offset(0,-1).getValue();
time=tr.offset(0,1).getValue();
如果(时间>0){
距离=速度*时间;
tr.偏移量(0,-1).设定值(距离);
返回;
}
如果(距离>0){
时间=距离/速度;
tr.偏移量(0,1).设定值(时间);
返回;
}
}
//时间
myr=ss.getRange(timeRangeAddress);
if(量程(tr,myr)){
时间=tr.getValue();
距离=tr.offset(0,-2).getValue();
速度=tr.offset(0,-1).getValue();
如果(速度>0){
距离=速度*时间;
tr.偏移量(0,-2).设定值(距离);
返回;
}
如果(距离>0){
速度=距离/时间;
tr.偏移量(0,-1).设定值(速度);
返回;
}
}
}
}
}
函数范围相交(R1,R2){
var LR1=R1.getLastRow();
var Ro2=R2.getRow();
如果(LR1