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
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.