2017-02-07 6 views
0

Ich habe eine Liste von Konten & Codes, und möchte eine Spalte mit Ergebnissen aus einem anderen Blatt mit Index übereinstimmen. Ich kann es mit der Formel arbeiten: = index (rngB, match (BCode, rngM, 0), 55)VBA Index/Match leere Zelle

aber kann es nicht in vba übersetzen. Ich habe versucht:

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 

Ich bekomme eine leere Zelle. kein Ergebnis im Blatt. Ich weiß auch nicht, wie ich weitermachen soll. Kann jemand helfen?

+0

sind Sie auf die Übersetzung der Excel-Formel in VBA gesetzt markiert einstellen müssen? Wenn Sie sich bereits für die Verwendung von VBA entschieden haben, warum sollten Sie nicht die zusätzlichen Funktionen nutzen? –

Antwort

0

kann man nach so etwas wie

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 

folgt, wo man nur die Bereichsgrößen in den Aussagen mit <--| Warning...

+0

danke für deine antwort – akim

+0

akim, du bist willkommen – user3598756