#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-х.