0

私はよく働くプログラムSubを持っています。私は、カスタム関数に変換したいのですが、私はExcelでこの機能を使用するときにエラー(#VALUE!)これはapperentlyワークシート関数として機能しますサブフォームをUDFに変換する(#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

。あなたは決して関数の入力を使用していません。そして名前付きの範囲 "Diapozon"はありますか? –

答えて

1

下記の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 
1

を発生し、あなたが入力する必要がありますこれは入力範囲として "diapozon"という名前の範囲で以前に定義した範囲です。

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")と入力するだけです。

+0

私はあなたが言ったようにコードを変更しますが、結果は同じです(#Value!) – maxim465

+0

さて、問題は関数ではなく入力である可能性があります。あなたのファイルはどのように見えますか、何か間違っているかもしれませんか?コードに影響を与える方法で "Diapozon"という名前の範囲の一部を変更しましたか? –

+0

私は自分の質問を編集し、PrintScreenでそれを見ることができますか? – maxim465

関連する問題