0

Ich habe ein Programm Sub, die gut funktioniert. Ich möchte es in eine benutzerdefinierte Funktion konvertieren, aber wenn ich diese Funktion in Excel einen Fehler verwenden (#VALUE!) trittTransform Sub zu UDF bekommen (#VALUE!)

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 

Function

+0

Sie erwarten eine ganze Reihe an eine Funktion. Sie verwenden niemals die Eingabe der Funktion. Und gibt es eine benannte Reihe "Diapozón"? –

Antwort

1

Versuchen Sie, die UDF Code (nicht sicher, was Sie versuchen, mit Ihrer Logik innerhalb des UDF zu erreichen), aber es funktioniert (nicht #VALUE! bekommen).

Da Sie ein Range Objekt an die UDF übergeben möchten (entsprechend Ihrem Screenshot), müssen Sie es auch in Ihrem Function Code definieren.

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

Diese apperently als Tabellenfunktion arbeiten, müssen Sie die Eingabe der Bereich, den Sie zuvor mit einem benannten Bereich "diapozon" als Eingabebereich definiert haben.

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 

Geben Sie einfach: =cyrillic("R1:RX") und es sollte funktionieren.

+0

Ich ändere den Code wie du sagst, aber das Ergebnis ist das gleiche (#Value!) – maxim465

+0

Ok, dann ist vielleicht das Problem nicht die Funktion, sondern die Eingabe. Wie sieht Ihre Datei aus und könnte etwas nicht in Ordnung sein oder haben Sie einige der "Diapozón" genannten Bereiche so geändert, dass sie den Code beeinflussen? –

+0

Ich bearbeite meine Frage mit PrintScreen, können Sie es sich anschauen? – maxim465