code

숨겨진 셀 찾기 수행

starcafe 2023. 7. 2. 20:53
반응형

숨겨진 셀 찾기 수행

숨겨진 열에 계산된 값 범위가 있으며 드롭다운 상자에 사용합니다.사용자가 선택한 값을 확인하기 위해 해당 범위에서 찾기를 실행하려고 하지만 어떤 이유로 열이 숨겨져 있는 한 Excel은 선택한 셀을 반환하지 않습니다.

숨겨진 범위의 셀에서 작업하는 찾기를 어떻게 얻을 수 있습니까?기억하세요 - 공식이 아니라 셀 계산 값을 검색하고 있습니다.

다음은 작동하지 않습니다.

Set inserted = Range("RDS_Event_IDs").Find(Range("SelectedEvent"), , xlValues, xlWhole)

세포가 있는 한Range("RDS_Event_IDs")숨겨져 있습니다.

솔루션은 검색 중인 범위의 일부 또는 전부가 숨겨져 있고 전체 시트가 검색될 수 있는 일반적인 상황에서 작동해야 하므로 영향을 받는 모든 행과 열을 프로그래밍 방식으로 숨긴 다음 이전에 숨긴 행과 열을 다시 숨길 수 없습니다.

Andy Pope에 따르면 (그리고 그는 결코 틀리지 않습니다) xl 공식을 사용하는 경우에만 숨겨진 셀에서 작동합니다.대신에 성냥?

Set inserted = Cells(Application.WorksheetFunction.Match("SelectedEvent", Range("RDS_Event_IDs"), 0), Range("RDS_Event_IDs").Column)

기능적 접근법

Doug Glancy의 답변을 사용하여 재사용 가능성을 위한 기능에 넣으면 좋을 것입니다.

''
' Find a range using `WorksheetFunction.Match()`. This alternative works well
' for finding range in hidden cells, and is not case sensitive.
'
' Created this solution based on answer on Stack Overflow @see https://stackoverflow.com/a/6298404/8309643
'
' @author Robert Todar <robert@roberttodar.com>
''
Function Find(ByRef searchRange As Range, ByVal what As Variant) As Range
    Set Find = Cells(Application.WorksheetFunction.Match(what, searchRange, 0), searchRange.Column)
End Function

범위를 검색하는 또 다른 방법은 범위에서 배열을 가져와 반복하는 것입니다.다시 한 번, 이것을 기능에 넣으면 재사용이 쉬워집니다!

''
' Finds a range based on it's value.
' This works faster than `Range.Find()` as it loops an array instead of cells.
' This also works for hidden cells where `Range.Find` does not.
'
' Note, this looks for first match, and is case sensitive by defaut, unless
' Option Match Case is used at the top of the module it is stored in.
'
' @author Robert Todar <robert@roberttodar.com>
''
Public Function FindFast(searchRange As Range, what As Variant) As Range
    ' Get data from range into an Array. Looping Arrays is much
    ' faster than looping cells.
    Dim data As Variant
    data = searchRange.Value
    
    ' Loop every row in the array.
    Dim rowIndex As Long
    For rowIndex = LBound(data, 1) To UBound(data, 1)
        
        ' Loop every column in the array.
        Dim columnIndex As Long
        For columnIndex = LBound(data, 2) To UBound(data, 2)
        
            ' If current row/column matches the correct value then return the range.
            If data(rowIndex, columnIndex) Like what Then
                Set FindFast = searchRange.Cells(rowIndex, columnIndex)
                Exit Function
            End If
        Next columnIndex
    Next rowIndex
    
    ' If the range is not found then `Nothing` is returned.
    Set FindFast = Nothing
End Function

매크로 내에서 이 작업을 수행하는 것이 정말로 필요합니까? 일치하는 작업을 더 쉽게 사용할 수 있습니다.

=MATCH(G9;H9:H16;0)

G9 : Cell of the Drop Down Box

H9:H16 : 사용자 범위

0 : 정확히 일치하는 경우

배열 내부의 인덱스를 반환합니다.

언급URL : https://stackoverflow.com/questions/6297624/perform-a-find-on-hidden-cells

반응형