2017-06-16 3 views
1

Ich weiß, dass diese Funktion richtig funktioniert, aber wenn ich versuche, in meiner Tabelle auszufüllen, verursacht Excel fast sofort zum Absturz. Wenn ich in den Debug-Modus gehe, sagt es mir, dass es am Ende ein If-Problem gibt. Ich glaube, das ist richtig, da das Ende If die vorherige If-Anweisung beendet.VBA: Excel stürzt am Ende ab Wenn

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long) 

'Update 20150310 
Dim rng As Range 
Dim xResult As String 

xResult = "" 
For Each rng In pWorkRng 
    If rng = pValue Then 
     xResult = xResult & " " & rng.Offset(0, pIndex - 1) 
    End If '<-- crashes here 
Next 
MYVLOOKUP = xResult 
End Function 
+0

Nur ein FYI, kann dies in Office 365 Excel mit dem neuen TEXTJOIN erfolgen() Formel ein Array '= TEXTJOIN (" ", TRUE, IF (LookupRange = pValue, ResultRange," "))' Bestätigen Sie mit Ctrl-Shift-Enter. –

+0

Das 'End If' ist in Ordnung, was ist der genaue Fehler? Mit Absturz meinst du crash to desktop oder einen Laufzeitfehler., Wenn ja was ist das? –

+0

Kein RAM mehr? –

Antwort

1

läßt Grenze die Schleife nur die erste Spalte und den verwendeten Bereich auf diesem Blatt:

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long) 

'Update 20150310 
Dim rng As Range 
Dim xResult As String 
'resets the range to only the first column and the used range. 
'this will limit the cycling to the smallest possible range. 
Set pWorkRng = Intersect(pWorkRng.Columns(1), pWorkRng.Parent.UsedRange) 

xResult = "" 
For Each rng In pWorkRng 
    If rng = pValue Then 
     xResult = xResult & " " & rng.Offset(0, pIndex - 1) 
    End If 
Next 
MYVLOOKUP = xResult 
End Function 
+0

Vielleicht auch dies in ein Array ändern und das Array von dann an verwenden. –

+0

@Nathan_Sav Ich dachte daran, aber nicht zu wissen, wie das OP die Formel verwendet es macht es schwer. Wenn das OP nicht den gesamten Bereich von Werten, sondern nur die erste Spalte einstellt und den Offset die Arbeit der 2. Dimension erlaubt, wird es schwierig, ein Array zu setzen. –

+0

Ich glaube, das hat funktioniert. Für diejenigen, die sich wunderten, passte ich eine Liste von ungefähr 525 Namen mit einer Liste von 7000 Namen zusammen, mit einer Rolle für jeden Namen. Ich musste diese Rollen an jeden der 525 Namen anhängen. Im Grunde genommen ist Bob in einer Tabellenkalkulation Manager und auf der anderen Seite kann Bob viele Aufgaben übernehmen –

Verwandte Themen