ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 函数与公式 > 求离发薪日还有几天[已汇总]

求离发薪日还有几天[已汇总]

作者:绿色风 分类: 时间:2022-08-18 浏览:147
楼主
bbwsj
出个我以前在EP出过的题目,那个旧贴应某些原因已经没了,也算是老题新出吧


我公司每月10号发工资,注意工作日发,遇非工作日延后到周一
在A2输入任意日期,在B2用公式显示离下个发薪日还有几天
如下:附件

发薪.rar


1、只能用函数公式,不能用辅助、自定义名称或自定义函数,能适用于03版的EXCEL
2、答题时限:(截止日期,2010年10月15日,到期后公布)


举例说明:
例1、如A2为2010-8-21日,下个发薪日就是2010-9-10日(周5),距离时间是20天
例2、如A2为2010-9-10日(周5)发薪日,下个发薪日就是2010-10-10日,但因为2010-10-10日是周日,实际发薪日为2010-10-11日,距离时间是31天
例3、如A2为2010-10-10日(周日),实际10月的发薪日为2010-10-11日,距离时间为1天
还有其他变化可能,无法全部一一例举,反正只考虑双休日,不考虑国定假日,按正常公司的实际发生情况考虑各种可能性吧

为免有疑异,增加数据以供核对
[table=332][tr][td=1,1,119]A列内容[/td][td=1,1,123]发薪日[/td][td=1,1,90]差几天[/td][/tr][tr][td]2007-2-9[/td][td]2007-2-12[/td][td]3[/td][/tr][tr][td]2007-2-10[/td][td]2007-2-12[/td][td]2[/td][/tr][tr][td]2007-2-11[/td][td]2007-2-12[/td][td]1[/td][/tr][tr][td]2007-2-12[/td][td]2007-3-12[/td][td]28[/td][/tr][tr][td]2008-2-8[/td][td]2008-2-11[/td][td]3[/td][/tr][tr][td]2008-2-9[/td][td]2008-2-11[/td][td]2[/td][/tr][tr][td]2008-2-10[/td][td]2008-2-11[/td][td]1[/td][/tr][tr][td]2008-2-11[/td][td]2008-3-10[/td][td]28[/td][/tr][tr][td]2008-2-12[/td][td]2008-3-10[/td][td]27[/td][/tr][tr][td]2009-12-21[/td][td]2010-1-11[/td][td]21[/td][/tr][tr][td]2005-12-10[/td][td]2005-12-12[/td][td]2[/td][/tr][tr][td]2005-12-12[/td][td]200

题目说了是2003版的E,所以对2003版不能运行的公式不算对
5555555555,我昨天把对的楼号,全部写了,怎么一个差错全部都没了尼

把[local]2[/local]汇总答案整理好了方便大家学习吧

汇总答案.rar
2楼
rongjun
  1. =MIN(--TEXT(DATE(YEAR(A2),MONTH(A2)+{0,1},10)+TEXT(2-MOD(DATE(YEAR(A2),MONTH(A2)+{0,1},10),7),"0;!0;0")-A2,"0;99;99"))


发薪.rar
3楼
liuguansky
B2

  1. =MIN(1*TEXT((TEXT(EOMONTH(A2,{0,1}),"e-m")&-10)+TEXT(2-MOD(TEXT(EOMONTH(A2,{0,1}),"e-m")+9,7),"0;!0;0")-A2,"0;9999"))

数组下拉
4楼
zm0115
参与一个,公式丑陋了点。

修改一下,2010-9-28

再次修改一下,2010-10-7   写好几天了,实在是太长了,臭的不行,实在纠结要不要发上来献丑...还是发吧,看看大家的杰作。
发薪.rar
5楼
wjh619993018
积极参与
  1. =MIN(IF(DAY(A2+ROW($1:$33))=12,--TEXT(ROW($1:$33)-TEXT(MOD(A2+ROW($6:$38),7),"[>1]!2")-1%,"0;!9!9")))
6楼
wjc2090742
  1. =MIN(IF((DAY(A2+ROW($1:$34))={10,11,12})*(0&TEXT(MOD(A2+ROW($1:$34),7)-2,{"1;;1",";;1",";;1"})),ROW($1:$34)))

发薪.rar
7楼
gouweicao78
  1. =MIN(IF((DAY(A2+ROW($1:$33))=9+{1,2,3})*(MOD(A2+ROW($1:$33),7)>1)*(MOD(A2+ROW($1:$33),7)<{7,3,3}),ROW($1:$33)))
111字,$33可以不要$号,因此可省4个字符。
8楼
kkitt
B2=MIN(--TEXT(DATE(YEAR(A2),MONTH(A2)+{0,1},10)+TEXT(8-WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0,1},10),2),"[<3]0;!0")-A2,"0;99;99"))
9楼
wjc2090742
简化了一下248字符的那个公式。普通公式。

  1. =0.5-LOOKUP(,0.5-TEXT(2-MOD(DATE(YEAR(A2),MONTH(A2)+{1,0},3),7),"0;!0")-DATE(YEAR(A2),MONTH(A2)+{1,0},10)+A2)


EOMONTH在excel2003需要加载才能用,不知道是否符合要求,普通公式。
  1. =0.5-LOOKUP(,0.5-TEXT(MOD(EOMONTH(A2,{0,-1})+3,7)-1,"1!0;12;11")-EOMONTH(A2,{0,-1})+A2)

发薪.rar
10楼
minzhu513
我来看答案的.
11楼
rongjun
简化一下公式:
  1. =MATCH(0,0/FIND(TEXT(A2+ROW($1:33),"ddaaa"),"10一10二10三10四10五11一12一"),)


发薪1.rar
12楼
wjh619993018
再简化几个字符
  1. =MIN(IF(DAY(A2+ROW($1:$33))=12,--TEXT(ROW($1:$33)-SIGN(MOD(A2+ROW($6:$38),7)-1)-1.1,"0;!9!9")))
13楼
zhanghi
菜鸟也来凑个热闹 望老师多多指点   以除去周六周日为例 数组公式=SUM(--(WEEKDAY(A2+ROW(INDIRECT("1:"&B2-A2)),2)<6))
相差几天.rar
14楼
zhanghi
老师图片中给出的结果应该是没有除去任何节假日吧 =SUM(--(WEEKDAY(A2+ROW(INDIRECT("1:"&B2-A2)),2)>0))数组
除去周六周日=SUM(--(WEEKDAY(A2+ROW(INDIRECT("1:"&B2-A2)),2)<6))数组 也可以换成其它休息日。我还没有理解了老师的意思,如9-12号中10号11号是双休则要结果为1还是为2
相差几天1.rar
15楼
wqfzqgk
QQ上讨论的上这里来了
16楼
水星钓鱼
  1. =LOOKUP(40,MATCH({"10*","11一","12一"},TEXT(A2+ROW($1:$34)-1,"daaa"),)-1)
我的极限了
17楼
wangg913
好题目。
  1. =MATCH(3,INT(DAY(A2+ROW($1:$40)-1)/3)*(MOD(A2+ROW($1:$40),7)>1)*(LOOKUP(DAY(A2)*10+MOD(A2,7),{0,102,111,112,116;0,2,0,2,0})<ROW($1:$40)),)
  2. =MATCH(3,INT(DAY(A2+ROW($1:$40)-1)/3)/(MOD(A2+ROW($1:$40),7)>1)/(2*OR((DAY(A2-{3,4})={7;8})*(MOD(A2-{0,1},7)>1))<ROW($1:$40)),)

想不出别的办法了。
18楼
apolloh

  1. =LOOKUP(33-(DAY(A2)<10)*9,MATCH(1&{"0?","1一","2一"},TEXT(A2+ROW($1:$33),"daaa"),))


80个
19楼
wjc2090742
前面提交的公式虽然长点,但是个人感觉还是可以接受的。还是暂时留着吧。
  1. =0.5-LOOKUP(,0.5+A2-WORKDAY(TEXT(A2+{28,0},"e-m")+8,1))



workday和Eomonth在03版中都不支持数组。补上一个严格的03版可用公式,不然我就没答案了。
  1. =0.5-LOOKUP(,A2-9.5+SIGN(MOD(TEXT(A2+{28,0},"e-m")+2,7)-1)-TEXT(A2+{28,0},"e-m"))

发薪.rar
20楼
gouweicao78
再来2个公式:
93字:
  1. =MIN(IF(TEXT(A2+ROW($1:$33),"daaa")={"10一","10二","10三","10四","10五","11一","12一"},ROW($1:$33)))
90字:
  1. =MIN(IF(ISNUMBER(FIND(TEXT(A2+ROW($1:$33),"ddaaa"),"10一10二10三10四10五11一12一")),ROW($1:$33)))
21楼
apolloh

  1. =33-LOOKUP(32,33-WORKDAY(TEXT(A2+{22,0},"e/m/!9"),1)+A2)
55个字符
22楼
apolloh

  1. =-LOOKUP(-1,A2-WORKDAY(TEXT(A2+{22,0},"e/m")+8,1))
49个字符
23楼
fly_fu
資質有限,学習中。

24楼
wjc2090742
大家应该大都构建了数组吧。给一个单值的公式,虽然比较长。苦苦找了临界点好久,还是留着吧。

普通公式,2003版下包含1900年多年数据测试通过:
  1. =WORKDAY(TEXT(A2+28*((DAY(A2)>9)-OR((WEEKDAY(A2,2)>{5,6})*(DAY(A2)={10,11}))),"e-m")+8,1)-A2


改进一下第一个答案

  1. =MIN(IF((DAY(A2+ROW($1:$34))={10,11,12})*(WEEKDAY(A2+ROW($1:$34),2)<{6,2,2}),ROW($1:$34)))

发薪.rar
25楼
piny
皆為數組公式,下拉

152字元
B2=MIN(--TEXT(DATE(YEAR(A2),MONTH(A2)+{0;1},10)+3-LEN(MMULT((WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0;1},10)+{0,1,2},2)<6)*10^{2,1,0},{1;1;1}))-A2,"0;!99;!99"))

=============================================================

150字元
B2=MIN(--TEXT(DATE(YEAR(A2),MONTH(A2)+{0;1},14)-LEN(MMULT((WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0;1},12)-{0,1,2},2)<6)*10^{1,2,3},{1;1;1}))-A2,"0;!99;!99"))

=============================================================

148字元
B2=MIN(--TEXT(DATE(YEAR(A2),MONTH(A2)+{0;1},14)-LEN(MMULT((WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0;1},12)-{0,1,2},2)<6)*10^{1,2,3},{1;1;1}))-A2,"0;99;99"))

=============================================================

141字元
B2=MIN(--TEXT(IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0;1},10),2)={1,2,3,4,5,6,7},DATE(YEAR(A2),MONTH(A2)+{0;1},10)+{0,0,0,0,0,2,1})-A2,"0;99;99"))

=============================================================

136字元
B2=MIN(--TEXT(IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0,1},10),2)=ROW($1:$7),DATE(YEAR(A2),MONTH(A2)+{0,1},10)+{0;0;0;0;0;2;1})-A2,"0;99;99"))

=============================================================

134字元
B2=MIN(--TEXT(IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0,1},10))=ROW($1:$7),DATE(YEAR(A2),MONTH(A2)+{0,1},10)+{1;0;0;0;0;0;2})-A2,"0;99;99"))

=============================================================

133字元
B2=MIN(--TEXT(IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0,1},10))=ROW($1:$7),DATE(YEAR(A2),MONTH(A2)+{0,1},9)+{2;1;1;1;1;1;3})-A2,"0;99;99"))

=============================================================

132字元
=MIN(--TEXT(IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+{0,1},9))=ROW($1:$7),DATE(YEAR(A2),MONTH(A2)+{0,1},9)+{1;1;1;1;1;3;2})-A2,"0;99;99"))
26楼
gouweicao78
用分析工具库函数58字:
  1. =WORKDAY(EOMONTH(A2,-(WORKDAY(A2-DAY(A2)+9,1)>A2))+9,1)-A2
27楼
金陵白玉床
什么意思啊?没看明白,不就是设置一个日期函数吗?好像在自定义的类型中吧?
28楼
庭院幽幽
好想学习一下,可以看不到
29楼
hopeson2010
理解错题意!删除!
发薪.rar
30楼
hopeson2010
=DATEDIF(A2,DATE(YEAR(A2),(DAY(A2)>10)+MONTH(A2),10),"d")+SUM((WEEKDAY(A2,2)={6,7})*{2,1})
发薪.rar
31楼
wangg913
=LOOKUP(A2,WORKDAY(9+EOMONTH(A2,-{2,1;1,0}),1))-A2
加载分析库函数。2007函数。

*********
简化一下:

  1. =LOOKUP(,WORKDAY(9+EOMONTH(A2,-{2,1;1,0}),1)-A2)
32楼
無心
占位看看
33楼
su11wei18
  1. =DATE(YEAR(A2),MONTH(A2)+NOT(DAY(A2)<=10),10)-A2+IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+NOT(DAY(A2)<=10),10))=7,2,IF(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+NOT(DAY(A2)<=10),10))=1,1,0))
34楼
rongjun
按黄版的公式改下,47字符
  1. =-LOOKUP(-1,A2-WORKDAY(EOMONTH(A2,{0,-1})+9,1))
35楼
wjc2090742
EOMONTH使用后,在1900年1、2、3月份出错。原因是微软日期系统的bug。见下图。

 
当然不需要去考虑这样极端的情况,不过可以了解下。这次的题目,对lookup的认识提高了不少呢,无论是大头兄的,还是黄版的,都比我的lookup精妙太多了
36楼
piny
不好意思 想請教一下此版的遊戲規則

在EH論壇 競賽題一律嚴格要求大家占好幾層樓回答 而只允許在自己樓層不斷精進修改 最終係以公式正確之最簡短者來評比

可是在這裡 我發現大多數的高手都是一個樓層回答一個想法 而且也得到分別給分的優待

想請問 這種作為是被允許而且鼓勵的嗎 這樣子有可能一次競賽的回答 就可以得到好幾十分的評比

初來貴寶地 對於貴版的給分制度現象有一些觀察 先謝謝肯回覆的朋友 ^^
37楼
wjc2090742
ET的技术分跟EH的技术分并不一样。

本题也不是竞赛题,而其中比如我的加分,是属于个人行为。可以个人加分,这点也与EH不同。

多楼回复是保留思考过程的做法,多楼评分有其弊端,我的看法是最多每个思路或方法评分。而评分的标准,确实是需要进一步统一和完善的,目前来说,大部分还是出题者的意愿。

谢谢piny的回复参与。ET还有很多有待完善的地方,可以多多提意见和建议,不断完善。

另外,ET并不怎么追求公式的最短。会更看重实用性、多种方法思路等等。并不以公式长短评选最佳,经常允许vba、sql、技巧、函数等各类方法解题,这点也是ET的特点。
38楼
piny
嗯 謝謝版主回覆

可能是我還是ET的新人 什麼權限都沒有

不認同多樓回覆是保留思考過程的作法 在同一層樓系統性地整理出來完整思維 相信應更可以讓後進瞭解正確思路的建立

對一個Excel高手而言 同時想出三種不同方法解決同類型題目應該不難 不過在ET 他(她)可能會有很大的誘因想要在不同時點回覆 只是說出自己的想法 當然也不見得在同樓層回覆就可以改善某些情況

目前的評分制度 乍看下來 只會讓強者更強 不斷地拉開差距 企盼有好的方法統一和完善

再次謝謝版主的回覆
39楼
wjc2090742



piny兄说的在理,版主们也做了讨论,评分方面也做了调整。还希望piny兄继续在ET活跃,多多展示技术,多多提建议。
40楼
piny
提建議而受到加分 有點意外

我自台灣來 只看得懂繁體字 只因為熱愛EXCEL 而硬著頭皮邊看翻譯邊學各大師的EXCEL

一開始先接觸了EH論壇 簡體字也因此識字率可以突破60%

後來因綠又發現ET論壇 只是會先入為主地希望這裡亦可以同樣茁壯而斗膽提出諍言

還有很多地方需要各位前輩提攜 我也會儘可能將所體會的微末分享給這兩個論壇

再次謝謝大家 ^^
41楼
bbwsj
回38楼,题目是我出的,我的给分原则,同一人不得重复得分的
因为我无权限,给分就让版主代劳了
原给得分者的名单我写在第1楼,但不知道怎么回事,我后加汇总公式时,前面写的文字 竟然丢了很多
怕再改连上传的附件也丢了,不敢再去改1楼了,就私下给了传给版主,代加分数
看到了有重复给分的,是其他版主觉得公式好,给的私人分数。
42楼
guideming
前来学习的


哈哈……在这儿又见到小北啦

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap