【问题标题】:How can I combine multiple functions with ArrayFormula如何将多个函数与 ArrayFormula 结合起来
【发布时间】:2020-06-13 19:44:43
【问题描述】:

我使用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 范围必须是单行或单列。

【问题讨论】:

  • 请分享样品
  • 总体目标是什么?你能用语言解释一下查询的目标吗?这类似于“显示此导入表中的所有 ETA 列,其中 [条件列表]”
  • @MattKing 你几乎成功了,目标:'向我显示此导入表中的所有 ETA 列,其中发货 ID 在给定列表中'
  • @HasanAYousef 好的,我可以这样做,但是 A 列和 B 列中的“列表”都在吗?您将那些标记为“项目”和“尺寸”。另外样品中只有2批,所以测试起来有点困难。

标签: google-sheets


【解决方案1】:

我相信标签上名为 MK.Testing 的这个公式会提取您希望的信息。

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

我认为你可能把事情复杂化了?此公式只是从货件 ID 中形成一个文本字符串以用于查询。可能会让您感到困惑的一件事是 query() 对列中数据的 type 非常特别。您的货件 ID 可以是数字,也可以是数字字母组合,但不能同时是两者。也就是说,如果您有一些包含字母的货件 ID,而另一些不包含,则更难获得有效的查询。 (尽管并非不可能)。不过,为了帮助您,您的示例 ID 以这种方式尽可能准确地反映真实 ID 非常重要。

【讨论】:

  • 我担心的是我想使用数组公式来让它沿着整列执行,这就是它让我变得复杂的原因
  • 啊。好吧,我也可以,那么你想在一个单元格中列出货运清单吗?也许逗号分隔?
【解决方案2】:

如何使用 Apps 脚本执行此操作?您可以从 Sheet2、Shipment 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);

      }
    }
  }
}

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多