首页 > 解决方案 > Excel 表格中时间值的随机分布 - 电网建模

问题描述

我正在研究电动汽车充电负载的模型。我附上了一个指向 Excel 工作簿的链接,以便您更好地理解。

B 列包含随机时间值 G 到 P 列代表房屋,每个房屋可以有 1 辆车。因此,每次值都需要分布在一列中。现在,当汽车插入电源时,它的负载对于 3 个电池保持恒定。

我希望 excel 随机分配这些汽车,例如 4 辆汽车到 4 座房子,而其他的则留空。

我能想到的是,每次分配一个随机房屋,然后使用IF带有函数的公式AND将随机时间与时间序列匹配,第二个条件将随机房屋与第 1-10 列匹配。我面临的问题是,公式给出了一个值错误,并且只适用于在它们前面有随机生成时间的行截图。我知道我错过了一件非常小的事情。请帮我找到它

问候

工作簿

标签: excelmodeling

解决方案


=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,""))

中的两个元素在ANDC 列中查找门牌号,并在 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,""))

推荐阅读