Тест VBA, если ячейка находится в диапазоне

Я хочу проверить, находится ли данная ячейка в заданном диапазоне в Excel VBA. Каков наилучший способ сделать это?

Ответ 1

Из справки:

Set isect = Application.Intersect(Range("rg1"), Range("rg2"))
If isect Is Nothing Then
    MsgBox "Ranges do not intersect"
Else
    isect.Select
End If

Ответ 2

Если два тестируемых диапазона (ваша ячейка и ваш диапазон) не находятся в одном и том же Worksheet, то Application.Intersect выдает ошибку. Таким образом, способ избежать этого заключается в чем-то вроде

Sub test_inters(rng1 As Range, rng2 As Range)
    If (rng1.Parent.Name = rng2.Parent.Name) Then
        Dim ints As Range
        Set ints = Application.Intersect(rng1, rng2)
        If (Not (ints Is Nothing)) Then
            ' Do your job
        End If
    End If
End Sub

Ответ 3

Определите, находится ли ячейка в пределах диапазона с помощью VBA в Microsoft Excel:

От связанного сайта (сохранение кредита оригинальному подателю):

макроса VBA, предоставленного Erlandsen Data Consultingпредлагая разработку приложений Microsoft Excel, настройку шаблонов, поддержки и обучения

Function InRange(Range1 As Range, Range2 As Range) As Boolean
    ' returns True if Range1 is within Range2
    InRange = Not (Application.Intersect(Range1, Range2) Is Nothing)
End Function


Sub TestInRange()
    If InRange(ActiveCell, Range("A1:D100")) Then
        ' code to handle that the active cell is within the right range
        MsgBox "Active Cell In Range!"
    Else
        ' code to handle that the active cell is not within the right range
        MsgBox "Active Cell NOT In Range!"
    End If
End Sub

Ответ 4

@mywolfe02 дает код статического диапазона, поэтому его inRange отлично работает, но если вы хотите добавить динамический диапазон, используйте его с функцией inRange от him.this работает лучше, когда вы хотите заполнить данные, чтобы исправить начальную ячейку и последний столбец также фиксируется.

Sub DynamicRange()

Dim sht As Worksheet
Dim LastRow As Long
Dim StartCell As Range
Dim rng As Range

Set sht = Worksheets("xyz")
LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Set rng = Workbooks("Record.xlsm").Worksheets("xyz").Range(Cells(12, 2), Cells(LastRow, 12))

Debug.Print LastRow

If InRange(ActiveCell, rng) Then
'        MsgBox "Active Cell In Range!"
  Else
      MsgBox "Please select the cell within the range!"
  End If

End Sub 

Ответ 5

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

If InStr(range("NamedRange").Address, range("IndividualCell").Address) > 0 Then
    'The individual cell exists in the named range
Else
    'The individual cell does not exist in the named range
End If

InStr - это функция VBA, которая проверяет, существует ли строка в другой строке.

https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/instr-function