excel查找并返回最近的一个非空单元格的值

各位朋友,小弟的疑问是这样的:我在一个工作表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()
Dim i As Integer
Dim a As Date
i = 2
Do While Cells(i + 1, 1) <= Cells(2, 2)
    i = i + 1
Loop
a = Cells(i + 1, 1)
If Month(Cells(2, 2)) < Month(a) Then
    Do While Cells(i, 1) = ""
        i = i - 1
        a = Cells(i, 1)
    Loop
End If
Cells(2, 3) = a
End Sub

请加分并采纳我的答案。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-26

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小的值,其实就是刚好比查找日期大一点的日期。


第2个回答  推荐于2016-05-10
C1输入:=IF((B1=VLOOKUP(B1,A:A,1))+(MONTH(MIN(INDIRECT("A"&(MATCH(B1,A:A,1)+1)&":A"&(MATCH(B1,A:A,1)+10))))>MONTH(B1)),VLOOKUP(B1,A:A,1),MIN(INDIRECT("A"&(MATCH(B1,A:A,1)+1)&":A"&(MATCH(B1,A:A,1)+10))))本回答被提问者采纳
相似回答