2017-06-21 84 views
0

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

子盟约()

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 

末次

+0

试试这个网站,并使用示例作为模型:https://www.deskbright.com/excel/using-index-match/ – Jsleshem

+0

我有正确的索引/匹配公式在我的Excel中,我试图把它放到VBA中,这样我就可以将宏添加到其他工作簿,而不必经过复制/粘贴格式化etxc的过程。 – kwmoore1218

+0

另外,请确保您的计算是在代码中完成的。在'end sub'之前键入'calculate'以确保您的工作簿计算得到 – Jsleshem

回答

0

我不认为我解释我的问题非常好,但在下面的答案。我需要添加一个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