首页 > 解决方案 > 谷歌表格 - 模拟数据时如何防止负值?

问题描述

背景信息

使用的公式

问题

问题的示例输出

输出

当前的解决方法

谷歌表格设置

目标

如果星期五在单元格中收到负值,则让单元格自动更新

可能的解决方案/想法

有没有办法通过公式强制 RANDBETWEEN 数字更新?

如果是,有没有办法设置一个 WHILE 循环来更新 RANDBETWEEN 值,直到星期五的单元格有一个正数?

有没有办法让脚本在特定单元格上运行?目的是模拟工作计划变化的数据。

我确实尝试通过脚本来完成此操作,但无法让单元格正确更新,有时它根本不会更新。

function randomTotal() 
{
  var Monday = SpreadsheetApp.getActiveSheet().getRange('C4');
  var Tuesday = SpreadsheetApp.getActiveSheet().getRange('D4');
  var Wednesday = SpreadsheetApp.getActiveSheet().getRange('E4');
  var Thursday = SpreadsheetApp.getActiveSheet().getRange('F4');
  var Friday = SpreadsheetApp.getActiveSheet().getRange('G4');
  var FridayValue = SpreadsheetApp.getActiveSheet().getRange('G4').getValue();
  
  while(FridayValue < 0)
  {
    newTotal(Monday,Tuesday,Wednesday,Thursday,Friday);
    FridayValue = SpreadsheetApp.getActiveSheet().getRange('G4').getValue();
  }
}
function newTotal(Monday,Tuesday,Wednesday,Thursday,Friday)
{
  Monday.setFormula('=RANDBETWEEN(0,8)');
  Tuesday.setFormula('=RANDBETWEEN(0,8)');
  Wednesday.setFormula('=RANDBETWEEN(0,8)');
  Thursday.setFormula('=RANDBETWEEN(0,8)');
  Friday.setFormula('=15-SUM(C4:F4)');
}

标签: google-apps-scriptgoogle-sheetsrandomgoogle-sheets-formulasimulate

解决方案


这实际上可以在没有 Google Apps 脚本的情况下完成。我建议单元格 D4 使用以下公式

=RANDBETWEEN(0,IF(SUM($C4:C4)<=6,8,14-SUM($C4:C4)))

然后,您可以将其从 D4 复制/粘贴到 E4 和 F4(公式引用将起作用),并保持 C4 和 G4 不变。这应该够了吧!

您绝对可以通过编程方式完成此操作,但总的来说,如果可以不这样做,那通常是更简单的方法。

快速解释一下为什么会这样:如果左边的单元格总和 <=6,那么你总是可以加起来 8 小时,因为它使你的总和在 <= 14 的范围内。但是,如果不是这种情况,您想从 14 中减去您已经拥有的小时数,因为 14 是您在周一至周四可以拥有的最大值,并在周五获得至少 1 的剩余时间。


推荐阅读