Excel – 使用上一行和各种范围大小查找最大值

我需要find降水事件期间的最大相对湿度值。 我已经计算了每个事件的持续时间,并能够很好地“扫描”事件向后。 我遇到的问题是,有些事件在前一天开始,我不知道如何获得excel来扫描前一行。

这是一个例子…

示例图像

码:

=IF(AND(Duration!BP3>0), MAX(INDIRECT(ADDRESS(3, COLUMN(C3)-Duration!BP3)):C3),0) 

例如:上表中的第一个事件只有一个小时(L2),所以最大值自动为90。

下一个事件的持续时间为11小时。 我试图find最好的值从21z到02z。 所以BP3 = 6。由于BP3大于0,我试图通过减去持续时间来获得最大相对湿度来获得事件的范围(COLUMN(C3) – 持续时间!BP3)。 对于这个事件,最大值将是100。

问题:我得到“#VALUE!” 因为没有=(C3-6)的单元格。 有没有办法让它扫描以前的行? VBA或Python代码会更好吗? 我相当新的VBA和Python,所以我不知道如何去做这件事。

 =IF(BP3<COLUMN(C3),MAX(OFFSET(C3,0,-(BP3-1),1,BP3)),MAX(MAX(A3:C3),MAX(OFFSET(X3,-1,-BP3+COLUMN(C3)+1,1,BP3-COLUMN(C3))))) 

如果BP3不是太大,则将C3偏移的最大值向后。 如果太大,则取两个范围的最大值:第一个范围是A3:C3。 第二个范围是X3,向上偏移1行并返回列数(bp3-column(c3))。

如果事件跨越两行以上,这将不起作用。