各位朋友,小弟的疑问是这样的:我在一个工作表A列中从上向下输入了2014年整年的日历,把其中的周末和法定休假日的日期清空,留成了空白单元格。在B1中设定了一个固定的日期2014-01-31,现在想通过公式验证这个固定日期是不是休假日(也就是在日历中是不是为空),如果是,那么找到并在C1返回2014-01-31后的下一个工作日,而且返回的这个工作日如果是我固定日期的下一个月,那么就找到并返回2014-01-31前的那个工作日。
如果用以下方法,只可找到查询日期前的一个工作日期,方法是在C1输入公式:
=VLOOKUP(B2,A2:A366,1,TRUE)
即可。如图:
以下是我帮你写一个VBA的程序完全实现你的要求,担心你不会执行宏指令,特设置了一个按键点击即可执行。
源程序:
Private Sub CommandButton1_Click()请加分并采纳我的答案。
C1是要判断的日期,E1输入公式:
=IF(ISERROR(MATCH(C1,A2:A366,0)),IF(MONTH(SMALL(INDIRECT("A"&MATCH(C1,A:A,1)&":A366"),2))>MONTH(C1),TEXT(INDEX(A:A,MATCH(C1,A:A,1)),"YYYY-M-D"),TEXT(SMALL(INDIRECT("A"&MATCH(C1,A:A,1)&":A366"),2),"YYYY-M-D")),"非假期")
关键是要找出比查找日期大一点的那个值(日期)。
先用MATCH的搜索参数1,获得刚好比查找日期小的日期位置。由于搜索区域是整个A列,所以得到的其实就是行号。
用INDIRECT函数定义一个从刚才搜到的比查找日期小一点的行,一直到第366行的区域。再用SMALL函数,在这个区域中找第2小的值,其实就是刚好比查找日期大一点的日期。