Поиск хотя бы одного элемента в массиве VBA в диапазоне

#vba #excel

#vba #excel

Вопрос:

В настоящее время я пытаюсь найти хотя бы один элемент из моего массива в диапазоне, прежде чем продолжить, но способ, которым я сейчас это делаю, проверяет, что все значения находятся в диапазоне.

 If Not accountRange.find(Array(11571, 11572, 11573, 11574, 11575)) Is Nothing Then
  

В идеале у меня было бы что-то вроде этого:

 If Not accountRange.find(Array(11571, xlOr, 11572, xlOr, 11573, xlOr, 11574, xlOr, 11575))
  

Единственное обходное решение, которое я вижу, — это проверка каждого условия по отдельности, вот так:

 If Not accountRange.find(11571) Is Nothing Or _ 
    Not accountRange.Find(11572) Is Nothing Or _
    Not accountRange.Find(11573) Is Nothing Or _
    Not accountRange.Find(11574) Is Nothing Or _
    Not accountRange.Find(11575) Is Nothing Then
  

но, очевидно, это станет утомительным, когда у меня будет больше вещей для проверки в диапазоне.

Есть предложения?

Ответ №1:

Вы могли бы написать функцию, подобную этой:

 Function ValInRange(vals As Variant, R As Range) As Boolean
    Dim item As Variant
    For Each item In vals
        If Not R.Find(item) Is Nothing Then
            ValInRange = True
            Exit Function
        End If
    Next item
End Function
  

Затем ValInRange(Array(11571, 11572, 11573, 11574, 11575), accountRange) будет возвращен True результат, если одно из переданных чисел находится в диапазоне. В противном случае возвращается логическое значение по умолчанию False .

Комментарии:

1. Спасибо за это, это работает отлично! Кажется немного неудачным, что нет способа сделать это с помощью .Find метода, хотя

2. @RiverBanana В VBA редко бывает просто. Это старый язык, который не сильно изменился с середины 90-х.