我之前发过这个问题,得到了半解决方案。请看看这个链接以获得一个想法。
解决方案几乎已经实现,但the function posted by Mr. Yogi有一些错误,现在Yogi先生无法访问。
让我再说一遍。
我希望实现的目标:我有一份会员及其出生日期清单,我愿意手动输入这些数据。我正在努力制作一张可以祝生日快乐的纸张。今天有生日的会员(当前日期)和在接下来的7天(从当前日期)过生日的会员名单。我可以在我的网页上发布这张表(特定单元格范围)。
看看sample sheet。随意拍摄副本进行编辑。
如果你没有得到它,让我再一次解释一切
A1 & B1 的标题名为NAMES&生日分别。
A2 到 A2000 有名称(即user1,user2,user3等)
&安培; B2 至 B2000 以DD / MM / YYYY格式生日(即13-12-1980,25-05-1990,31-2-1984)年可以在任何地方从1950年到2000年。
(我有这个名字和生日数据,我将逐个手动或者我可以在线为我的用户发布电子表格表格)。因此A列和A列中没有公式。乙
D2 - 这个单元格没有公式,但是我们可以在这里输入日期(这只是为了检查,所以每当我的表格得到它的最终公式时,我都可以用我希望的任何日期来检查它)
E2 - 此单元格有公式,它检查D2是否有某个日期,如果是,则拉取d2数据,如果d2为空,则按此公式显示当前日期
=if(D2="",today(),D2)
D6 - 此单元格有公式,它会检查B2到B2000中的整个日期列表,或者可以说整列B,如果有任何日期与E2匹配(当前日期或日期)由我写在D2)然后它拉出该用户的名字并用逗号显示。例如,如果E2中的值是16-11-2014,则D6公式使用完整列B检查此日期,如果找到任何匹配,则在A列的同一行中提取名称并在此处显示。如果没有找到匹配,则显示"没有会员今天生日"。 D6的公式是
=if(iferror("Happy Birthday to "&join(", ",filter(A:A,month(B:B)=month( E2),day(B:B)=day(E2))))=0,"No Member's Birthday Today",iferror("Happy Birthday to "&join(", ",filter(A:A,month(B:B)=month( E2),day(B:B)=day(E2)))))
E9 - 这个单元格没有公式,它只是放一些可用于D11公式的数字(天数)。例如,如果我们输入数字" 7"在单元格E9中,则D11中的公式将对即将到来的7天(从当前日期或从D2中输入的日期)生日的用户列表进行排序。例如,如果D2为空,E2将显示当前日期,例如16-11-2014,如果我们将数字7放入E9,则D11公式搜索在即将到来的7天(2014年11月17日至17日)生日的用户/出生日期23-11-2014)并显示日期为D11的用户列表。
现在来了MONSTER
D11 - 此单元格具有公式,对于此表格而言是最重要的公式(目前还不完美)。
假设E2的日期为16-11-2014& E9的编号为7.然后D11公式应该检查/搜索B列中的下一个7天日期,如果找到任何匹配,它应该从同一行(从A列)中提取用户名,并且应该显示类似的内容
上面的列表可以达到最多7行或更少,因为我在单元格E9中给出了7天的范围。
现在,Yogi先生在D11公式中帮助了我,但是公式不完整,它有一些错误,D11的公式是
=ArrayFormula(substitute(trim(transpose(split(concatenate({(if(unique(ArrayFormula(filter(TEXT(B:B,"dd/mm"),date(0,month(B:B),day(B:B))>date(0,month(E2),day(E2)),date(0,month(B:B),day(B:B))<=date(0,month(E2),day(E2)+E9))))=transpose(ArrayFormula(filter(TEXT(B:B,"dd/mm"),date(0,month(B:B),day(B:B))>date(0,month(E2),day(E2)),date(0,month(B:B),day(B:B))<=date(0,month(E2),day(E2)+E9)))),transpose((query({A:A,text(B:B,"dd/mm")},"select Col1 where '"&join(", ",unique((filter(TEXT(B:B,"dd/mm"),date(0,month(B:B),day(B:B))>date(0,month(E2),day(E2)),date(0,month(B:B),day(B:B))<=date(0,month(E2),day(E2)+E9)))))&"' contains Col2")) ),))&" ",transpose(split(rept(Char(10)&char(9),countunique((filter(TEXT(B:B,"dd/mm"),date(0,month(B:B),day(B:B))>date(0,month(E2),day(E2)),date(0,month(B:B),day(B:B))<=date(0,month(E2),day(E2)+E9))))),char(9)))}),char(10))))," ",", ")&" - "&unique((filter(TEXT(B:B,"dd/mm"),date(0,month(B:B),day(B:B))>date(0,month(E2),day(E2)),date(0,month(B:B),day(B:B))<=date(0,month(E2),day(E2)+E9)))))
以上公式有一些错误,如果我们在D2中输入年终结束日期(例如31-12-2014,在E9中输入7天的范围)则不起作用。请修复此问题,以便显示即将到来的7天(1月)即将到来的生日用户的生日
我发现的另一个错误是,如果我们输入日期为29-02-2014,D11说#N / A 为什么会这样!所有其他日期都工作正常,那么为什么与去年2月的敌意。
我希望改变的更多内容,
1。 D11应先显示日期,然后再显示姓名(而不是先显示名字,然后再显示日期) 喜欢这个
我认为这对你来说很容易,只是改变位置(虽然我不知道,怎么做:))
2。单元格D11中的日期不符合规定,请修复此问题。它应该是这样的
而不喜欢这个
查询&amp;解释结束。
很少有建议(想法)出现在我脑海中:
#2 我觉得很容易,我不知道怎么做,但无论如何我们可以按日期(升序)对B列进行排序(或者通过拉动并将其排序到C列) )。据我所知,我认为YEAR在任何公式中都没有作用,公式仅适用于mm(月)和dd(日期),所以为什么不在C列中仅对dd / mm进行排序然后将其拉到D11公式。嗯,这只是猜测
感谢您的所有时间和精力。
等待......
答案 0 :(得分:1)
如果它不是下一个E9
天的有效日期,则不会列出2月29日(因此在这一天出生的人将错过~75%的时间)。我将等待OP关于如何管理这个问题的建议。
=ArrayFormula(TRANSPOSE(REGEXREPLACE(TRIM(QUERY(FILTER({TEXT(E2+COLUMN( OFFSET(A1,,,1,E9)),"dd/mm")&" - ";REPT(A2:A&", ",TEXT(B2:B,"dd/mm")=TEXT(E2+COLUMN( OFFSET(A1,,,1,E9)),"dd/mm"))},MATCH(TEXT(E2+COLUMN(OFFSET(A1,,,1,E9)),"dd/mm"), TEXT(B2:B,"dd/mm"),0)),,ROWS(A2:A)+1)),",$","")))
如果有要求,我会(尝试)解释逻辑,但是冒着指责的风险,我现在不会这样做。