将Sub转换为UDF(#VALUE!)

我有一个程序Sub ,运作良好。 我想把它转换成一个自定义的函数,但是当我在Excel中使用这个函数时会出现一个错误( #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 

功能

尝试下面的UDF代码(不知道你想在UDF中使用你的逻辑来实现什么),但它工作(没有获得#VALUE! )。

既然你想传递一个Range对象给UDF(根据你的屏幕截图),你还需要在你的Function代码中定义它。

 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 

这将作为一个工作表函数明显地,您需要input您以前命名的范围“diapozon”定义的范围作为input范围。

 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 

只要键入: =cyrillic("R1:RX") ,它应该工作。