如何在arrayformula()中偏移importrange()

时间:2020-03-13 07:10:10

标签: google-sheets google-sheets-formula

我有两个包含信息的Google表格(单独的文档),我们称它们为MasterSource。在Source中,我有一个不确定的单元格范围,这些单元格需要按日期显示在Master中。 Master旨在链接到所有各种Source工作表,在正常操作中,我将拥有多个工作表,因此我可以查看有关所有{{1} }表格方便地显示在Source中。 Master包含一个日期范围,该日期范围在Master内的日期范围之前和之后结束(以适应其他Source个工作表中的其他日期范围)。

我的目标是创建一个单个单元格公式,该公式可以针对需要在Source中查看的每个Source复制和粘贴,以填充日期范围前后的列中的单元格来自Master的字符串“ No Class”,并且与日期Source匹配的所有单元格都只是对Source的匹配单元格的复制/引用。这是我想出的公式:

Source
=ARRAYFORMULA(if({A1:Z1;A1:Z1;A1:Z1;A1:Z1;A1:Z1}<importrange(Link!B4,"Source!A1"),"No Class",if({A1:Z1;A1:Z1;A1:Z1;A1:Z1;A1:Z1}>Link!N4,"No Class",importrange(Link!B4,"Source!A1:Z99"))))

令人惊奇的是,它工作得很好,除了一个主要缺点:Link!N4 = Start Date Link!B4 = hyperlink to the google sheet `Source` 的值数组是相对于公式所在的单元格的-aka,importrange的范围始于{ {1}},而不是从与Source具有相同日期的第一列开始。

这是Master!A1中公式结果的screenshot。 *编辑:Source!A1具有条件格式,以使字体颜色与填充色匹配,因此在此屏幕截图中您看不到它,但是它们是深灰色单元格。

还有another screenshot,这次是我要查看的Master

我意识到这种方法可能不是唯一的方法(或可能根本不起作用),但是每次尝试其他操作时,总会遇到相同的问题:如何动态地启动No Class第一列使用第一个单元格中的公式与Source中的日期匹配?

1 个答案:

答案 0 :(得分:1)

我找到了可以接受的解决方法。这绝不是解决偏移数组中数据问题的解决方案,但它使我能够完成需要做的事情。需要使用填充手柄(所选单元格右下角的蓝色方框)填充此代码。如果有人遇到类似情况并需要其他方法来解决问题,我将在此处添加。

=iferror(if(importrange(Link!$B4,"Source!A1")>A2,{"No Class";"No Class";"No Class";"No Class";"No Class"},if(importrange(Link!$B4,address(1,COLUMN(A3)-match(importrange(Link!$B4,"Source!A1"),$A2:$Z2,0),4,TRUE,"Source"))=A2,importrange(Link!$B4,address(2,COLUMN(A3)-match(importrange(Link!$B4,"Source!A1"),$A2:$Z2,0),4,TRUE,"Source")&":"&address(5,COLUMN(A3)-match(importrange(Link!$B4,"Source!A1"),$A2:$Z2,0),4,TRUE)),"No Class")),{"No Class";"No Class";"No Class";"No Class";"No Class"})
A2 is the date of the coloumn in master I'm trying to import into, it changes as your drag the fill handel.
A3 is the cell that the formula is currently in
  1. 这是通过首先检查iferror来起作用的(但我会再说一遍)。
  2. 然后,如果与公式在同一列中的日期小于开始日期,则“ No Class”(填充)(填充开始日期之前的日期)将填满该列。
  3. ELSE如果与公式相同的列中的日期与Source列中的日期相同(由距起始日期的列数偏移),则用相应的列填充Source中的一列(又称一次填充一列,而不是一次导入整个范围)。
  4. (返回iferror)结束日期之后的所有列均会返回错误-因此iferror将这些列填充为“无类”