excel 我如何使用VlookUp与大致的日期范围?

j7dteeu8  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(207)

我有这个数据。
| 编码|开始日期|结束日期|类别|
| - -|- -|- -|- -|
| 五十四|2021年3月1日|2020年10月10日|一百六十六|
| 五十四|2021年10月11日|九九年十二月三十一日|三百二十二|
| 一百零二|2020年4月10日|2021年8月31日|一百八十|
| 一百零二|2021年9月1日|2022年6月30日|一百九十|
| 一百零二|2022年7月1日|九九年十二月三十一日|二百|
我需要找到这个范围的de类

102 | 01/05/2021 | 31/05/2021

答案是190,因为在数据的第四个范围内。但我需要知道如何使这种Vlookup匹配近似日期和代码作为第二个条件。我试图使用Vlookup和匹配,但没有得到结果的直接上级值。
希望你能帮我。
我尝试将代码与开始日期连接,并使用VlookUp和AND,但没有成功。

9rygscc1

9rygscc11#

如果我没理解错的话...

列F1、G1、H1是要搜索的条件

Sub test()
Dim rgData As Range: Dim rg As Range
Dim rgBeg As Date: Dim rgEnd As Date
Dim dBeg As Date: Dim dEnd As Date
Dim rgCod As Integer

Set rgData = Range("A2", Range("A" & Rows.Count).End(xlUp))
rgCod = Range("F1").Value
rgBeg = Range("G1").Value
rgEnd = Range("H1").Value

    With rgData
        .Replace rgCod, True, xlWhole, , False, , False, False
        Set rg = .SpecialCells(xlConstants, xlLogical).Offset(0, 1)
        .Replace True, rgCod, xlWhole, , False, , False, False
    End With
        
    For Each cell In rg
        dBeg = cell.Value: dEnd = cell.Offset(0, 1).Value
        If rgBeg > dBeg And rgEnd < dEnd Then MsgBox cell.Offset(0, 2): Exit For
    Next
    
End Sub

但是消息方块会显示结果180,因为1-May-21到31-May-21在10-Apr-20到31-Aug-21的范围内。
代码只是创建了一个包含要搜索的代码的范围(在本例中为:102),将“102”替换为TRUE,将具有TRUE值的单元格设置为rg变量,然后将“102”从TRUE置回。
然后循环到rg变量中的每个单元格,将dBeg作为开始日期,dEnd作为结束日期。然后比较rgBeg是否大于dBeg,rgEnd是否小于dEnd...然后msgbox显示结果,即循环单元格的offset(0,2)值。

3pmvbmvn

3pmvbmvn2#

如果您使用的是Excel 365或Excel 2021,则完全不需要VBA来执行此操作-只需使用FILTER函数即可。
假设左上角的表位于A1,而您的“搜索标准”位于F1:H1中,则在I1中输入以下公式将为您找到该类:

=FILTER(D:D,(G1>=B:B)*(H1<=C:C)*(A:A=F1))

相关问题