【问题标题】:Adjacent Cell of closest Match using Index and Match Functions使用索引和匹配函数的最接近匹配的相邻单元格
【发布时间】:2020-09-23 18:49:41
【问题描述】:

我有两列:时间和位置,需要找到对应时间最接近变量的位置。

时间:范围 B:B 位置:范围 C:C 变量=目标

我已经能够使用以下公式在 excel 上执行此操作,但是当我在宏上执行此操作时(在索引、匹配和最小值前插入 Application.WorksheetFunction)我得到错误

‘运行时错误‘13’。

我已将数据列为范围。不知道还能做什么。

=INDEX(data,MATCH(MIN(ABS(data-value)),ABS(data-value),0))

【问题讨论】:

  • 您能否添加与Application.WorksheetFunction 一起使用的确切代码

标签: excel vba excel-formula


【解决方案1】:

对我来说,找到解决方案非常困难。首先,在 vba 中,不能将向量计算为其他两个向量的差(如数据值)。 我希望它对你有用。

Sub mm()
    Dim rdata As Range, rvalue As Range
    Set rdata = Range("A1:A20")
    Set rvalue = Range("B1:B20")
    Dim i As Long
    Dim dt As Variant, vl As Variant, AbsDelta As Variant
    dt = Application.WorksheetFunction.Transpose(rdata.value)
    vl = Application.WorksheetFunction.Transpose(rvalue.value)
    AbsDelta = Application.WorksheetFunction.Transpose(rdata.value) 'just for reserve place 
    For i = LBound(dt) To UBound(dt)
        AbsDelta(i) = Abs(dt(i) - vl(i)) 'This line is updated
    Next i
    Dim minAbsDelta As Double
    minAbsDelta = Application.WorksheetFunction.Min(AbsDelta)
    Range("C1").value = Application.WorksheetFunction.Index(dt, Application.WorksheetFunction.Match( _
        minAbsDelta, AbsDelta, 0))
End Sub

【讨论】:

  • 查找值在哪里?查找值在 Range B:B 中,但我要查找的值是对应的时间。
  • 我的代码只是演示了解决方案。从“A1:A20”和“B1:B20”中获取一些测试日期,然后将结果写入“C1”。我还在代码中发现了一个错误。查看更新版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 2012-10-01
相关资源
最近更新 更多