2017-10-20 1 views
1

Ich versuche, eine einfache Excel VBA-Funktion zu schreiben, um eine Nummer aus einer bestimmten Zelle zu nehmen und eine Note zuzuweisen, dann schreibe den Wert in der aktuellen aktiven Zelle.Circular Reference in Excel VBA

Public Function Grade(rng As Range) 
    Dim number As Double 
    number = rng.Value 

    If number >= 75 Then 
     ActiveCell.Value = "A" 
    ElseIf number >= 60 Then 
     ActiveCell.Value = "B" 
    ElseIf number >= 50 Then 
     ActiveCell.Value = "C" 
    ElseIf number >= 45 Then 
     ActiveCell.Value = "D" 
    ElseIf number < 45 Then 
     ActiveCell.Value = "F" 
    End If 

End Function 

Nach ‚= Grade (A2)‘ in Excel Aufruf erhalte ich die Fehlermeldung Es gibt einen oder mehrere zirkuläre Verweise, wo eine Formel entweder auf seine eigene Zelle direkt oder indirekt verweist.

Was fehlt mir?

+3

Änderung 'ActiveCell.Value =' auf '' Klasse = – Zerk

Antwort

3

Sie führen keine Aktionen mit Funktionen durch. Sie sollten nicht versuchen, Zellen oder irgendetwas zu ändern. (In Ihrem Code wird jedes Mal, wenn die Funktion neu berechnet wird, die von Ihnen ausgewählte Zelle geändert.)

Sie müssen den Wert nur so einstellen, als wäre es eine Variable. Wenn der Code beendet ist, gibt er den Wert der Funktion an den aufgerufenen Code zurück. Die Funktion steht zur Verwendung in Excel-Formeln und in VBA zur Verfügung.

Public Function Grade(rng As Range) 
Dim number As Double 
number = rng.Value 

If number >= 75 Then 
    Grade = "A" 
ElseIf number >= 60 Then 
    Grade = "B" 
ElseIf number >= 50 Then 
    Grade = "C" 
ElseIf number >= 45 Then 
    Grade = "D" 
ElseIf number < 45 Then 
    Grade = "F" 
End If 

End Function 
1

Excel Formel Alternativen für alle Fälle:

=LookUp(A1,{0,45,50,60,75;"F","D","C","B","A"}) 

=Char(71-Match(A1,{0,45,45,50,60,75})) 

=Mid("FFFFFFFFDCCBBBAAAAAA",A1/5,1)