【问题标题】:Excel - Lookup - Multiple result across multiple worksheetsExcel - 查找 - 跨多个工作表的多个结果
【发布时间】:2018-02-13 12:53:01
【问题描述】:

我正在做一个工作日历,应该根据一周中的哪一天或一个月中的哪一天自动填写。含义:

我有每周的家务(每个星期都一样)和每月的家务(每个月的每个特定工作日都一样)。

这个想法是每次我更改日历的月份时,都会充满每天需要完成的琐事。

这是我正在做的日历(红色单元格是手动填充的,其余的则自动使用下面的公式填充): Calendar

周家务工作表 Sheet ToDos week

月杂务表 Sheet ToDos Month

我已经自动完成了每周的家务活:

=IFERROR(INDEX('ToDos Week'!$C$3:$C$98;SMALL(IF((WEEKDAY($C$3;2)='ToDos Week'!$B$3:$B$98);ROW('ToDos Week'!$B$3:$B$98)-MIN(ROW('ToDos Week'!$B$3:$B$98))+1;"");ROWS($L$1:L3)));"")

像魅力一样工作

但我现在的困难是增加每月的杂务

我尝试添加

=IFERROR(IFERROR(INDEX('ToDos Week'!$C$3:$C$98;SMALL(IF((WEEKDAY($F$3;2)='ToDos Week'!$B$3:$B$98);ROW('ToDos Week'!$B$3:$B$98)-MIN(ROW('ToDos Week'!$B$3:$B$98))+1;"");ROWS($L$1:L1)));INDEX('ToDos Month'!$C$3:$C$91;SMALL(IF((NETWORKDAYS(F$5-DAY(F$5)+1;F$5;holidays)='ToDos Month'!$B$3:$B$91);ROW('ToDos Month'!$B$3:$B$91)-MIN(ROW('ToDos Month'!$B$3:$B$91))+1;"");ROWS($L$1:L1))));"")

当然不起作用,因为公式的“ROWS($L$1:L1)”部分会延伸并且不会给我第一次出现的月份家务(如果同一天有一周的家务) ,但第三或第四..

你能帮我解决这个问题吗?

【问题讨论】:

  • 我认为这可能需要一些涉及的 ​​3 个工作表的示例屏幕截图才能更有意义(工作列表表、ToDos Week 表和 ToDos Month 表)。只有几行数据,带有行/列标题,以及一些格式正确的数据(即使您将名称/任务替换为垃圾)
  • 考虑在您的问题中使用代码示例格式而不是块引号,这样其他人会更容易阅读。
  • @Chronocidal 已编辑。希望通过这种方式更容易理解我需要什么
  • @AntiDrondert 已编辑,感谢您的帮助

标签: excel excel-formula excel-2016 vba


【解决方案1】:

{Big Edit} 好的,我刚刚意识到我忽略了一个非常简单的解决方案 - 如早期编辑所示,我们可以使用 COUNTIF 来获取工作日的每日任务数。所以,我们可以从每月任务计数中减去这个来纠正这个数字。

简化:任务是每周还是每月? (您可能需要在ROWS 中添加/减去才能使其对齐)

=IF(COUNTIF('ToDos Week'!$B$3:$B$98,WEEKDAY($C$3,2))>=ROWS($L$1:L3), "Weekly", "Monthly")

使用您现有的每周代码。对于 Monthly,只需从 ROWS 中减去 COUNTIF('ToDos Week'!$B$3:$B$98,WEEKDAY($C$3,2)) 即可删除所有 Weekly 任务:

IFERROR(INDEX('ToDos Month'!$B$3:$B$98;SMALL(IF((DAY($C$3;2)='ToDos Month'!$A$3:$A$98);ROW('ToDos Month'!$A$3:$A$98)-MIN(ROW('ToDos Month'!$A$3:$A$98))+1;"");ROWS($L$1:L3)))-COUNTIF('ToDos Week'!$B$3:$B$98,WEEKDAY(C$3,2))>=ROWS($L$1:L3);"")

替换上面IF中的"Weekly""Monthly",得到:

=IF(COUNTIF('ToDos Month'!$B$3:$B$98,WEEKDAY(C$3,2))>=ROWS($L$1:L3),IFERROR(INDEX('ToDos Week'!$C$3:$C$98;SMALL(IF((WEEKDAY($C$3;2)='ToDos Week'!$B$3:$B$98);ROW('ToDos Week'!$B$3:$B$98)-MIN(ROW('ToDos Week'!$B$3:$B$98))+1;"");ROWS($L$1:L3)));""),IFERROR(INDEX('ToDos Month'!$B$3:$B$98;SMALL(IF((DAY($C$3;2)='ToDos Month'!$A$3:$A$98);ROW('ToDos Month'!$A$3:$A$98)-MIN(ROW('ToDos Month'!$A$3:$A$98))+1;"");ROWS($L$1:L3)))-COUNTIF('ToDos Week'!$B$3:$B$98,WEEKDAY(C$3,2))>=ROWS($L$1:L3);""))

下面的旧答案


好的,我可以在这里想到 2 个可能的解决方案...第一个也是最简单的,仅当您的每周任务和每月任务的格式不同时才有效(例如,每月任务可能都以“[M]”开头,例如as "[M]File Invoices") 在这种情况下,将 ROWS(L$1:L3) 替换为 COUNTIF 以计算每月任务(例如 COUNTIF(L$1:L3;"[M]*")

如果您没有“简单”的方法来每周/每月检查一次,那么下一个选项是在数组公式中使用 SUM$L1:L3 中的每个条目与 ToDos Month 列表进行比较(例如 @987654336 @,利用两个参数都是数组的COUNTIF 本身将返回一个数组)

这 2 个选项应该为您的 SMALL 函数的 k 提供一天中的每月任务数

{编辑:删除“空白”列} 这需要每周/每行重做。它基于我的测试表,其中单元格 A14 是 05/02/2018,E14 是 09/02/2018,数组公式放入 A15 并从右下角填充到 E23

=IF(COUNTIF('ToDos Week'!$B$3:$B$98,WEEKDAY(A$14,2))>=ROWS(A$14:A14),IFERROR(INDEX('ToDos Week'!$C$3:$C$98,SMALL(IF((WEEKDAY(A$14,2)='ToDos Week'!$B$3:$B$98),ROW('ToDos Week'!$B$3:$B$98)-MIN(ROW('ToDos Week'!$B$3:$B$98))+1,""),ROWS(A$14:A14))),""),IFERROR(INDEX('ToDos Month'!$B$3:$B$98,SMALL(IF((DAY(A$14)='ToDos Month'!$A$3:$A$98),ROW('ToDos Month'!$A$3:$A$98)-MIN(ROW('ToDos Month'!$A$3:$A$98))+1,""),COUNTIF(A$14:A14,"Month*")+1)),""))

它首先检查一天有多少每周任务。如果这大于已填写的任务数,则查找每周任务,否则查找每月任务 - 将现有每月任务计算为以“月份”开头

【讨论】:

  • 感谢您的帮助,但这并不能解决我的问题。 L1:L3 是空行,我只是用来拥有k,并且没有以任何方式连接到任务列表。所以countif没有任何东西可以返回......当我尝试它时只返回0。但也许 countif 是一种找到解决方案的方法......但不知道如何。
  • 与其空行,不如看看今天已经填满的活动?我添加了一个新公式,基于每周从第 4/14/24/34/44 行和周一至周五从 A 列到 E 列运行
  • 天哪,太有道理了!!!不知道我以前没有想过!!非常感谢您的帮助:D
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2016-12-26
  • 2019-02-24
  • 2022-06-10
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多