【问题标题】:Excel function CELL - INDEX - MATCH use converted to VBAExcel 函数 CELL - INDEX - MATCH 使用转换为 VBA
【发布时间】:2020-07-01 15:57:32
【问题描述】:

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

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

这个公式给了我结果,例如搜索 1/2/2017 会返回 $A$6 的单元格引用。搜索 12/30/2016 会返回 $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
    ...

【问题讨论】:

  • 在 VBA 中,您可以使用 Application.Match(),其方式与在工作表上使用 MATCH() 的方式类似。同样Application.Index()

标签: excel vba excel-formula


【解决方案1】:

如果我回答了您的问题,我可以为您提供替代方案。 我已经测试了这段代码并且工作正常。

我有一个从 A2 到 A14 的升序日期列表 我使用单元格(1,4)[在工作表中为 D1] 作为输入数据来比较列表。 比较的结果是进入单元格(2,4) [in sheet is 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 年 1 月 11 日,结果是 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

【讨论】:

  • 费迪南多,非常感谢。这个逻辑可以满足我的需要。我想有时你必须离开内置函数来完成你需要的事情。
猜你喜欢
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2020-10-20
  • 1970-01-01
  • 2023-03-20
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多