简体   繁体   English

动态设置 MAX() 或 MIN() 函数的范围

[英]Dynamically setting a range for MAX() or MIN() functions

I'm working on a gantt chart spreadsheet and trying to make the impossible work (it seems so)我正在研究甘特图电子表格并试图完成不可能的工作(看起来如此)

在此处输入图像描述

Basically I'm trying to achieve is that dates in U and W columns would have a dynamically set range for min or max functions based on G column value (type of row) so everything that is between two PS (Primary section) and between two S (sections) would be defined as a range.基本上我想要实现的是 U 和 W 列中的日期将具有基于 G 列值(行类型)的最小或最大函数的动态设置范围,因此介于两个 PS(初级部分)和两个之间的所有内容S(节)将被定义为一个范围。

The catch is that row type is set by user, and the number of rows can be from 1 to N-th, so the fixed MIN or MAX formula is not really an option问题是行类型由用户设置,行数可以从 1 到第 N,所以固定的 MIN 或 MAX 公式并不是真正的选项

Getting the start of the range is easy - basic IF(G13="PS",...,...)开始范围很容易 - 基本IF(G13="PS",...,...)

The difficult part, where I need help, is getting the last range row that is just before the next S or PS type.我需要帮助的困难部分是获取下一个 S 或 PS 类型之前的最后一个范围行。

See example ranges below.请参阅下面的示例范围。

在此处输入图像描述

Current achieved result: =MAX(IF(tipas="PS",INDIRECT("U" & ROW(id)),IF(tipas="S",INDIRECT("U" & ROW(id)),"")):U17)当前取得的结果: =MAX(IF(tipas="PS",INDIRECT("U" & ROW(id)),IF(tipas="S",INDIRECT("U" & ROW(id)),"")):U17)

Full cell formula:全细胞公式:

    =IFERROR(IF(AND(tipas<>"",tipas="PS"),MAX(INDIRECT("U" & ROW(id):U17),
IF(AND(tipas<>"",tipas="S"),MAX(INDIRECT("U" & ROW(id):U17),
    
    'formulas to get the date for other types'
    
    IF(plan.pradzia<>"",plano.pabaigos.skaic,IF(plan.pabaiga<>"",plan.pabaiga,IF(eilNr<>"",
    IF(darbo.priklausomumas="PrPb",prpb.skaic,IF(darbo.priklausomumas="PbPb",pbpb.skaic,plano.pabaigos.skaic)),""))))),"")

tipas is a nemed range for G column Tipas是 G 列的一个 nemed 范围

How could I get the U17 value dynamically based on column G value?如何根据 G 列的值动态获取 U17 值?

Since i don't know what cells are avaiable, let's assume that the range HA:HF is avaiable.由于我不知道可用的单元格,我们假设范围 HA:HF 是可用的。 Place these formulas accordingly:相应地放置这些公式:

ADDRESS地址 OUTCOME DESCRIPTION结果描述 FORMULA公式
HA13 HA13 Row of any PS cell.任何 PS 单元的行。 =IF($G13="PS",ROW($G13),"") =IF($G13="PS",ROW($G13),"")
HB13 HB13 Row of any PS or S cell.任何 PS 或 S 单元格的行。 =IF(OR($G13="PS",$G13="S"),ROW($G13),"") =IF(OR($G13="PS",$G13="S"),ROW($G13),"")
HC13 HC13 Address of the range for the PS section in the U column (reported on the proper PS row). U 列中 PS 部分的范围地址(在正确的 PS 行上报告)。 =IF($G13="PS",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)=""),"","U"&MAX(HA$13:HA13)+1&":U"&IF(MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1)),"") =IF($G13="PS",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)=""),"","U"&MAX( HA$13:HA13)+1&":U"&IF(MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0)))&":"&ADDRESS(ROWS(HA:HA),CELL("col" ,HA:HA),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($ G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",偏移量(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1)),"")
HD13高清13 Address of the range for the S section in the U column (reported on the proper S row). U 列中 S 部分的范围地址(在正确的 S 行上报告)。 =IF($G13="S",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)="S",OFFSET($G13,1,0)=""),"","U"&MAX(HB$13:HB13)+1&":U"&IF(MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":"&ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":"&ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1)))-1)),"") =IF($G13="S",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)="S",OFFSET($G13,1,0 )=""),"","U"&MAX(HB$13:HB13)+1&":U"&IF(MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":" &ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13, 1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW( $G13),MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":"&ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1 )))-1)),"")
HE13 HE13 Address of the range for the PS section in the W column (reported on the proper PS row). W 列中 PS 部分的范围地址(在正确的 PS 行上报告)。 =IF($G13="PS",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)=""),"","W"&MAX(HA$13:HA13)+1&":W"&IF(MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1)),"") =IF($G13="PS",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)=""),"","W"&MAX( HA$13:HA13)+1&":W"&IF(MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0)))&":"&ADDRESS(ROWS(HA:HA),CELL("col" ,HA:HA),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($ G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",偏移量(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1)),"")
HF13 HF13 Address of the range for the S section in the W column (reported on the proper S row). W 列中 S 部分的范围地址(在正确的 S 行上报告)。 =IF($G13="S",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)="S",OFFSET($G13,1,0)=""),"","W"&MAX(HB$13:HB13)+1&":W"&IF(MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":"&ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":"&ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1)))-1)),"") =IF($G13="S",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)="S",OFFSET($G13,1,0 )=""),"","W"&MAX(HB$13:HB13)+1&":W"&IF(MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":" &ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13, 1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW( $G13),MIN(INDIRECT(CELL("address",OFFSET(HB13,1,0))&":"&ADDRESS(ROWS(HB:HB),CELL("col",HB:HB),1,1 )))-1)),"")

Then drag the cells to cover the whole list.然后拖动单元格以覆盖整个列表。 You can use an INDIRECT function to integrate the addresses in your formulas.您可以使用 INDIRECT 函数将地址整合到您的公式中。 For example:例如:

=MAX(INDIRECT(HC13))

or或者

=MAX(INDIRECT(IF($G13="PS",IF(OR(OFFSET($G13,1,0)="PS",OFFSET($G13,1,0)=""),"","U"&MAX(HA$13:HA13)+1&":U"&IF(MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1=0,MATCH(TRUE,INDEX(INDIRECT(CELL("address",OFFSET($G13,1,0))&":"&ADDRESS(ROWS($G:$G),CELL("col",$G:$G),1,1))="",0),FALSE)+ROW($G13),MIN(INDIRECT(CELL("address",OFFSET(HA13,1,0))&":"&ADDRESS(ROWS(HA:HA),CELL("col",HA:HA),1,1)))-1)),"")))

I've tried a AGGREGATE based solution, but it appeared to be slower and possibly needed more columns.我尝试了基于 AGGREGATE 的解决方案,但它似乎速度较慢,并且可能需要更多列。 This solution should be lighter, but in case of a long list it might still be too slow.这个解决方案应该更轻,但如果列表很长,它可能仍然太慢。 In such case, a VBA solution might be better with a user defined function.在这种情况下,使用用户定义函数的 VBA 解决方案可能会更好。 Then again, the questions' tag were excel and excel-formula .再说一次,问题的标签是excelexcel-formula I might try a user defined function if needed.如果需要,我可能会尝试用户定义的函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM