Excel函数CELL-INDEX-MATCH使用转换为VBA

时间:2018-10-14 20:43:04

标签: excel-vba excel-formula

我有一个升序列表。我正在使用以下公式返回单元格引用:

=CELL("address",INDEX(A2:A14,MATCH(D1,A2:A14,1)))

这个公式给我的结果例如搜索1/2/2017将返回单元格引用$ A $ 6。在2016年12月30日进行搜索时,返回的单元格引用为$ A $ 4。

如果搜索日期大于列表中的上一个日期并且存在另一个大于搜索日期的日期,我将如何使用VBA达到相同的结果,同时返回列表中的下一个日期值?

 Dates                 1/2/2017
  12/27/2016              $A$6
  12/28/2016
  12/29/2016
  1/1/2017
  1/2/2017
  1/3/2017
    ...

1 个答案:

答案 0 :(得分:1)

如果我想回答您的问题,那么我有另一种选择。 我已经测试了这段代码,并且工作正常。

我有一个从A2到A14的升序日期列表 我使用cells(1,4)[在工作表中为D1]作为输入数据,以比较成列表。 比较的结果进入单元格(2,4)[在工作表中为D2]

即 我的清单从A2到A14

12/27/2016
12/28/2016
12/29/2016 
01/01/2017 
01/02/2017 
01/03/2017 
01/04/2017
01/05/2017 
01/06/2017 
01/07/2017 
01/08/2017 
01/09/2017 
01/10/2017

进入单元格(1,4)我写了01/05/2017

输出宏进入单元格(2,4),它是:$ A $ 9

如果我写2017年11月11日,则结果为$ A $ 14

Sub test()
Dim i, start, finish As Integer
Dim myDate,output As Date
i = 0
start = 2
finish = 14
myDate = Cells(1, 4) ' my input - cells(2,4) is output

For i = finish To start Step -1
    If (i = start) Then
        Cells(i, 1).Activate 'cell where is "my date"
        Cells(2, 4) = ActiveCell.Address ' get the address -output
        'Exit For
    End If
    If myDate >= Cells(i, 1) Then 
        Cells(i, 1).Activate 'cell where is "my date"
        Cells(2, 4) = ActiveCell.Address ' get the address -output
        Exit For
    End If
Next i
End Sub