본문 바로가기
카테고리 없음

엑셀 에서 브랜드 선택에 따른 상품 목록 만들기: 목록상자 활용법

by artra 2024. 3. 17.
반응형

엑셀에서 A1에서 목록상자 브랜드1 or 브랜드2 선택 할때 보통은 B1 목록상자 선택을 상품1,2,3,4 중에 선택 하게 한다.

 

그러면 A1에서 브랜드1 선택시 상품1, 2 보이게 하고 브랜드2 선택시 상품3, 4 보이게 해서 선택 하면 얼마나 편할까?

 

예시 모습

 

 

 

A1 B1칸은 목록상자를 위해 비워둔다.

 

브랜드1,2 / 상품 1,2,3,4 위치는 어디든 상관 없지만 한번에 보이게 하기위해 바로 셀 아래 작성 했다.

 

A1은 단순히 브랜드1,2 선택만 하게 하면 되니

 

상단 탭/데이터 - 리본/데이터 유효성 검사 - 설정/제한대상/목록/원본 칸 오른쪽 ↑ 클릭한 뒤

 

셀을 선택하면 =$A$2:$A$4 이렇게 나온다.

 

그 다음 확인 하면 A1은 끝난다.

 

A1 클릭하면 브랜드1, 브랜드2 선택이 가능하다.

 

 

그리고 B1은 A1에서의 브랜드1,2 선택에 따라 상품1,2 or 상품3,4 선택 가능하게 하려면

 

상단 개발도구에 맨처음에 Visual Basic 선택하면 개발도구가 나오고 아래 코드를 붙여 넣는다.

(상단에 개발도구가 없다면 파일 - 옵션 - 리본 사용자 지정 - 개발도구 박스 체크 그리고 확인 하면 상단 탭에 보인다.)

 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Dim selectedBrand As String
        selectedBrand = Range("A1").Value
        If selectedBrand = "브랜드1" Then
            With Range("B1").Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=B2:B3"
                .IgnoreBlank = True
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
            End With
        ElseIf selectedBrand = "브랜드2" Then
            With Range("B1").Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=B4:B5"
                .IgnoreBlank = True
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
            End With
        Else
            Range("B1").Validation.Delete
        End If
    End If
End Sub

 

코드 입력후 다시 엑셀로 돌아가서 A1에 브랜드2 를 선택하면 B1에서 상품3,4만 선택 할 수 있다.

 

 

 

아래는 코드 더 상세하게 코멘트를 CHAT.GPT에게 요청했다.

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 워크시트의 셀이 변경될 때 발생하는 이벤트 핸들러입니다.
    ' Target은 변경된 범위를 나타냅니다.

    ' 변경된 범위와 A1 셀의 교차점을 확인합니다.
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        ' A1 셀의 값을 가져와서 selectedBrand 변수에 저장합니다.
        Dim selectedBrand As String
        selectedBrand = Range("A1").Value

        ' 선택한 브랜드가 "브랜드1"인지 확인합니다.
        If selectedBrand = "브랜드1" Then
            ' B1 셀의 데이터 유효성 검사를 삭제하고 상품1과 상품2로 새로 설정합니다.
            With Range("B1").Validation
                ' 데이터 유효성 검사를 삭제합니다.
                .Delete
                ' 새로운 데이터 유효성 검사를 추가합니다.
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=B2:B3"
                ' 빈 셀을 무시하고 유효성 검사를 통과합니다.
                .IgnoreBlank = True
                ' 셀 내에서 드롭다운 목록을 표시합니다.
                .InCellDropdown = True
                ' 사용자가 셀에 마우스를 가져갈 때 입력 메시지를 표시합니다.
                .ShowInput = True
                ' 유효하지 않은 값을 입력했을 때 오류 메시지를 표시합니다.
                .ShowError = True
            End With
        ' 선택한 브랜드가 "브랜드2"인지 확인합니다.
        ElseIf selectedBrand = "브랜드2" Then
            ' B1 셀의 데이터 유효성 검사를 삭제하고 상품3과 상품4로 새로 설정합니다.
            With Range("B1").Validation
                ' 데이터 유효성 검사를 삭제합니다.
                .Delete
                ' 새로운 데이터 유효성 검사를 추가합니다.
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=B4:B5"
                ' 빈 셀을 무시하고 유효성 검사를 통과합니다.
                .IgnoreBlank = True
                ' 셀 내에서 드롭다운 목록을 표시합니다.
                .InCellDropdown = True
                ' 사용자가 셀에 마우스를 가져갈 때 입력 메시지를 표시합니다.
                .ShowInput = True
                ' 유효하지 않은 값을 입력했을 때 오류 메시지를 표시합니다.
                .ShowError = True
            End With
        ' 선택한 브랜드가 "브랜드1" 또는 "브랜드2"가 아닌 경우
        Else
            ' B1 셀의 데이터 유효성 검사를 삭제합니다.
            Range("B1").Validation.Delete
        End If
    End If
End Sub

 

 

 

 

반응형

댓글