Я хочу проверить, находится ли данная ячейка в заданном диапазоне в Excel VBA. Каков наилучший способ сделать это?
Тест 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