워크시트에서 셀을 검색하여 Dictionary 개체에 축적하는 함수
FindCells 함수 설명
아래에 표시된 프로그램 FindCells 함수는 인수 워크시트 TargetWorksheet의 모든 셀을 대상으로 문자열 SearchText와 정확히 일치하는 셀을 검색하여 Dictionary 객체로 함께 반환합니다.
검색할 셀이 발견되면 셀 주소를 키로, 셀의 Range 객체를 Item으로 Dictionary 객체에 추가합니다. Count 속성의 값은 발견된 셀 수입니다.
표준 모듈
' TargetWorksheet内の全てのセルを対象に、SearchTextと完全一致するセルを検索する
' 戻り値のDictionaryオブジェクトは、KeyがセルのアドレスでItemがRangeオブジェクトの集合
' セルが見つからない場合は空(Count = 0)のDictionaryオブジェクトとなる
Function FindCells(ByRef TargetWorksheet As Worksheet, ByRef SearchText As String) As Dictionary
Dim FoundCell As Range
Set FindCells = New Dictionary
' TargetWorksheet内でSearchTextと完全一致する最初のセルを探す
Set FoundCell = TargetWorksheet.Cells.Find(What:=SearchText, LookIn:=xlValues, LookAt:=xlWhole)
' セルが見つかった場合は2つ目以降を探す
If Not FoundCell Is Nothing Then
Do
If Not FindCells.Exists(FoundCell.Address) Then
FindCells.Add FoundCell.Address, FoundCell
' FindNextはセルを探し終わると最初のセルに戻って検索し続ける
Set FoundCell = TargetWorksheet.Cells.FindNext(FoundCell)
Else
Exit Do
End If
Loop
End If
Set FoundCell = Nothing
End Function
Dictionary 객체를 사용하기 위한 참조 설정
Dictionary 객체를 사용하기 때문에 VBA IDE (Excel 통합 문서에서 Alt + F11에서 열기 화면)의
ツール > 参照設定
를 클릭하여 Microsoft Scripting Runtime을 선택합니다. 만약 새 통합 문서를 만들면 참조 설정도 초기화되므로 사용하려는 라이브러리는 통합 문서 단위로 참조 설정을 해야 합니다.Microsoft Scripting Runtime을 참조하지 않으면 "컴파일 오류: 사용자 정의 형식이 정의되지 않았습니다"라는 오류가 발생합니다.
FindCells 함수 사용법
이 FindCells 함수의 사용법을 설명합니다.
이제 시트 이름 Sheet1의 워크 시트에 "검색 테스트"라는 값의 셀을 세 개 준비했습니다. 셀의 주소는 B2, C11, E6입니다.
따라서 이러한 셀을 검색하려면 FindCells 함수를 다음과 같이 사용합니다.
표준 모듈
Sub Test_FindCells()
Dim FoundCellSet As Dictionary
Dim CellAddress As Variant
Set FoundCellSet = FindCells(ThisWorkbook.Sheets("Sheet1"), "検索テスト")
' 見つかったセルのワークシート名とアドレスを表示する
For Each CellAddress In FoundCellSet
Debug.Print FoundCellSet(CellAddress).Worksheet.Name, FoundCellSet(CellAddress).Address
Next
Set FoundCellSet = Nothing
End Sub
실행 후 출력을 캡처했습니다.
Dictionary 객체는 매우 편리하지만 그대로는 인텔리센스가 작동하지 않습니다. 예를 들어, 위의 테스트라면 발견된 셀은
FoundCellSet(CellAddress)
가 객체가 되고 있는데, FoundCellSet(CellAddress).
라고 해도 Range 객체의 메서드와 속성이 표시되지 않습니다.인텔리센스가 작동하려면 Dictionary 객체의 멤버를 다음과 같이 Range 객체로 다시 설정합니다.
표준 모듈
Sub Test_FindCells2()
Dim FoundCellSet As Dictionary
Dim CellAddress As Variant
Dim FoundCell As Range
Set FoundCellSet = FindCells(ThisWorkbook.Sheets("Sheet1"), "検索テスト")
' 見つかったセルのワークシート名とアドレスを表示する
For Each CellAddress In FoundCellSet
Set FoundCell = FoundCellSet(CellAddress)
Debug.Print FoundCell.Row
Next
Set FoundCellSet = Nothing
End Sub
이렇게 하면 IntelliSense가 작동합니다.
와일드카드로 입력이 있는 셀 모두 검색
Set FoundCellSet = FindCells(Sheet1, "*")
그러면 워크시트 1
Sheet1
내의 입력이 있는 모든 셀을 검색할 수 있습니다.Dictionary 객체 정보
Dictionary 객체에 대한 좋은 설명은 웹에 특별히 없다고 생각하지만 Dictionary 개체 - Microsoft MSDN에 약간의 설명이 있습니다.
그리고, Dictionary 객체를 사용하고 있으면(자) 대량의 데이터를 축적하는 일도 있다고 생각합니다. 사용이 끝나면
Set object = Nothing
를 잊지 않고 쓰지 않으면 메모리 릴리스되지 않으므로 주의가 필요합니다. 나는 Set object = Nothing을 작성하지 않으면 메모리가 릴리스되지 않습니다. - KOSUKE MAEDA에 쓴 것처럼 실패했습니다.
Reference
이 문제에 관하여(워크시트에서 셀을 검색하여 Dictionary 개체에 축적하는 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maech/items/23fa771c2799a75ed048텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)