2

ここで何がうまくいかなかったのかを理解しようと懸命に努力してきました。文字列値を含む 2 つの列があります。ワークシートで 3 番目の列を使用して UDF を呼び出しますが、最終的に #Value をエラーで取得します - 「数式で使用されている値が間違ったデータ型です」。

例えば:

 Col I   Col J
 File1    Y
 File1    N
 File2    Y
 File3    N

私はそれをデバッグしようとしましたが、入力値は関数変数にうまく渡されました。VBA に関する私の知識は限られているため、この問題の解決に役立つことを願っています。

ワークシートで呼び出される関数:

=FileCheck(I3,I3:J38)

コード:

Public Function FileCheck(V As Range, Q As Range) As String
    Dim vtest As Variant
    Dim i, j, stat As Integer

    stat = 0

    vtest = Q

    For i = 1 To UBound(vtest)
        If V = vtest(i, 1) And vtest(i, 2) = "N" Then

            For j = 1 To UBound(vtest)
                If V = vtest(j, 1) And vtest(j, 2) = "Y" Then

                    FileCheck = "Y"
                    stat = 1
                End If
            Next
            If stat = 0 Then
                FileCheck = "N"
                End
            Else: End
            End If


        ElseIf V = vtest(i, 1) And vtest(i, 2) = "Y" Then
            FileCheck = "Y"
        End If
    Next

End Function
4

2 に答える 2

4

を使用しているため、そのエラーが発生していますEnd

コンピュータの電源を切りたいときは、クリックしますStart Menu ~~> Shut downか、それとも電源ケーブルを直接引き抜きますか? :-)

使い方Endは、ケーブルを引っ張るのとよく似ています。使用しないでくださいEnd。関数を正常に終了します。このEndステートメントは、基本的にプログラムをクラッシュさせる方法ですが、エラー メッセージは表示されません。

これを試して。これらの行を置き換えます

If stat = 0 Then
    FileCheck = "N"
    End
Else: End
End If

If stat = 0 Then FileCheck = "N"
Exit Function

編集

Col Iところで、 inの対応する値を見つけようとしていますCol Jか? はいの場合、これには UDF は必要ありません。使用できますVlookup()

=VLOOKUP(I3,I3:J38,2,0)の代わりにこの式を使用します。=FileCheck(I3,I3:J38)

于 2013-01-22T14:08:35.490 に答える
1

最初の入力タイプは範囲ではなく文字列にする必要があると思います:

V as string

関数を終了したいときに追加で使用する必要がありますがexit function、関数を終了するか、if ステートメントを終了するか、for ループを終了するかはわかりません。

于 2013-01-22T14:05:08.973 に答える