如何将多个函数与ArrayFormula结合使用

时间:2020-03-01 08:05:23

标签: google-sheets

我使用ImportRangeQuery以及JoinSplit的以下公式正常工作:

=join(" / ", QUERY(IMPORTRANGE("Google-Sheet-ID","RawData!A:AC"),"select Col25 where Col1 = " & JOIN(" OR Col1 = ", split(V2:V,"+")), 0))

此外,下面的ArrayFormulaSplit函数运行正常:

=ARRAYFORMULA(if(len(V2:V)=0,,split(V2:V,"+")))

但是当我尝试使用以下公式将它们组合在一起时:

=ARRAYFORMULA(if(len(V2:V)=0,,join(" / ", QUERY(IMPORTRANGE("Google-Sheet-ID","RawData!A:AC"),"select Col25 where Col1 = " & JOIN(" OR Col1 = ", split(V2:V,"+")), 0))))

它失败了,并给了我以下错误:

错误 功能SPLIT参数1的值应为非空。

Here是我的测试表。

更新

我将其更改为:

=ARRAYFORMULA(if(len(C2:C)=0,,JOIN(" OR Col1 = ", ARRAYFORMULA(if(len(C2:C)=0,,split(C2:C,"+"))))))

所以我的完整公式是:

=ARRAYFORMULA(
if(
   len(C2:C)=0,,
join(" / ", 
QUERY(
     IMPORTRANGE("14iNSavtvjRU0XipPWIMKyHNwXTA85P_CafFTsIPHI6c","RawData!A:AC"),"select Col25 where Col1 = " & 
        ARRAYFORMULA(
           if(len(C2:C)=0,,
              JOIN(" OR Col1 = ", 
                  ARRAYFORMULA(
                     if(
                         len(C2:C)=0,,split(C2:C,"+")
                      )
                  )
               )
            )
        ),

    0
))))

现在出现错误:

错误 JOIN范围必须是单行或单列。

2 个答案:

答案 0 :(得分:1)

我相信这个称为MK的标签上的公式。测试会提取您想要的信息。

=QUERY(IMPORTRANGE("14iNSavtvjRU0XipPWIMKyHNwXTA85P_CafFTsIPHI6c","RawData!A:AC"),"select Col25 where Col1="&TEXTJOIN(" or Col1=",TRUE,A2:A))

我认为您可能过于复杂了?此公式仅构成要在查询中使用的货件ID中的文本字符串。可能会让您失望的一件事是,query()对于列中数据的类型而言非常具体。您的货件ID可以是数字,也可以是数字字母组合,但不能同时使用。也就是说,如果您有一些包含字母的货运ID,而另一些不包含字母的货运ID,则更难获得有效的查询。 (尽管并非不可能)。不过,为了帮助您,请务必以尽可能准确的方式将示例ID反映真实的ID。

答案 1 :(得分:0)

如何使用Apps Script执行此操作?您可以从Sheet2,货件ID和MK.Testing的ID中获取值,然后进行比较。如果它们一致,则将ETA复制到MK的C列中。测试:

function myFunction() {
  var sprsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet2 = sprsheet.getSheetByName("Sheet2");
  var mkTesting = sprsheet.getSheetByName("MK.Testing");

  var shipmentId = sheet2.getRange("A2:A").getValues();
  var idList = mkTesting.getRange("A2:A").getValues();

  for (var i = 0; i < shipmentId.length; i++){

    for (var j = 0; j < idList.length; j++){

      if (idList[j][0] == ""){break;} //Stops if there is an empty cell in Mk.Testing's column A

      if (idList[j][0] === shipmentId[i][0]){

        var eta = sheet2.getRange("E"+(i+2)).getValue();

        mkTesting.getRange("C"+(j+2)).setValue(eta);

      }
    }
  }
}

参考: