programing

셀이 범위 내에 있는지 여부를 VBA 테스트

goodsources 2023. 6. 15. 21:49
반응형

셀이 범위 내에 있는지 여부를 VBA 테스트

Excel VBA에서 주어진 셀이 주어진 범위 내에 있는지 테스트하고 싶습니다.이것을 하는 가장 좋은 방법은 무엇입니까?

도움말에서:

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

테스트할 두 범위(지정된 셀과 지정된 범위)가 동일하지 않은 경우Worksheet그러면 오류가 발생합니다.따라서, 그것을 피하는 방법은 다음과 같은 것을 사용하는 것입니다.

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

Microsoft Excel의 VBA를 사용하여 셀이 범위 내에 있는지 확인합니다.

연결된 사이트(원래 제출자에 대한 신용 유지):

Microsoft Excel 애플리케이션 개발, 템플릿 사용자 지정, 지원 및 교육 솔루션을 제공하는 Erlandsen Data Consulting에서 제공하는 VBA 매크로 팁

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

@mywolfe02는 정적 범위 코드를 제공하여 그의 inRange가 정상적으로 작동하지만 동적 범위를 추가하려면 그의 inRange 기능과 함께 이 코드를 사용합니다.시작 셀을 고정하기 위해 데이터를 채우고 마지막 열도 고정할 때 더 잘 작동합니다.

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 

다음은 범위 내에 셀이 있는지 확인하는 다른 옵션입니다.나처럼 교차 솔루션에 문제가 있는 경우.

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

저는 항상 인접한 범위에서 일하지 않습니다.비연속 범위에 대한 제 솔루션은 다음과 같습니다(여기에 다른 답변의 일부 코드 포함).

Sub test_inters()
    Dim rng1 As Range
    Dim rng2 As Range
    Dim inters As Range

    Set rng2 = Worksheets("Gen2").Range("K7")
    Set rng1 = ExcludeCell(Worksheets("Gen2").Range("K6:K8"), rng2)

    If (rng2.Parent.name = rng1.Parent.name) Then
        Dim ints As Range
        MsgBox rng1.Address & vbCrLf _
        & rng2.Address & vbCrLf _

        For Each cell In rng1
            MsgBox cell.Address
            Set ints = Application.Intersect(cell, rng2)
            If (Not (ints Is Nothing)) Then
                MsgBox "Yes intersection"
            Else
                MsgBox "No intersection"
            End If
        Next cell
    End If
End Sub

언급URL : https://stackoverflow.com/questions/5183374/vba-test-if-cell-is-in-a-range

반응형