如何通过比率连接单元格的值?

How to connect values of cells through ratio?

我正在寻找通过按行比率连接单元格值的最佳方式。当我在单元格中输入新值时,我想根据比率在其他单元格中获取新值。因此,E 列和 F 列之间的比率 1,F 列和 G 列之间的比率 2。

function onEdit(e) {
var cells1 = ["E2", "E3", "E4"]; // Cells to connection 
var cells2 = ["F2", "F3", "F4"];
var cells3 = ["G2", "G3", "G4"];
var ratio1 = ["H2", "H3", "H4"]; // Expected ratio between values of cells
var ratio2 = ["I2", "I3", "I4"];
var value = (typeof e.value === 'number' ? "" : e.value);
var sheet = e.range.getSheet();
var cell = e.range.getA1Notation();
k = cells1.indexOf(cell);
if (k != -1) {
sheet.getRange(cells2[k]).setValue(value);
sheet.getRange(cells3[k]).setValue(value);
}
k = cells2.indexOf(cell);
if (k != -1) {
sheet.getRange(cells1[k]).setValue(value);
sheet.getRange(cells3[k]).setValue(value);
}
k = cells3.indexOf(cell);
if (k != -1) {
sheet.getRange(cells1[k]).setValue(value);
sheet.getRange(cells2[k]).setValue(value);
}

如果固定三列之间的比例,那么只有一个值可以被变量赋值。之后,所有列都应更新为该参数,在本例中为已编辑的单元格值。

此外,当您只能获取修改后的单元格(基于 1 的数组)的索引时,您检索修改后的单元格的方式有点复杂。

因此,您只需要获取修改单元格的列和行,然后使用该行的比率更新其他单元格。

function onEdit(e) {
  var value = (typeof e.value === 'number' ? "" : e.value);
  var sheet = e.range.getSheet();

  // Get the "Coordinates" of the edit
  var startColumn = e.range.getColumn();
  var startRow = e.range.getRow();

  // Get the ratios at the edited row
  var hRatio = sheet.getRange(startRow, 8).getValue();
  var iRatio = sheet.getRange(startRow, 9).getValue();


  if (startColumn == 5 && startRow > 1 && startRow < 5) {  // Edit on E column
    sheet.getRange(startRow, 6).setValue(value / hRatio); //Update F Cell 
    sheet.getRange(startRow, 7).setValue(value / hRatio / iRatio); // Update G Cell

  }
  if (startColumn == 6 && startRow > 1 && startRow < 5) {  // Edit on F column
    sheet.getRange(startRow, 5).setValue(hRatio * value); // Update on E cell
    sheet.getRange(startRow, 7).setValue(value / iRatio); // Update on G Cell

  }
  if (startColumn == 7 && startRow > 1 && startRow < 5) {  // Edit on G column
    sheet.getRange(startRow, 5).setValue(hRatio * iRatio * value); // Update on E cell
    sheet.getRange(startRow, 6).setValue(iRatio * value); // Update on F cell

  }

}

希望这对你有用