반응형
코딩으로 시간 벌기 / 엑셀 VBA

드롭다운 목록, 매크로로 자동 업데이트하기! 🔽

물류아재 칵칵 · 엑셀 VBA 시리즈 4편

안녕하세요, 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다. 😊

물류 현장에서 가장 골치 아픈 것 중 하나가 바로 데이터 오타입니다. 누군가는 '경동사'라 쓰고 누군가는 '경동사(주)'라고 쓰면, 나중에 피벗 테이블을 돌릴 때 데이터가 찢어져서 고생하게 되죠. 이를 막기 위해 우리는 '데이터 유효성 검사'를 통해 드롭다운 목록을 만듭니다.

하지만 품목이 수백 개씩 추가될 때마다 매번 범위를 수정해주고 계신가요? 오늘은 새로운 품목이 추가되어도 자동으로 드롭다운 목록을 업데이트해주는 자동 유효성 검사 매크로를 만들어 보겠습니다.


왜 이 매크로가 필요할까요? 🛠️

📦 실제 물류 업무 사례
새로운 거래처가 입점할 때마다 '입고 등록' 시트의 거래처 선택 목록을 수동으로 늘려주고 있습니다.
VBA를 이용하면 기초 정보 시트에 데이터만 추가하면 등록 시트의 드롭다운이 실시간으로 바뀝니다.

자동 드롭다운 생성 매크로 코드

아래 코드는 특정 시트의 리스트를 가져와서 원하는 범위에 드롭다운 목록을 즉시 만들어줍니다.

Sub CreateAutoDropdown()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRow As Long
    Dim listRange As String

    Set wsSource = Sheets("기초정보") '목록이 있는 시트 이름
    Set wsTarget = ActiveSheet        '드롭다운을 만들 현재 시트
    
    '1. 기초정보 시트의 마지막 행 찾기 (A열 기준)
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    
    '2. 드롭다운에 들어갈 범위 문자열 만들기
    listRange = "='기초정보'!$A$2:$A$" & lastRow

    '3. 선택한 범위에 유효성 검사(드롭다운) 적용
    With Selection.Validation
        .Delete '기존 설정 삭제
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=listRange
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "입력 오류"
        .ErrorMessage = "목록에 없는 항목입니다. 정확히 선택해주세요!"
        .ShowInput = True
        .ShowError = True
    With
    
    MsgBox "드롭다운 목록 업데이트 완료!"
End Sub

사용 방법 🚀

  • '기초정보'라는 이름의 시트를 만들고 A열에 드롭다운에 넣을 리스트를 작성합니다.
  • 드롭다운을 만들고 싶은 셀 범위를 마우스로 선택합니다.
  • Alt + F8을 눌러 CreateAutoDropdown 매크로를 실행합니다.
  • 이제 목록이 바뀌어도 매크로만 한 번 실행하면 범위가 자동으로 조정됩니다!
💡 고수의 한 끗 차이
이 코드를 Worksheet_Activate 이벤트에 넣어두면, 해당 시트를 클릭할 때마다 매크로가 알아서 실행되어 버튼조차 누를 필요 없는 완벽한 자동화가 가능합니다.

막히는 부분 해결하기 🚨

Q. 시트 이름을 바꾸고 싶어요!
코드의 Sheets("기초정보") 부분의 이름을 현재 사용 중인 시트 이름과 똑같이 맞춰주면 됩니다. 띄어쓰기 하나라도 다르면 오류가 나니 주의하세요!

오타 없는 깔끔한 데이터 관리는 모든 자동화의 시작입니다. 오늘 배운 드롭다운 자동화로 데이터 수집 단계부터 에러를 원천 차단해 보세요!

다음 시간에는 "여러 개의 엑셀 파일을 하나로 합치는 마법의 매크로"를 소개해 드릴 예정입니다. 많은 기대 부탁드립니다! 😊

반응형

+ Recent posts