【问题标题】:VBA Index Match Does not Loop, gives same answerVBA 索引匹配不循环,给出相同的答案
【发布时间】:2017-06-21 19:24:26
【问题描述】:

我有一个索引匹配函数,我试图将它保存为 VBA,以便我可以将它添加到多个工作簿中。我对其进行编码的方式一直给我相同的答案,并且不会循环到下一个单元格以查找不同的关键字。我希望它查看 N76 中的内容并将答案放入 O76 中,这有效,但对于 N77,它给出的答案与 O76 相同,即使 N77 中的关键字不同。

子契约()

Dim Covenant_1 As Integer
Dim Dashboard As Worksheet
Dim Covenant_Sheet As Worksheet
Dim Cov_Date As Range
Dim Cov_Dates As Range
Dim Cov_Type As Variant
Dim DB_Cov As Variant
Dim Cov_Type2 As Variant




Set Dashboard = Sheets("Dashboard")
Set Covenant_Sheet = Sheets("Covenants")
Set Cov_Date = Dashboard.Range("N74")
Set Cov_Dates = Covenant_Sheet.Range("B4:AB4")
Set Cov_Type = Covenant_Sheet.Range("B6:AB13")
Set DB_Cov = Dashboard.Range("L76:L80")
Set Cov_Type2 = Covenant_Sheet.Range("B6:B13")



For Each Cell In Dashboard.Range("N76:N80")
Cell.Value = Application.Index(Cov_Type, Application.Match(DB_Cov, Cov_Type2, 0), Application.Match(Cov_Date, Cov_Dates, 0))


Next

结束子

【问题讨论】:

  • 试试这个网站并使用示例作为模型:deskbright.com/excel/using-index-match
  • 我的 excel 中有正确的索引/匹配公式,我试图将其放入 VBA,以便我可以将宏添加到其他工作簿,而不必经历复制过程/粘贴格式等。
  • 另外,请确保您的计算在代码中完成。在end sub 之前键入calculate 以确保您的工作簿计算
  • 一个问题是您在DB_Cov 上的MATCH() 已修复进入您的循环。
  • 每次计算后如何让 DB_Cov 移动。 IE。对于 O76 中的输出,我希望它基于 L76,但对于 O77,我希望 L77

标签: vba excel indexing match


【解决方案1】:

我认为我没有很好地解释我的问题,但下面是答案。我需要添加一个 x 变量来运行循环。还有一些其他添加,但下面应该可以运行索引/匹配循环。

Sub Covenant()

Dim Covenant_1 As Integer
Dim Dashboard As Worksheet
Dim Covenant_Sheet As Worksheet
Dim Cov_Date As Range
Dim Cov_Dates As Range
Dim Cov_Type As Variant
Dim DB_Cov As Variant
Dim Cov_Type2 As Variant
Dim Cov_Next As Range



Set Dashboard = Sheets("Dashboard")
Set Covenant_Sheet = Sheets("Covenants")
Set Cov_Date = Dashboard.Range("M74")
Set Cov_Dates = Covenant_Sheet.Range("B4:AB4")
Set Cov_Type = Covenant_Sheet.Range("B6:AB13")
Set DB_Cov = Dashboard.Range("K75")
Set Cov_Type2 = Covenant_Sheet.Range("B6:B13")
Set Cov_Next = Dashboard.Range("P74")

For x = 1 To 5
    For y = 1 To 5
Cells(x + 75, 13) = Application.IfError(Application.Index(Cov_Type, Application.Match(DB_Cov.Offset(x, 0), Cov_Type2, 0), Application.Match(Cov_Date, Cov_Dates, 0)), "")

    Cells(y + 75, 16) = Application.IfError(Application.Index(Cov_Type, Application.Match(DB_Cov.Offset(y, 0), Cov_Type2, 0), Application.Match(Cov_Next, Cov_Dates, 0)), "")
    Next y
Next x
End Sub

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多