Google sheets 三维动态查找-谷歌工作表

Google sheets 三维动态查找-谷歌工作表,google-sheets,lookup,array-formulas,Google Sheets,Lookup,Array Formulas,我已经在我的个人帐户上创建了一个测试表以供参考。请看这里() 两个选项卡,都在同一张纸上 “查找” “数据库” 小结 需要查找选项卡上单元格“B2”中的数组公式,该公式将 填充整行。对于匹配的机器,公式需要从数据库选项卡的第2行中提取相应的日期时间 条件 数据库第2行的Datetime必须是与NOW()最接近的值编辑:必须首先执行此检查,然后从找到的列开始完成条件2。 该值是相应的“机器”行,也必须大于0(即,如果满足条件1的第一列在相应行中具有“0”,则它应移动到下一列,依此类推,直到它在

我已经在我的个人帐户上创建了一个测试表以供参考。请看这里()

两个选项卡,都在同一张纸上 “查找” “数据库”

小结

  • 需要查找选项卡上单元格“B2”中的数组公式,该公式将
    填充整行。对于匹配的机器,公式需要从数据库选项卡的第2行中提取相应的日期时间
条件

  • 数据库第2行的Datetime必须是与NOW()最接近的值编辑:必须首先执行此检查,然后从找到的列开始完成条件2。
  • 该值是相应的“机器”行,也必须大于0(即,如果满足条件1的第一列在相应行中具有“0”,则它应移动到下一列,依此类推,直到它在该相应行中找到一列,该列的任何数字都大于0)
  • 我已经放置了一张参考表,向您展示了输出应该是什么,并且还突出显示了满足上述条件的值(假设“Now()”=“2/10/2021 14:37:00”)

    更新公式 向球员0大声呼喊,这一次表现强劲!此处发布的最终公式将“NOW()”的假设值更新为实际动态值,并舍入到最接近的15分钟

    =ARRAYFORMULA(IFNA(VLOOKUP(A2:A,QUERY(SORT(SPLIT(FLATTEN(IF(Database!B3:N7<>"", 
         Database!A3:A7&"×"&IF((Database!B2:N2-CEILING(NOW(),"00:15"))>-0.166678240741021,Database!B2:N2, "0")&"×"&ROW(Database!A3:A7)&"×"&
         ABS(Database!B2:N2-VALUE(CEILING(NOW(),"00:15")))&"×"&Database!B3:N7)), "×"), 3, 1, 4, 1), 
         "where Col2 <> 0 and Col5 <> 0 and Col2 is not null format Col2 'dd/mm/yyyy hh:MM:ss'"), 2, 0)))
    
    =ARRAYFORMULA,
    数据库!A3:A7&“×”&IF((数据库!B2:N2-天花(现在(),“00:15”)>-0.166678240741021,数据库!B2:N2,“0”)&“×”&行(数据库!A3:A7)&“×”&
    ABS(数据库!B2:N2值(上限(现在为(),“00:15”))和“×”&数据库!B3:N7”),“×”,3,1,4,1),
    “其中Col2 0和Col5 0以及Col2不是空格式Col2'dd/mm/yyyy hh:mm:ss'),2,0)))
    
    试试B2:

    =ARRAYFORMULA(IFNA(VLOOKUP(A2:A, 
     SORT(IFERROR(SPLIT(FLATTEN(IF(Database!B3:N7>0, 
     Database!A3:A7&"×"&Database!B2:N2&"×"&ROW(Database!A3:A7)&"×"&
     ABS(Database!B2:N2-"2/10/2021 14:37:00"), )), "×")), 3, 1, 4, 1), 2, 0)))
    


    更新1:
    =ARRAYFORMULA(IFNA(VLOOKUP)(A2:A,
    查询(排序)(拆分(展平)(如果数据库!B3:N7“”),
    数据库!A3:A7&“×”&数据库!B2:N2&“×”&行(数据库!A3:A7)&“×”&
    ABS(数据库B2:N2-“2/10/2021 14:37:00”)和“×”&数据库B3:N7”),“×”,3,1,4,1),
    “其中Col5(0)”,2,0)))
    


    更新2:
    =ARRAYFORMULA,
    数据库!A3:A7&“×”和IF((值(数据库!B2:N2)-
    值(“2/10/2021 14:37:00”)>-0.166678240741021,数据库!B2:N2,“·”)&“×”&行(数据库!A3:A7)&“×”&
    ABS(数据库B2:N2-“2/10/2021 14:37:00”)和“×”&数据库B3:N7”),“×”,3,1,4,1),
    “其中Col5 0和Col2不为null”),2,0)
    
    Hey@player0我测试了它,但它不能正常工作。我复制了我的“查找”选项卡,并将您的公式留在那里,以便您可以了解我的意思。它似乎很接近,但只拉离“NOW()”最近的列似乎不起作用。它正在识别>0部分,但它正在拉取7:00列,而不是跳过该列,因为14:37更接近15:00值。@RylanGrose嗯,好的。是的,对不起。我比较了15:00和7:00,但是15:00的值显然是“0”,所以不要通过验证。也就是说,我可能需要稍微调整一下我的请求。是否可以先进行日期验证,然后进行“0”检查所以基本上它会先找到最近的日期列(不管它是否包含“0”),然后从该列开始执行“0”验证?这样,它会发现15:00是最接近的,然后会进入“0”,这会给我我想要的结果。@RylanGrose我会继续在那里玩,因为这还不完全存在。我们仍在“回到时间”并提取7:00的值。我可能错了,但我觉得我们需要打两个电话。第一个调用创建所有日期的列表,并查找最接近NOW()的日期,并提取该日期的列号。然后第二个调用在动态范围内(基于第一个调用的列)提取列表,不包括0。这样它就不会在时间上“倒退”。我会继续玩它,但如果你想再次跳进去,请随意!我会发布我发现的任何东西。
    =ARRAYFORMULA(IFNA(VLOOKUP(A2:A, 
     QUERY(SORT(SPLIT(FLATTEN(IF(Database!B3:N7<>"", 
     Database!A3:A7&"×"&Database!B2:N2&"×"&ROW(Database!A3:A7)&"×"&
     ABS(Database!B2:N2-"2/10/2021 14:37:00")&"×"&Database!B3:N7)), "×"), 3, 1, 4, 1), 
     "where Col5 <> 0"), 2, 0)))
    
    =ARRAYFORMULA(IFNA(VLOOKUP(A2:A,QUERY(SORT(SPLIT(FLATTEN(IF(Database!B3:N7<>"", 
     Database!A3:A7&"×"&IF((VALUE(Database!B2:N2)-
     VALUE("2/10/2021 14:37:00"))>-0.166678240741021,Database!B2:N2, "¤")&"×"&ROW(Database!A3:A7)&"×"&
     ABS(Database!B2:N2-"2/10/2021 14:37:00")&"×"&Database!B3:N7)), "×"), 3, 1, 4, 1), 
     "where Col5 <> 0 and Col2 is not null"), 2, 0)))