【问题标题】:split planned hours between resources using excel formula or excel vba使用 excel 公式或 excel vba 在资源之间拆分计划时间
【发布时间】:2017-09-19 12:29:51
【问题描述】:

我需要像this 这样的输出。我已经计划了每个月的小时数,并希望在两个资源的开始日期和结束日期之间拆分计划小时数。示例:对于经理角色,6 月份的计划小时数为 80。资源 1 的工作时间为 4 月 1 日至 6 月 15 日,资源 2 的工作时间为 6 月 16 日至 9 月 30 日,那么公式或代码应在这两个资源之间拆分 6 月份的小时数.如下图所示

有什么想法吗?我不介意它是 Excel 公式还是 vba 代码

使用下面的公式,我得到了工程师角色的输出,而不是经理角色的输出。

=IF(AND($D4<=F$3,$E4>=EOMONTH(F$3,0)),80,0)

【问题讨论】:

  • 我建议使用公式,甚至只是硬编码值。
  • 您的拆分总是每月的 1/2 吗?或者你会有分裂,人们可以在任何日期开始?即一个从 4 月 1 日开始,另一个从 4 月 2 日开始?
  • 我想按开始和结束日期划分小时数。如果资源 1 工作 7 天,则小时数应为 20。
  • 如果他们工作 3 天呢?还是会一直是整周?从一个月开始并在另一个月结束的几周呢?如果您将事情按周(即 7 天)分解,它们将如何拆分?
  • 基本上小时分为 4 周,如果资源 1 工作 3 天,那么拆分应该是 20-60

标签: vba excel


【解决方案1】:

我想知道这个公式是否适合你。

=ROUND((MAX(F$12-MAX($C13,E$12),0)-MAX(F$12-MAX($D13,E$12),0))*E$11/30,-1)

在此示例中,C 列和 D 列包含资源的开始日期和结束日期。 E12 保存日期 2017 年 4 月 1 日,F12 将公式=EDATE(E12,1) 复制到最右边。您可以根据表单设置这些日期的格式以仅显示月份和年份,但公式要求它们是每个月的第一天。

在您的示例中,E$11 的价值为 80(小时)。

【讨论】:

  • 如果我在这个公式中输入 85 小时,那么它给出的值是错误的。计划的时间不固定,它们可能会有所不同。
  • 公式正确计算天数。然后,它以非常粗暴的方式将天数转换为 80 的一部分(我将更改它以引用示例中第 11 行中的值)。要做的是指定转换公式。你对此一直很模糊。
  • 我想知道 28 而不是 30 的除数是否可以更好地估计。我没有想到这一点,希望你会:-)。另一件事是我的公式四舍五入到最接近的 10 小时。也许最接近的 5 会是更好的匹配。将公式中的 -1 替换为 0 以完整小时测试公式。
  • 我对此做了一些更改,它使用以下公式 =IF(AND($C13=EOMONTH(E$12,0)),E$11,ROUND( (MAX(F$12-MAX($C13,E$12),0)-MAX(F$12-MAX($D13,E$12),0))*E$11/天(EOMONTH(E$12,0)), 0))
【解决方案2】:

它有点复杂,公式维护会很痛苦,但下面的公式粘贴到 F2 并向下复制似乎有效:

=IF(OR(EOMONTH(F$3,0)<EOMONTH($D4,0),EOMONTH(F$3,0)>EOMONTH($E4,0)),0,
IF(IF(EOMONTH($D4,0)=EOMONTH($E4,0),$E4-$D4,IF(EOMONTH($D4,0)=EOMONTH(F$3,0),EOMONTH(F$3,0)-$D4+1,IF(EOMONTH($E4,0)=EOMONTH(F$3,0),$E4-F$3+1,DAY(EOMONTH(F$3,0)))))<=7,1,
IF(IF(EOMONTH($D4,0)=EOMONTH($E4,0),$E4-$D4,IF(EOMONTH($D4,0)=EOMONTH(F$3,0),EOMONTH(F$3,0)-$D4+1,IF(EOMONTH($E4,0)=EOMONTH(F$3,0),$E4-F$3+1,DAY(EOMONTH(F$3,0)))))<=15,2,
IF(IF(EOMONTH($D4,0)=EOMONTH($E4,0),$E4-$D4,IF(EOMONTH($D4,0)=EOMONTH(F$3,0),EOMONTH(F$3,0)-$D4+1,IF(EOMONTH($E4,0)=EOMONTH(F$3,0),$E4-F$3+1,DAY(EOMONTH(F$3,0)))))<=23,3,4))))/4*F$2

我会更好地处理一些中间单元格计算,以避免重复嵌套的 if 语句。我相信它可以简化。

【讨论】:

    猜你喜欢
    • 2022-06-12
    • 2011-10-22
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多