【问题标题】:ArrayFormula with GoogleFinance dynamic date带有 GoogleFinance 动态日期的 ArrayFormula
【发布时间】:2019-12-10 18:13:07
【问题描述】:

首先,我不是一个强大的表格用户:)

我正在尝试使用 GOOGLEFINANCE 计算多种货币的金额。 我使用这个公式:

=IF($A2;
IF( 
$C2:C; 
$C2:C;
IF(
  $D2:D; 
  $D2:D*INDEX(GoogleFinance("CURRENCY:USDUAH";"close";$A2);2;2);
  $E2:E*INDEX(GoogleFinance("CURRENCY:EURUAH";"close";$A2);2;2)
));
0)

A 列包含日期, C、D、E - 3 种不同货币的金额。 IF 只是对列进行优先级排序:)

该公式运行良好,但每次添加行时我都需要“扩展”它 - 以递增 $A2 -> $A3 获取指定日期的汇率。

我尝试使用 ArrayFormula,但事实证明它一直引用 $A2,所以我得到与 A-cells 中指定的日期无关的相同速率。

我创建了示例表来说明: https://docs.google.com/spreadsheets/d/1K2TbGIWl7JacYKiWgwwmJfelxJ-7fa9F9obp5XswW18/edit?usp=sharing

我已允许任何人进行编辑,因此如果您决定进行编辑 - 请不要删除任何内容 :) 您也可以将您的用户名放在粘性行中(在您提出的解决方案上方)

  1. 有没有办法将 ArrayFormula 应用于此以使其工作?
  2. 也许您可以为嵌套 IF 提供更具可读性的解决方案。

【问题讨论】:

  • $A2改成$A2:A怎么样?
  • 与所需输出的示例共享您的工作表副本
  • @ScottCraner 它将范围传递给 googlefinance,不确定它是否会像预期的那样工作。
  • @player0 更新问题并附有工作表链接

标签: google-sheets google-sheets-formula array-formulas gs-vlookup google-finance


【解决方案1】:

尝试:

=ARRAYFORMULA(IF(A2:A<>""; 
 IF(C2:C<>""; C2:C; 
 IF(D2:D<>""; VLOOKUP(TO_TEXT(A2:A); 
 TO_TEXT(QUERY(GOOGLEFINANCE("CURRENCY:USDUAH"; 
 "close"; MIN(A:A); MAX(A:A)+1);
 "offset 1 format Col1'dd.mm.yy'"; 0)); 2; 0)*1; 
 VLOOKUP(TO_TEXT(A2:A); 
 TO_TEXT(QUERY(GOOGLEFINANCE("CURRENCY:EURUAH"; 
 "close"; MIN(A:A); MAX(A:A)+1);
 "offset 1 format Col1'dd.mm.yy'"; 0)); 2; 0)*1)); ))

【讨论】:

  • 酷!看起来它有效,但真的很难理解它的作用:) 另一个后续行动:我可以让它将 googlefinance 结果乘以相应的货币单元格值吗? (我更新了拖动列公式)
  • 当然,使用:=ARRAYFORMULA(IF(A2:A&lt;&gt;""; IF(C2:C&lt;&gt;""; C2:C; IF(D2:D&lt;&gt;""; D2:D*VLOOKUP(TO_TEXT(A2:A); TO_TEXT(QUERY(GOOGLEFINANCE("CURRENCY:USDUAH"; "close"; MIN(A:A); MAX(A:A)+1); "offset 1 format Col1'dd.mm.yy'"; 0)); 2; 0)*1; E2:E*VLOOKUP(TO_TEXT(A2:A); TO_TEXT(QUERY(GOOGLEFINANCE("CURRENCY:EURUAH"; "close"; MIN(A:A); MAX(A:A)+1); "offset 1 format Col1'dd.mm.yy'"; 0)); 2; 0)*1)); ))
【解决方案2】:

试试这个:

=arrayformula(
   IF(query(arrayformula(if(A2:A="",False,True)), 
      "Select * where Col1=True"),
      IF( $C2:C, 
          $C2:C,
          IF( $D2:D,   
              $D2:D*INDEX(GoogleFinance("CURRENCY:USDUAH","close",$A2),2,2),  
              $E2:E*INDEX(GoogleFinance("CURRENCY:EURUAH","close",$A2),2,2))),0))

【讨论】:

  • 这个通常有效,但它总是使用 $A2 中的日期汇率。
  • 请尝试将 ", $A2)" 改为 ", $A2:A)"
  • 我试过了,但它确实与我直接从 A 引用单元格时得到的不同。我已经为相关演示添加了电子表格链接
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多