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

2024-11-01 03:40:13
推荐回答(3个)
回答1:

如果用以下方法,只可找到查询日期前的一个工作日期,方法是在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

请加分并采纳我的答案。

回答2:

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


回答3:

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))))