Arrays 不满足条件时退出功能-Visual Basic

Arrays 不满足条件时退出功能-Visual Basic,arrays,excel,vba,function,Arrays,Excel,Vba,Function,我正在尝试用Visual Basic编写一个函数,如果满足某些条件,该函数将运行。如果没有,则函数将终止 现在我有以下几点: Function answer(list As range) As String Dim extent As Integer extent = list.rows.Value Dim array_1() As Double ReDim array_1(1 To extent) As Double Dim i As Integer

我正在尝试用Visual Basic编写一个函数,如果满足某些条件,该函数将运行。如果没有,则函数将终止

现在我有以下几点:

Function answer(list As range) As String

    Dim extent As Integer
    extent = list.rows.Value
    Dim array_1() As Double
    ReDim array_1(1 To extent) As Double
    Dim i As Integer

    For i = 1 To extent
        array_1(i) = list(i).value
        If array_1(i) <> "L" Or array_1(i) <> "R" Or array_1(i) <> "PD" Or array_1(i) <> "D" Or array_1(i) <> "PD" Or array_1(i) <> "P" Or array_1(i) <> "S" Then
            answer = "Your list is not valid"
            Exit Function
        End If
        Next i

    'Otherwise function will perform rest of code

    answer = "Your list is valid"

End Function
函数应答(列为范围)为字符串
将范围设置为整数
范围=list.rows.Value
Dim数组_1()为双精度
将ReDim数组_1(1到范围)作为双精度
作为整数的Dim i
对于i=1的范围
数组_1(i)=列表(i).值
如果数组_1(i)“L”或数组_1(i)“R”或数组_1(i)“PD”或数组_1(i)“D”或数组_1(i)“PD”或数组_1(i)“P”或数组_1(i)“S”,则
回答=“您的列表无效”
退出功能
如果结束
接下来我
'否则,函数将执行其余代码
回答=“您的列表有效”
端函数
如果我的输入是:
=answer(A1:A6)
例如,
A1=“XXX”
不等于“L”或“R”或“PD”等。我希望我的答案是“您的列表无效”,但我得到的是#值


我不清楚为什么会出现这种情况。

您需要对代码进行一些修改:


  • 要使
    extent
    具有范围内的行数,请使用
    extent=list.rows.count

  • 您不需要数组
    array_1()
    ,请查看第3点。(感谢@nightcrawler23的关注)

  • 您需要循环查看
    列表(Range.Cells),并检查每个
    单元格.Value
    ,如果它不包含任何特殊字符(我在这里使用
    选择大小写来简化和缩短代码)

  • 代码(已测试)


    或者绕过循环,使用一行
    COUNTIF

    试验

    作用


    extent=list.rows.count
    @那么你在我下面的回答中试过我的代码了吗?有什么反馈吗?@ShaiRado我有。工作起来很有魅力!谢谢,你根本不需要阵列1。这将减少大量代码。只需使用
    选择大小写单元格。Value
    @nightcrawler23谢谢,你是对的,我使用的是原始代码,我没有注意到它不需要。
    Function answer(list As Range) As String
    
        Dim extent As Long
        Dim cell As Range
    
        extent = list.Rows.Count
    
        ReDim array_1(1 To extent)
    
        For Each cell In list.Cells
            Select Case cell.Value
                Case "L", "R", "PD", "D", "S"
    
                Case Else
                    answer = "Your list is not valid"
                    Exit Function
    
            End Select
        Next cell
    
        'Otherwise function will perform rest of code
        answer = "Your list is valid"
    
    End Function
    
    Sub GetValues()
    MsgBox Answer([A1:B10])
    End Sub
    
    Function Answer(list As Range) As Boolean
    Answer = (Evaluate("Sum(COUNTIF(" & list.Address & ",{""L"",""R"",""PD"",""D"",""S""}))") = list.Cells.Count)
    End Function