Google Sheets - 使用 N/A 从数组中获取前两个值并从第一个值中减去第二个值

Google Sheets - Grabbing first two values from array with N/A's and subtract second value from first

我有一个 sheet,它具有过去 5 天的平均值,当存在​​一个值时,我需要从第一个值中减去第二个值。行如下所示:

14.7    #N/A    15.3    #N/A    #N/A
#N/A    0.2     #N/A    0.3     #N/A
5.7     5.8     #N/A    5.7     5.5
4.4     4.4     #N/A    #N/A    #N/A
7.7     #N/A    7       #N/A    7.7
#N/A    #N/A    #N/A    #N/A    2.2
#N/A    #N/A    #N/A    #N/A    0
3       #N/A    2.4     #N/A    1.9
#N/A    #N/A    #N/A    #N/A    2
9.6      7.8    #N/A    7.5     #N/A
10.3    #N/A    10.3    #N/A    9.2
#N/A    #N/A    #N/A    #N/A    2.8
9.1     #N/A    8.7     #N/A    8.7
#N/A    #N/A    #N/A    #N/A    9.1
#N/A    #N/A    #N/A    #N/A    6.4
#N/A    #N/A    #N/A    6.1     2.3
#N/A    #N/A    #N/A    #N/A    0.5

这个数可以是负数,只需要用第一个值减去第二个值就可以了

例如,第 1 行将从第 1 列中减去第 3 列。

或者第 2 行将从第 2 列减去第 4 列

此公式获取最新的(如果存在):

    =IFS((QUERY(sheetwithvalues!A2:B, "Select B where A contains " & """" & A2       & """" & 
""))>0,(QUERY(sheetwithvalues!A2:B, "Select B where A contains " & """" & A2       & """" & 
"")),(QUERY(sheetwithvalues!A2:C, "Select C where A contains " & """" & A2       & """" & 
""))>0,(QUERY(sheetwithvalues!A2:C, "Select C where A contains " & """" & A2       & """" & 
"")),(QUERY(sheetwithvalues!A2:D, "Select D where A contains " & """" & A2       & """" & 
""))>0,(QUERY(sheetwithvalues!A2:D, "Select D where A contains " & """" & A2       & """" & 
"")),(QUERY(sheetwithvalues!A2:E, "Select E where A contains " & """" & A2       & """" & 
""))>0,(QUERY(sheetwithvalues!A2:E, "Select E where A contains " & """" & A2       & """" & 
"")),(QUERY(sheetwithvalues!A2:F, "Select F where A contains " & """" & A2       & """" & 
""))>0,(QUERY(sheetwithvalues!A2:F, "Select F where A contains " & """" & A2       & """" & 
"")))

但我不知道如何使用这样的东西来获取它找到的第二个值并将其从第一个值中减去。这在 google sheet 秒内可能吗?

我也对 google 脚本持开放态度,如果可行,该脚本会在复制的 sheet 上运行某种 drop N/A。我似乎无法跳出框框思考足够远,甚至无法想出一个主意。

如果有人有想法,我可以尝试实现它。提前致谢。

我相信你的目标如下。

The number can be negative, It just needs to subtract the second value it finds from the first value it finds. For example row 1 would subtract column 3 from column 1.

Or row 2 would subtract column 4 from column 2

关于第 3 行和第 6 行,

row three would subtract column 2 from col 1

row 6 would be N/A if possible.

并且,您希望使用 Google Apps 脚本实现此目的。

在上面的逻辑中,下面的示例脚本怎么样?

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中并保存脚本。

function SAMPLE(values) {
  const c = 10000; // This is for subtraction.
  return values.map(r => [r.reduce((o, e) => {
      if (e != "#N/A" && o.res == "#N/A") {
        if (o.temp == 0) {
          o.temp = e;
        } else {
          o.res = (o.temp * c - e * c) / c;
        }
      }
      return o;
    }, { res: "#N/A", temp: 0 }).res
  ]);
}
  • 当您使用此脚本时,请将=SAMPLE(A1:E17)的自定义函数放入单元格,作为以下示例结果。

参考文献:

这是一个没有脚本的替代方法:

=arrayformula(iferror(1/(query(iferror(1/split(
transpose(query(transpose(ifna(A1:E17)),,9^9))," ")^-1,na()),
"select Col1-Col2 label Col1-Col2 ''"))^-1,na())) 

编辑: 我注意到上面的公式也会 return #N/A 当差异为 0 时。请尝试以下操作:

=arrayformula(if(len(substitute(
transpose(query(transpose(if(isna(A1:E17),,"z")),,9^9))," ",))=1,na(),
query(iferror(1/split(
transpose(query(transpose(ifna(A1:E17)),,9^9))," ")^-1,na()),
"select Col1-Col2 label Col1-Col2 ''")))