我正在研究电动汽车的充电负荷模型。我附上了excel工作簿的链接,以便您更好地理解。
列B包含随机时间值 G到P列代表房屋,每座房屋可容纳1辆汽车。因此,每个时间值需要分布在一列中。现在,当汽车接通电源时,其负载将保持3个单元不变。
我希望excel随机分配这些汽车,例如4辆车分配到4座房屋,而其他车厢留空。
我能想到的是,每次分配一个随机房屋,然后使用带有IF
函数的AND
公式将随机时间与时间序列进行匹配,第二个条件将随机房屋与第1列进行匹配10。
我面临的问题是,该公式给出了一个值错误,并且仅在screenshot前面具有随机生成时间的行中有效。我知道我很想念一个很小的东西。请帮助我找到它
致谢
答案 0 :(得分:1)
=IF(ISNA(MATCH(G$5,$C$6:$C$9,FALSE)),"",IF(AND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE))>=$F6,INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE))<=$F6+TIME(0,30,0)),11,""))
AND
中的两个元素在C列中找到门牌号,并在B列中返回相应的时间。
第一个元素将F中的时间与该时间进行比较。第二个元素将时间+ 30分钟与F(三个单元格)进行比较。如果介于两次之间,则得到11。
ISNA
确保所讨论的房子在列表中。您也可以使用IFERROR
,但我更喜欢ISNA
的精度。
更新
如果要让值回绕,则需要OR
与第二天进行比较。
=IF(ISNA(MATCH(G$5,$C$6:$C$9,FALSE)),"",IF(OR(AND(ROUND($F6,5)>=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE)),5),ROUND($F6,5)<=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE))+TIME(0,30,0),5)),AND(ROUND($F6+1,5)>=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE)),5),ROUND($F6+1,5)<=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE))+TIME(0,30,0),5))),11,""))
该公式结构类似于
=If(isna(),"",if(or(and(today,today),and(tomorrow,tomorrow)),11,"")
这个公式已经太大了。如果将其作为三个电压的三倍,它将是巨大的。您应该考虑在VBA中编写UDF。它不会很快计算出来,但可能会更易于维护。
如果要坚持使用公式,可以将瓦数放在门牌号上方的第4行中。然后在另一个表格中,列出要充电的瓦数和分钟数。因此,例如,您拥有B12:C14
3.7 120
11 30
22 15
现在您的公式中有11
的位置,您将有G$4
,而两个放置了TIME(0,30,0)
的地方,您将有TIME(0,INDEX($C$12:$C$14,MATCH(G$4,$B$12:$B$14,FALSE)),0)
。我重新整理了一些东西以使其更“可读”(但这仍然很困难),这是最终公式
=IF(ISNA(MATCH(G$5,$C$6:$C$9,FALSE)),"",IF(OR(AND(ROUND($F6,5)>=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE)),5),ROUND($F6,5)<=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE))+TIME(0,INDEX($C$12:$C$14,MATCH(G$4,$B$12:$B$14,FALSE)),0),5)),AND(ROUND($F6+1,5)>=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE)),5),ROUND($F6+1,5)<=ROUND(INDEX($B$6:$B$9,MATCH(G$5,$C$6:$C$9,FALSE))+TIME(0,INDEX($C$12:$C$14,MATCH(G$4,$B$12:$B$14,FALSE)),0),5))),G$4,""))