在谷歌电子表格中“同步”相互依赖的单元格值

时间:2016-04-08 16:10:01

标签: google-sheets

假设我有三个单元格,一个包含距离,一个包含速度,另一个包含时间。现在我希望能够填充两个单元格(例如距离和速度)并在第三个单元格中计算时间。但是当我填写速度和时间时,应该计算距离。

如何在谷歌电子表格中实现这一目标?我想应该进行某种检查以不创建无限循环。我试图搜索细胞同步或细胞依赖性,但我认为这不是解决这个问题的正确术语。

2 个答案:

答案 0 :(得分:3)

您可以使用嵌套的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,)))

以下是所有三种情况的屏幕截图:

enter image description here

答案 1 :(得分:1)

您可以使用function onEdit(t) { var workSheetName = 'Sheet1'; // change sheet name to yours var distanceRangeAddress = 'A2:A'; // change if needed var speedRangeAddress = 'B2:B'; // change if needed var timeRangeAddress = 'C2:C'; // change if needed var ss = SpreadsheetApp.getActiveSheet(); var sn = ss.getName(); var distance, speed, time; if (sn == workSheetName) { var tr = t.range; if (t.oldValue != tr.getValue() && tr.getNumColumns() == 1 && tr.getNumRows() == 1) { // distance var myr = ss.getRange(distanceRangeAddress); if (RangeIntersect(tr, myr)) { distance = tr.getValue(); speed = tr.offset(0, 1).getValue(); time = tr.offset(0, 2).getValue(); if (time > 0) { speed = distance / time; tr.offset(0, 1).setValue(time); return; } if (speed > 0) { time = distance / speed; tr.offset(0, 2).setValue(time); return; } } // speed myr = ss.getRange(speedRangeAddress); if (RangeIntersect(tr, myr)) { speed = tr.getValue(); distance = tr.offset(0, -1).getValue(); time = tr.offset(0, 1).getValue(); if (time > 0) { distance = speed * time; tr.offset(0, -1).setValue(distance); return; } if (distance > 0) { time = distance / speed; tr.offset(0, 1).setValue(time); return; } } // time myr = ss.getRange(timeRangeAddress); if (RangeIntersect(tr, myr)) { time = tr.getValue(); distance = tr.offset(0, -2).getValue(); speed = tr.offset(0, -1).getValue(); if (speed > 0) { distance = speed * time; tr.offset(0, -2).setValue(distance); return; } if (distance > 0) { speed = distance / time; tr.offset(0, -1).setValue(speed); return; } } } } } function RangeIntersect(R1, R2) { var LR1 = R1.getLastRow(); var Ro2 = R2.getRow(); if (LR1 < Ro2) return false; var LR2 = R2.getLastRow(); var Ro1 = R1.getRow(); if (LR2 < Ro1) return false; var LC1 = R1.getLastColumn(); var C2 = R2.getColumn(); if (LC1 < C2) return false; var LC2 = R2.getLastColumn(); var C1 = R1.getColumn(); if (LC2 < C1) return false; return true; }事件:

  1. 用户输入一些值(速度,行,距离)
  2. 脚本检查其他值,
  3. 计算结果
  4. 将结果粘贴到单元格
  5. 脚本的全文在这里:

    &#13;
    &#13;
    var workSheetName = 'Sheet1'; // change sheet name to yours
    var distanceRangeAddress = 'A2:A'; // change if needed
    var speedRangeAddress = 'B2:B'; // change if needed
    var timeRangeAddress = 'C2:C'; // change if needed
    
    &#13;
    &#13;
    &#13;

    您可能想要在脚本的开头更改参数:

    {{1}}

    此处example file

    该脚本可以根据您的需求进行改进和采用。请在这里查找more information