2017-02-07 302 views
0

我有一個帳戶列表&代碼,並希望使用索引匹配填充來自不同工作表的結果列。我可以使用公式:= index(rngB,match(BCode,rngM,0),55)VBA索引/匹配空白單元格

但無法將其轉換爲vba。我曾嘗試過:

sub compare() 

Dim BudgetResult As Long 
Dim var1 As Long 
Dim rngB, rngM As Range 
Dim CompSH, ActSH, BudSH As Worksheet 
Dim BCode As Variant 

Set CompSH = Sheets.Add(After:=Sheets(Sheets.Count)) 
Set ActSH = Sheets(2) 
Set BudSH = Sheets(3) 
Set rngB = BudSH.Range("B11:BF50") 
Set rngM = BudSH.Range("B:B") 
Set BCode = CompSH.Range("A2") 

BudSH.Select 
Range("B10:E76").Select 
Selection.Copy 
CompSH.Select 
ActiveSheet.Paste 
Range("F1").Select 
ActiveCell.FormulaR1C1 = "Budget" 
Range("F2").Select 

With Application.WorksheetFunction 

var1 = .Match(BCode, rngM, 0) 
BudgetResult = .Index(rngB, var1, 55) 

End With 

我得到一個空白單元格。沒有結果在表單中。 此外,我不知道如何繼續下去。誰能幫忙?

+0

文中陳述範圍大小你翻譯Excel公式變成VBA設置?如果您已經決定使用VBA,爲什麼不使用它的額外功能? –

回答

0

,你是什麼樣後如下

Option Explicit 

Sub compare() 
    Dim rngB As Range, rngM As Range, cell As Range 
    Dim CompSH As Worksheet, ActSH As Worksheet, BudSH As Worksheet 
    Dim AW As WorksheetFunction: Set AW = Application.WorksheetFunction 

    Set CompSH = Sheets.Add(After:=Sheets(Sheets.count)) 
    Set ActSH = Sheets("ActSH") 'Sheets(2) 
    Set BudSH = Sheets("BudSH") 'Sheets(3) 

    With BudSH 
     Set rngB = .Range("B11:BF50") '<--| warning: your "index" range has 40 rows 
     Set rngM = .Range("B:B") 
     .Range("F1").Value = "Budget" 
     .Range("B10:E76").Copy CompSH.Range("A1") '<--| warning: your "copied" range has 67 rows 
    End With 

    With CompSH 
     For Each cell In .Range("A2", .Cells(.Rows.count, 1).End(xlUp)) 
      cell.Offset(, 5).Value = AW.Index(rngB, AW.Match(cell, rngM, 0), 55) '<--| this will error when trying to access from 'rngB' range 41th rows on 
     Next 
    End With 
End Sub 

,你只需要調整標<--| Warning...

+0

感謝您的回答 – akim

+0

akim,歡迎您 – user3598756