나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 dew (dewdrop)

추천:  2
파일:     유효성목록만들기-191230_Ans.xlsm (42.7KB) 조회:  1619
제목:   [RE]중복제거후 유효성목록 만들기
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007):

* 아래줄에 질문을 작성하세요 >>
안녕하세요?
고수님들 새해 복 많이 받으세요.

같은 날짜에 여러 발주번호가 있는데, 날짜를 입력하면 발주번호가 중복제거되어 유효성목록으로 뿌려지게 하고싶은데 참 어렵네요.
해결이 안되서 고수님의 도움을 받고싶습니다.
==============[권순원님 글에 대한 답변입니다]==============

Worksheet 이벤트를 이용하였습니다.

발주일을 입력하거나 선택하면 발주번호에 유효성 목록이 나타납니다.

첨부화일 참고하세요.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Row < 3 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    If Target = "" Then
        Target.Cells(1, 2).Validation.Delete
        Exit Sub
    End If
    
    Call userValidation(Target)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Row < 3 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    If Target = "" Then
        Target.Cells(1, 2).Validation.Delete
        Exit Sub
    End If
    
    Call userValidation(Target)
End Sub

Private Sub userValidation(rTg As Range)
    Dim rData As Range, rX As Range
    Dim oList As Object
    Dim vX
    
    With Worksheets("발주관리")
        Set rData = .Range(.Range("A3"), .Range("A3").End(xlDown))
    End With
    
    Set oList = CreateObject("System.Collections.ArrayList")
    For Each rX In rData.Cells
        If rTg = rX Then
            vX = rX.Cells(1, 3)
            If oList.Contains(vX) Then
            Else
                oList.Add vX
            End If
        End If
    Next
    oList.Sort
    vX = Join(oList.ToArray, ",")
    oList.Clear
    
    With rTg.Cells(1, 2).Validation
        .Delete
        If vX <> "" Then
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=vX
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
        End If
    End With
End Sub

 
[불량 게시물 신고]  
권순원고수님 감사드립니다.
첨부해주신 파일 실행해서 "작지관리"시트에서 A열에 발주일 입력했을때 "C"열 발주번호에 유효성 목록이 나타나지 않습니다.
발주번호 유효성 목록은 "발주관리'시트 C열 중복제거 목록입니다.
 
번거로우시겠지만 확인 부탁드립니다.
01-13 (09:37)
삭제 ■신고
dew이상이 없는 것 같은데요..

파일Open할때 메크로 포함하여 Open하여야 합니다.
01-13 (10:11)
삭제 ■신고
권순원되네요.
최고십니다.
너무너무 감사드립니다.
01-13 (11:42)
삭제 ■신고
권순원고수님~
명절은 잘 쉬셨습니까?
새해 복 많이 받으세요.

만들어주신 VBA로 유효성목록 너무나 잘 활용하고 있습니다.
그런데 조금 더 욕심을 내보고 싶습니다.
"입고관리" 시트에서 A열을 삽입하고 A3에 "작업지시일"을 입력하면 B열에 "작지관리시트"의 작업지시번호가 유효성목록으로 나타나게 한번 만 더 간청드립니다.

VBA 왕초보라서 응용해보려고 노력해봤는데 너무나 큰 산이네요.

바쁘시겠지만 부탁드리겠습니다.
감사합니다.
01-28 (13:15)
삭제 ■신고
        
  

작성일 : 2020-01-13(09:14)
최종수정일 : 2020-01-13(09:14)
 


 ◎ 관련글

  제 목   작성자   날짜
중복제거후 유효성목록 만들기 권순원 2020-01-06
[RE]중복제거후 유효성목록 만들기 dew 2020-01-13