숨겨진 셀 찾기 수행
숨겨진 열에 계산된 값 범위가 있으며 드롭다운 상자에 사용합니다.사용자가 선택한 값을 확인하기 위해 해당 범위에서 찾기를 실행하려고 하지만 어떤 이유로 열이 숨겨져 있는 한 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
'code' 카테고리의 다른 글
Angular - *ngIf 대 템플릿의 단순 함수 호출 (0) | 2023.07.02 |
---|---|
TypeScript의 클래스에 오리 타이핑이 허용되는 이유 (0) | 2023.07.02 |
gitsvn을 사용하여 원격 지점 체크아웃 (0) | 2023.07.02 |
SpringBoot의 요청 매핑이 작동하지 않음 (0) | 2023.07.02 |
Log4같은 로거에 대해 두 개의 다른 수준에서 두 개의 다른 추가기에 대한 Net 로깅 (0) | 2023.07.02 |