Excel - 查找 - 跨多个工作表的多个结果

时间:2018-02-13 12:53:01

标签: excel excel-vba excel-formula excel-2016 vba

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

我每周做家务(每周都是平等)和每月家务(每个月的每个特定工作日都是平等的。)

这个想法是每当我改变日历的月份时,就会充满了每天需要完成的家务。

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

Week Chores表 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)"该公式将延伸,并不会给我第一次出现的月杂务(如果在同一天有一周的家务),但第三或第四..

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

1 个答案:

答案 0 :(得分:0)

{Big Edit} 好的,我刚刚意识到我忽略了一个真正的简单解决方案 - 正如在一个秘密编辑中所证明的那样,我们可以使用{{1获取工作日的每日任务数。因此,我们可以从“每月任务”计数中减去此数字以更正数字。

简化:每周或每月任务? (您可能需要添加/减去COUNTIF以使其排队)

ROWS

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

COUNTIF('ToDos Week'!$B$3:$B$98,WEEKDAY($C$3,2))

替换上面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);"")中的"Weekly""Monthly",您就会得到:

IF

下面的旧答案

好的,我可以在这里想到两种可能的解决方案......第一种,也是最简单的,只有在你的每周任务和每月任务的格式不同时才有效(例如,每月任务可能都开始了#34; [M] ",例如" [M]文件发票")在这种情况下,将=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);"")) 替换为ROWS(L$1:L3)以计算每月任务(例如COUNTIF

如果你没有“轻松”的话。检查每周/每月的方法,下一个选项是使用数组公式中的COUNTIF(L$1:L3;"[M]*")SUM中的每个条目与$L1:L3列表进行比较(例如ToDos Month,利用SUM(COUNTIF('ToDos Month'!$B$3:$B$91;L$1:L3))这两个参数都是数组的事实本身会返回一个数组)

对于COUNTIF功能的k

,这2个选项可以为您提供当天的月度任务数量

{编辑:删除'空白' column} 这需要为每周/每行重做一次。它基于我的测试表,其中单元格A14是05/02/2018,E14是09/02/2018,阵列公式被放入A15并向下填充到E23

SMALL

它首先要检查当天的每周任务数量。如果这大于已填写的任务数,则会查找“每周”任务,否则会查找“每月”任务 - 将现有“每月”任务计算为以"月&#34开头;