코딩

[VBA] 특정 셀의 id에 해당하는 정보를 다른 시트에서 필터링

김 숨 2024. 7. 8. 14:05

(예시)

사용 하고 있는 서비스 시트의 "사용 건수" 의 칼럼에 있는 숫자를 클릭 했을 때,

클릭한 행의 B열에 있는 id 값을 저장해서 "사용 전체리스트" 시트로 이동

그 id 가 사용하는 서비스들만 필터링 하여 볼 수 있게 함

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim var As Variant
    Dim id As String
    Dim var2 As Variant
    Dim srch As Range
    Dim Tar As Range
    Dim columB As Range
    Dim distance As Integer
    Dim cell2value As Variant
    Set columnB = Range("B:B") ' B열
          

    ' Target의 셀이 1개 이상인 경우는 처리하지 않음
        If Target.Cells.Count > 1 Then Exit Sub
        'Target의 2행의 값이 '사용 건수' 일경우
  
        id = Worksheets("아이디 확인").Cells(2, Target.Column).Value
        
    If StrComp("후기 건수", id, vbTextCompare) = 0 Then
        '후기 내용시트의 필터 제거
        Worksheets("후기 내용").AutoFilterMode = False
        cell2value = Worksheets("아이디 확인").Cells(Target.Row, columnB.Column).Value
        var = cell2value
        Debug.Print var
        
        
        If Target.Value = "0" Then
            MsgBox "해당하는 내용이 없습니다.", vbCritical, "건수 확인"
            Exit Sub
        End If
        
        ' 클릭한 셀이 비어있는 경우는 처리하지 않음
        If IsEmpty(Target) Then Exit Sub
        
        ' 전체리스트 시트에서 id 값으로 필터링
        Set srch = Worksheets("후기 내용").Range("B2")
        
        ' srch가 null이 아닌 경우에만 처리
        If Not srch Is Nothing Then
            Application.Goto srch
            
            ' id 값이 "-"가 아닌 경우에만 필터링
            If Not var = "" Then
                Worksheets("후기 내용").Range("B2").AutoFilter Field:=1, Criteria1:=var, Operator:=xlFilterValues
            End If
            
            Cancel = True
        End If
    End If


    If StrComp("사용 건수", id, vbTextCompare) = 0 Then
        ' 사용 전체리스트 시트의 필터 제거
        Worksheets("사용 전체리스트").AutoFilterMode = False
        cell2value = Worksheets("아이디 확인").Cells(Target.Row, columnB.Column).Value
        var = cell2value

        
        If Target.Value = "0" Then
            MsgBox "해당하는 내용이 없습니다.", vbCritical, "건수 확인"
            Exit Sub
        End If
        
        ' 클릭한 셀이 비어있는 경우는 처리하지 않음
        If IsEmpty(Target) Then Exit Sub
        
        ' 사용 전체리스트 시트에서 id 값으로 필터링
        Set srch = Worksheets("사용 전체리스트").Range("C2")
        
        ' srch가 null이 아닌 경우에만 처리
        If Not srch Is Nothing Then
            Application.Goto srch
            
            ' id 값이 "-"가 아닌 경우에만 필터링
            If Not var = "" Then
                With Worksheets("사용 전체리스트").Range("B2:G3")
                .AutoFilter Field:=2, Criteria1:=var, Operator:=xlFilterValues
            End With
            End If
            
            Cancel = True
        End If
    End If
End Sub