Transformez Sub en UDF obtenant (#VALUE!)

J'ai un programme Sub qui fonctionne bien. Je veux le convertir en une fonction personnalisée, mais lorsque j'utilise cette fonction dans Excel, une erreur ( #VALUE! ) #VALUE! produit

 Function ТридцатьТРи(Diapozon As Integer) 'для п/пр Dim k, n As Integer Dim parRange As Range Set parRange = Range("Diapozon") k = 0 n = 0 For Each Cell In parRange.Rows If Cell.Offset(0, 1).Value = 1 And k = -1 Then n = n - 1 End If If Cell.Value = 1 And k = -1 Then n = n + 1 End If If Cell.Value = 1 Then k = k + 1 If k = 2 Then k = -1 End If End If If Cell.Value = 2 Or Cell.Value = 3 Then k = 0 End If Next Cell ТридцатьТРи = n End Function 

Fonction

Essayez le code UDF ci-dessous (pas sûr de ce que vous essayez d'atteindre avec vos logiques dans l'UDF), mais cela fonctionne (n'obtenant pas #VALUE! ).

Puisque vous souhaitez passer un object Range à l'UDF (selon votre capture d'écran), vous devez le définir également dans votre code de Function .

Code

 Function cyrilic(Diapozon As Range) As Long Dim k As Long, n As Long Dim C As Range k = 0 n = 0 For Each C In Diapozon.Rows If C.Offset(0, 1).Value = 1 And k = -1 Then n = n - 1 End If If C.Value = 1 And k = -1 Then n = n + 1 End If If C.Value = 1 Then k = k + 1 If k = 2 Then k = -1 End If End If If C.Value = 2 Or C.Value = 3 Then k = 0 End If Next C cyrilic = n End Function 

Cela fonctionnera comme une fonction de feuille de travail avec précaution, vous devez entrer la gamme que vous avez précédemment définie avec une gamme nommée "diapozon" comme plage de saisie.

 Function cyrillic(rng As Range) Dim k, n As Integer Dim parRange As Range Set parRange = rng k = 0 n = 0 For Each Cell In parRange.Rows If Cell.Offset(0, 1).Value = 1 And k = -1 Then n = n - 1 End If If Cell.Value = 1 And k = -1 Then n = n + 1 End If If Cell.Value = 1 Then k = k + 1 If k = 2 Then k = -1 End If End If If Cell.Value = 2 Or Cell.Value = 3 Then k = 0 End If Next Cell cyrillic = n End Function 

Tapez simplement: =cyrillic("R1:RX") et devrait fonctionner.