计算分布在 125 个点上的中间值 - Google 张

Calculate the intermediate values spread over 125 points - Google Sheets

我在整理电子表格时遇到了问题,我相信一定有一种简单的方法可以做到这一点(我正在使用 Google 表格)。

我有一个起始值和一个结束值,我需要计算分布在 125 个点上的中间值。这个值可以增加也可以减少,我只需要找到一个公式returns这些点的线性演化。

我的电子表格类似于下面的 table:

Point Value
1 6,078
2 ?
3 ?
4 ?
5 ?
6 ?
... ?
126 5,9096

有什么想法吗?

谢谢!!!

  • 转到文件
  • select 电子表格设置...
  • select计算
  • 开启迭代计算
  • 点击保存设置按钮

  • 将此公式粘贴到 A3

=IF(INDIRECT("A"&ROW()-1)=INDEX(FILTER(INDIRECT("A"&ROW()&":A");N(INDIRECT("A"&ROW()&":A")));1;1);
ARRAYFORMULA(TEXT(TRANSPOSE(SPLIT(REPT(INDIRECT("A"&ROW()-1)&";";COUNTA(ARRAYFORMULA(INDIRECT("A"&
ROW()-1)+(ROW(INDIRECT("A"&ROW()&":A"&INDEX(FILTER(IF(N(INDIRECT("A"&ROW()&":A"));ROW(INDIRECT("A"&
ROW()&":A")););IF(N(INDIRECT("A"&ROW()&":A"));ROW(INDIRECT("A"&ROW()&":A"));));1;1)-1))-2))));";"));
"##"));ARRAYFORMULA(TEXT(INDIRECT("A"&ROW()-1)+(ROW(INDIRECT("A"&ROW()&":A"&INDEX(FILTER(IF(N(
INDIRECT("A"&ROW()&":A"));ROW(INDIRECT("A"&ROW()&":A")););IF(N(INDIRECT("A"&ROW()&":A"));ROW(
INDIRECT("A"&ROW()&":A"));));1;1)-1))-2)* (INDEX(FILTER(INDIRECT("A"&ROW()&":A");N(INDIRECT("A"&ROW(
)&":A")));1;1)-INDIRECT("A"&ROW()-1))/(ROWS(INDIRECT("A"&ROW()&":A"&INDEX(FILTER(IF(N(INDIRECT("A"&
ROW()&":A"));ROW(INDIRECT("A"&ROW()&":A"));); IF(N(INDIRECT("A"&ROW()&":A"));ROW(INDIRECT("A"&ROW()&
":A"));));1;1)-1)))* (ABS(MINUS(INDIRECT("A"&ROW()-1);INDEX(FILTER(INDIRECT("A"&ROW()&":A");N(
INDIRECT("A"&ROW()&":A")));1;1)))-(ABS(MINUS(INDIRECT("A"&ROW()-1);INDEX(FILTER(INDIRECT("A"&ROW()&
":A");N(INDIRECT("A"&ROW()&":A")));1;1)))* (100/(((COUNTIF(INDIRECT("A"&ROW()&":A"&INDEX(FILTER(IF(
N(INDIRECT("A"&ROW()&":A"));ROW(INDIRECT("A"&ROW()&":A")););IF(N(INDIRECT("A"&ROW()&":A"));ROW(
INDIRECT("A"&ROW()&":A"));));1;1));"<>""")+1)-1)* 100))))/ABS(MINUS(INDIRECT("A"&ROW()-1);INDEX(
FILTER(INDIRECT("A"&ROW()&":A");N(INDIRECT("A"&ROW()&":A")));1;1)));"0,0000")))

demo spreadsheet

不清楚您是否只需要 whole-number 值,或者如果不需要,中间值的精度应该是多少。但是在下面至少有 125 行的单元格中使用以下公式就可以解决问题:

=ArrayFormula(ROUNDUP(SEQUENCE(126,1,6078*100,(59096-6078)/125*100)/100))

当然,您可以在两个单元格中设置起始值和结束值,然后引用单元格。

将所有内容乘以 100 再除以 100 的原因是,大多数情况下,中间原始值将包含小数部分,而 SEQUENCE 仅适用于整数。因此,乘以 100 然后再除以 100 可以使基础数字在应用 ROUNDUP 之前达到 1/100(或两位小数)的精度。

如果要查看小数值,请删除 ROUNDUP( )

如果您想要更高的精度,请在公式中出现的三个位置分别增加 100 到 1000(等等)。

您也可以尝试通过 Google Apps 脚本使用自定义函数。您可以使用以下脚本:

/**
 * Fills in the linear series given the range of the first and last values of the series.
 *
 * @param {string} input the range of the first value
 * @param {string} input the range of the last value
 * @return array of the series output
 * @customfunction
 */

function linearFillinFunction(firstValueRange, lastValueRange) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var firstVal = ss.getRange(firstValueRange).getValue(); //Gets the first value of the linear series
  var lastVal = ss.getRange(lastValueRange).getValue(); //Gets the last value of the linear series
  var lastRow = ss.getRange(lastValueRange).getRow(); //Gets the row number of the last value
  var interval = (lastVal - firstVal)/(lastRow-1); //Gets the interval in the linear series
  var out = []; //Sets the output array to empty
  for(i=2; i<lastRow; i++) { //Iterates the series
    out.push([firstVal+=interval]); //Adds the series entry to the output array
  }
  return out;
}

要使用自定义函数,只需将函数放在您想要的任何单元格中,然后输入线性序列的第一个和最后一个值的范围(以 A1 表示法),如下所示。请注意,预期要填写的单元格应该是空的。

输出:

反向输出:

参考文献:

如果您想了解更多关于创建自定义函数的信息,您可能想尝试浏览: