Проверить, если значение ячейки находится в массиве - PullRequest
0 голосов
/ 11 октября 2019

Я бы хотел, чтобы код что-то сделал, если значение ячейки моего диапазона отсутствует в массиве. проблема, которую я получаю, состоит в том, когда значение ячейки находится в массиве, но не = i моего для каждого его переключателя на "вы вышли"

Dim rng As Range
Set rng = Sheets("Validation").Range("B4:B62")
Dim cell As Range
Dim arrCsAng As Variant
Dim element As Variant
Dim i

arrCsAng = Array("881", "882", "883", "884", "885", "886", "889") 

 For Each cell In rng

     For i = LBound(arrCsAng) To UBound(arrCsAng)

        If arrCsAng(i) = cell.Value Then

            Debug.Print cell.Value & " You're in so do nothing"
            Exit For

        Else

            Debug.Print cell.Value & " You're out so do something"

        End If

    Next i

 Next   

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Ваша проблема в том, что даже если в массиве найдена ячейка, вы получаете несколько «аутов» перед тем, как попасть в «В»?

Вы можете избежать этого (и двух циклов), используя Match.

Ваша конечная цель мне не ясна, поэтому оставьте это открытым.

Sub x()

Dim rng As Range
Set rng = Sheets("Validation").Range("B4:B62")
Dim cell As Range
Dim arrCsAng As Variant
Dim i As Long

arrCsAng = Array("881", "882", "883", "884", "885", "886", "889")   'probably don't need "" as these are numbers

For Each cell In rng
    If IsNumeric(Application.Match(cell.Value, arrCsAng, 0)) Then   'cell is found
        Debug.Print cell.Value & " You're in so do nothing"
    Else                                                            'cell not in array
        Debug.Print cell.Value & " You're out so do something"      
    End If
Next cell

End Sub
0 голосов
/ 11 октября 2019

Требуется отдельная логическая функция, которая зацикливается сама по себе, проверяя, находится ли значение в данном массиве:

Public Function ValueInArray(myValue As Variant, myArray As Variant) As Boolean

    Dim myVar As Variant
    For Each myVar In myArray
        If myVar = myValue Then
            ValueInArray = True
            Exit Function
        End If
    Next myVar

    ValueInArray = False

End Function

Тогда это будет хорошо работать:

Sub TestMe()

    Dim myRange As Range
    Set myRange = Worksheets(1).Range("A1:A5")

    myRange(1) = 20
    myRange(2) = 300
    myRange(3) = 200
    myRange(4) = 50
    myRange(5) = 150

    Dim myArray As Variant
    myArray = Array(10, 20, 30, 40, 50)

    Dim myCell As Range
    For Each myCell In myRange
        If ValueInArray(myCell.Value, myArray) Then
            Debug.Print myCell.Value; " is in array!"
        Else
            Debug.Print myCell.Value; " is NOT in array!"
        End If
    Next myCell

End Sub

предоставление результатов один раз:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...