메뉴
해결 엑셀2016 이전윈도우10

특정 조건 자동 입력 (중복되는 내용도 입력되게 하고 싶습니다.)

허
9월 19일 조회 635
수식을 사용하여 이름을 입력하면 아래에 자동으로 입력되게 만들었는데 이름에 품목 OR 수량이 같을 경우 내용이 입력되지 않습니다.  어떤 수식을 사용해야 제대로 입력이 될까요?

 

댓글 9

마
마법의손 9월 20일
삭제된 댓글입니다.
허
허준혁 작성자 9월 20일
@마법의손 님 감사합니다-!
박
박정호2 채택된 답변 9월 20일

⑦품목
바로 아래 칸에 아래 공식 넣고 아래로 복붙 해 주시면 되구요 (반드시 한개씩)
C12=IFERROR(INDEX($O$1:$O$101,AGGREGATE(15,6,ROW($A$1:$A$101)/($N$1:$N$101=$E$4),ROW(A1))),"")
그리고 
원하는 정보를 찾고 싶으면 붉은 색 부분을 조절해 주시면 되요.
셀이 병합되서 그런가 그냥 복붙으로는 안되고 일일이 한개씩 복붙해 줘야 하네요.
허
허준혁 작성자 9월 21일
@박정호2 님 완벽하게 해결되었습니다. 도움 주셔서 감사합니다.
박
박정호2 9월 20일
그럴리는 없겠지만 혹씨 저 공식 안되면
이거 쓰시면 되요
C12=IFERROR(INDEX($O$1:$O$101,1/LARGE(INDEX(($N$1:$N$101=$E$4)/ROW($A$1:$A$101),),ROW($A1))),"")
마법의 손님이 왜 저 공식 추천해 주셨는지 전 잘 모르겠네요.
왠만하면 이거나 위에꺼 쓰세요.
마
마법의손 9월 20일
@박정호2 님 ㅋㅋ 귀찮았었네요..^^;;; 위 aggregate수식이 안될리가 있을까요..
박
박정호2 9월 20일
@마법의손 님 주로 최신 문물을 파시니
이렇게 오래된 공식은 아무래도 손에 안 익죠
그렇겠죠 2010 함수인데, AGGREGATE 는
아무튼 덕분에 좋은 공식 알게 되서 감사합니다.
마
마법의손 9월 20일
 
수식이 들어갈 셀들이 병합된 곳이므로
CTRL+SHIFT+ENTER가 바로 안됩니다.. (할려면 병합해제후 CSE처리후 다시 병합)
그러므로 CSE사용안해도 되는 위의 박정호님의 수식이 좋습니다..~
수
수메리안 9월 20일
안녕하세요~
이렇게 활용해보세요^^
Option Explicit

'// ===== 상수 선언 =====
Private Const TMPL As String = "신청서"
Private Const PFX As String = "신청서_"

'// 셀 위치 상수
Private Const CEL_NM As String = "E4"
Private Const CEL_JMN As String = "K4"
Private Const CEL_TEL As String = "K5"
Private Const CEL_BUY As String = "A11"
Private Const CEL_APP As String = "A25"
Private Const CEL_SIG As String = "J26"

'// 데이터 영역 상수
Private Const ROW_ST As Long = 11
Private Const ROW_TOT As Long = 19
Private Const COL_ITM As String = "C"
Private Const COL_QTY As String = "F"
Private Const COL_SUP As String = "H"
Private Const COL_TAX As String = "J"
Private Const COL_TOT As String = "L"

Public Sub CreateApp(ByRef Data As AppData)
    Dim ws As Worksheet, coll As Collection
    
    '// 새 시트 생성
    Set ws = MakeWs(Data.nm)
    
    '// 기본 정보 입력
    Call FillBase(ws, Data)
    
    '// 세부 데이터 입력
    Set coll = GetByNm(Data.nm)
    Call FillDtl(ws, coll)
    
    '// 합계 계산
    Call CalcTot(ws, coll.Count)
    
    MsgBox "[" & ws.Name & "] 작성 완료", vbInformation
End Sub
'// 새 신청서 시트 생성
Private Function MakeWs(ByVal nm As String) As Worksheet
    Dim newNm As String, tmplWs As Worksheet
    
    Set tmplWs = GetWs(TMPL)
    If tmplWs Is Nothing Then
        Err.Raise vbObjectError + 1000, , "템플릿 시트를 찾을 수 없습니다."
    End If
    
    newNm = UniqNm(PFX & nm)
    
    '// 템플릿 복사
    tmplWs.Copy After:=Worksheets(Worksheets.Count)
    Set MakeWs = ActiveSheet
    MakeWs.Name = newNm
End Function

'// 기본 정보 입력
Private Sub FillBase(ByVal ws As Worksheet, ByRef Data As AppData)
    With ws
        .Range(CEL_NM).Value = Data.nm
        .Range(CEL_JMN).Value = Data.jmn
        .Range(CEL_TEL).Value = Data.tel
        .Range(CEL_BUY).Value = Format$(Data.buyDt, "yy.mm.dd")
        .Range(CEL_APP).Value = KrFmt(Data.appDt)
        .Range(CEL_SIG).Value = Data.nm
    End With
End Sub

'// 세부 데이터 입력
Private Sub FillDtl(ByVal ws As Worksheet, ByVal coll As Collection)
    Dim row As Long, i As Long, rec As Object
    
    row = ROW_ST
    
    For i = 1 To coll.Count
        Set rec = coll(i)
        
        With ws
            .Range(COL_ITM & row).Value = rec("품목")
            .Range(COL_QTY & row).Value = rec("수량")
            .Range(COL_SUP & row).Value = rec("공급")
            .Range(COL_TAX & row).Value = rec("세액")
            .Range(COL_TOT & row).Value = rec("합계")
        End With
        
        row = row + 1
    Next i
End Sub

'// 합계 계산
Private Sub CalcTot(ByVal ws As Worksheet, ByVal cnt As Long)
    Dim endRow As Long
    
    If cnt = 0 Then Exit Sub
    
    endRow = ROW_ST + cnt - 1
    
    With ws
        .Range(COL_QTY & ROW_TOT).Value = _
            WorksheetFunction.Sum(.Range(COL_QTY & ROW_ST & ":" & COL_QTY & endRow))
        .Range(COL_SUP & ROW_TOT).Value = _
            WorksheetFunction.Sum(.Range(COL_SUP & ROW_ST & ":" & COL_SUP & endRow))
        .Range(COL_TAX & ROW_TOT).Value = _
            WorksheetFunction.Sum(.Range(COL_TAX & ROW_ST & ":" & COL_TAX & endRow))
        .Range(COL_TOT & ROW_TOT).Value = _
            WorksheetFunction.Sum(.Range(COL_TOT & ROW_ST & ":" & COL_TOT & endRow))
    End With
End Sub
'// 워크시트 안전 조회
Private Function GetWs(ByVal nm As String) As Worksheet
    On Error Resume Next
    Set GetWs = Worksheets(nm)
    On Error GoTo 0
End Function

'// 시트 존재 여부 확인
Private Function WsExist(ByVal nm As String) As Boolean
    WsExist = Not GetWs(nm) Is Nothing
End Function

'// 고유한 시트명 생성
Private Function UniqNm(ByVal base As String) As String
    Dim uniq As String, cnt As Long
    
    uniq = base
    cnt = 2
    
    Do While WsExist(uniq)
        uniq = base & "_" & cnt
        cnt = cnt + 1
    Loop
    
    UniqNm = uniq
End Function

질문답변 게시판의 최근 글

스크랩 완료