2017-10-20 17 views
1

J'essaye d'écrire une fonction Excel VBA simple pour prendre un nombre d'une cellule donnée et assigner une note puis écrire la valeur dans la cellule active courante.Référence circulaire dans 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 

Lors de l'appel « = grade (A2) » dans Excel je reçois le message d'erreur Il y a une ou des références plus circulaires où une formule fait référence à sa propre cellule soit directement ou indirectement.

Qu'est-ce qui me manque?

+3

changement '' = ActiveCell.Value à '' niveau = – Zerk

Répondre

3

Vous n'effectuez pas d'actions avec des fonctions. Vous ne devriez pas essayer de modifier les cellules ou quoi que ce soit. (Dans votre code, chaque fois que la fonction est recalculée, elle modifie la cellule que vous avez sélectionnée.)

Vous devez simplement définir la valeur comme s'il s'agissait d'une variable. Lorsque le code est terminé, il renvoie la valeur de la fonction à tout ce qui l'a appelée. La fonction est disponible pour une utilisation dans les formules Excel et dans VBA.

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

alternatives de formule Excel juste au cas où:

=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)