VBA 관련 문의드립니다!

VBA
작성자
레벨업 김말이
작성일
2023-11-05 16:51
조회
210
엑셀버전 : 엑셀2016

운영체제 : 윈도우11

질문 요약 : 1. (Sheet1 기본양식)
2. "A부서 Sheet" + "B부서 Sheet"
3. 결과값 Sheet 같이 나올수 있게 VBA 코드 작성 부탁드립니다. ㅠ

안녕하세요

회사에서 업무중에 문의사항이 있어서 이렇게 작성하게 되었습니다.

 

각부서마다 옷사이즈 주문을 받아서 집계하는 일을 하고 있습니다.

하지만 각부서마다 다른 양식을 사용하고 있습니다.

이러다보니, 하나의 양식으로 통일하는것이 쉽지 않습니다 (각부서에 요청하였지만, 잘 안되네요...)

그래서 각부서의 다른 양식 => 하나의 양식으로 집계할 수 있는 방법을 문의드리고자 합니다.

엑셀 고수분들께 도움 부탁드립니다 ㅠ

신고
스크랩
공유
회원등급 : 4레벨
포인트 : 212 EP
총질문 : 6 개 (마감율 : 100%)
채택답변 : 0 개
전체 13

  • 2023-11-06 12:01

    @레벨업 김말이 님 감사합니다.


  • 2023-11-06 14:24

    @레벨업 김말이 님 첨부 파일 참조

    A,B,C 각 시트 필드명과 순서 상이

    매크로 실행-->통합시트 1행 제외 모든 행 삭제-->2초간 정지-->통합 작업

    시트-통합.png

    첨부파일 : 시트-통합.xlsm


    • 2023-11-12 23:04

      @김재규 님 감사합니다 여전히 VBA 어렵게만 느껴지지만 많은 것들을 배울 수 있는 시간이었어요!


  • 2023-11-06 16:30

    @레벨업 김말이 님 좋은 정보 감사합니다.


  • 2023-11-05 18:09

    @레벨업 김말이 님 아래 코드를 사용하면 될겁니다.

    https://www.oppadu.com/엑셀-vba-시트-합치기-시트병합-프로그램-예제/

    코드를 모두 이해하셔도 좋지만, 유저폼이 필요 없다면 여기만 보셔도 될겁니다

    For i = 0 To Me.lstSheet.ListCount - 1
        If Me.lstSheet.Selected(i) = True Then
            Set WS = WB.Worksheets(Me.lstSheet.List(i))
            With WS
                '// 시트의 마지막 행/열 받아오기에 대한 자세한 설명은 아래 링크를 참고하세요.
                '// https://www.oppadu.com/엑셀-사전/엑셀-vba-마지막-셀-찾기-마지막-행-찾기/
                endRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                endCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
                Set Rng = .Range(.Cells(2, 1), .Cells(endRow, endCol))
                Rng.Copy newWS.Cells(j, 1)
                j = j + Rng.Rows.Count
            End With
        End If
    Next

    개개인마다 처한 상황이 모두 다르기때문에.. 직접 공부해서 만들어보는게 가장 좋습니다

     


    • 2023-11-12 23:03

      @꾸루꾸루루 님 감사하빈다. 덕분에 VBA공부하는데 도움이 많이 되었습니다!!


  • 2023-11-05 21:22
    채택된 답변

    @레벨업 김말이 님 변형된 시트의 제목을 모두 정리하는 작업은 해야 합니다. -> 코드에서 fNames에 기록

    Option Explicit
    
    Sub MergeData()
        Dim ws As Worksheet, fNames As Variant, iNext As Long, Col As Variant, vCopy As Variant
        Dim sh As Worksheet, vData As Variant, vTitle As Variant, iLast As Long, C As Long, R As Long
        
        '// 각 부서 양식에서 사용한 필드명의 변형들을 결과값에 표시되어야 하는 열 순서대로 모두 나열합니다.
        fNames = Array("부서|담당부서|DEPT", "성함|이름|성명", "사번|사원번호|개인번호", _
                       "휴대폰1|개인연락처", "동복|상품명", "사이즈명|옵션사이즈", _
                      "수량|개수", "금액|구매금액")
        Set ws = Worksheets("결과값")
        ws.AutoFilterMode = False
        
        For Each sh In Worksheets
            If sh.Name = ws.Name Then GoTo NEXT_SH
            sh.AutoFilterMode = False
            iLast = sh.Cells(sh.Rows.Count, "E").End(xlUp).Row
            If iLast < 2 Then GoTo NEXT_SH
            
            iNext = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row + 1
            
            vTitle = sh.Range("E1:L1").Value2
            vData = sh.Range("E2:L" & iLast).Value2
            For C = LBound(vTitle, 2) To UBound(vTitle, 2)
                Col = Application.Match("*" & vTitle(1, C) & "*", fNames, 0)
                If Not IsError(Col) Then
                    vCopy = Application.Index(vData, 0, C)
                    For R = LBound(vCopy) To UBound(vCopy)
                        '// 갑이 숫자형 '문자열'일 때 숫자로 변경되지 않도록 수정
                        If TypeName(vCopy(R, 1)) = "String" And IsNumeric(vCopy(R, 1)) Then
                            vCopy(R, 1) = "'" & vCopy(R, 1)
                        End If
                    Next
                    ws.Cells(iNext, Col + 4).Resize(UBound(vData, 1), 1) = vCopy
                Else
                    '// 열 제목이 fNames에서 찾을 수 없으므로 복사하지 않음
                End If
            Next C
            
    NEXT_SH:
        Next sh
    
    End Sub
    

     

    첨부파일 : 문의사항.xlsm


    • 2023-11-12 23:03

      @원조백수 님 감사합니다 !! 덕분에 많이 배웠어요...

      다른곳에서도 적용하고 싶어서, 코딩을 바꿔서 적용해보고 싶었는데... 잘안되네요...

      코딩이 정말 쉽지 않다는걸 매번 느끼게 됩니다. 감사합니다.


    • 2023-11-19 03:27

      @원조백수 님 안녕하세요~ 원조백수님

      위의 VBA코드를 다른곳에도 적용하고 싶은데, 반복해서 디버그가 생겨서 문의드립니다.ㅠ

      위의 요청했던 범위는 vTitle = sh.Range("E1:L1").Value2 인데. 이번에는 vTitle = sh.Range("A1:L1").Value2

      범위를 넓혔어요 그런데... 다른부분 코드 다 수정했다고 생각했는데 디버그가 나타나네요...ㅠㅠㅠ

      번거롭겠지만 vba 코드 다시한번 확인해주실수 있으실까요?

      ======================================================================

      Sub MergeData()
      Dim ws As Worksheet, fNames As Variant, iNext As Long, Col As Variant, vCopy As Variant
      Dim sh As Worksheet, vData As Variant, vTitle As Variant, iLast As Long, C As Long, R As Long

      '// 각 부서 양식에서 사용한 필드명의 변형들을 결과값에 표시되어야 하는 열 순서대로 모두 나열합니다.
      fNames = Array("CS상태", "NO", "택배사", "송장번호", "부서|담당부서|DEPT", "성함|이름|성명", "사번|사원번호|개인번호", _
      "휴대폰1|개인연락처", "동복|상품명", "사이즈명|옵션사이즈", _
      "수량|개수", "금액|구매금액")

      Set ws = Worksheets("결과값")

      For Each sh In Worksheets
      If sh.Name = ws.Name Then GoTo NEXT_SH
      sh.AutoFilterMode = False
      iLast = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
      If iLast < 2 Then GoTo NEXT_SH

      iNext = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

      vTitle = sh.Range("A1:BX1").Value2
      vData = sh.Range("A2:BC" & iLast).Value2
      For C = LBound(vTitle, 2) To UBound(vTitle, 2)
      Col = Application.Match("*" & vTitle(1, C) & "*", fNames, 0)
      If Not IsError(Col) Then
      vCopy = Application.Index(vData, 0, C)
      For R = LBound(vCopy) To UBound(vCopy)
      '// 갑이 숫자형 '문자열'일 때 숫자로 변경되지 않도록 수정
      If TypeName(vCopy(R, 1)) = "String" And IsNumeric(vCopy(R, 1)) Then
      vCopy(R, 1) = "'" & vCopy(R, 1)
      End If
      Next
      ws.Cells(iNext, Col + 4).Resize(UBound(vData, 1), 1) = vCopy
      Else
      '// 열 제목이 fNames에서 찾을 수 없으므로 복사하지 않음
      End If
      Next C

      NEXT_SH:
      Next sh

      End Sub

      
      					
      										
      											

      첨부파일 : 문의사항-231119.xlsm


      • 2023-11-19 10:24

        @레벨업 김말이 님 대체적으로 코드를 이해하고 있지 않으므로 최종 양식으로 정리를 해 주세요.
        표제목에 줄바꿈이 있는것과 없는 것은 다른 것입니다.

        Sub MergeData()
            Dim ws As Worksheet, fNames As Variant, iNext As Long, Col As Variant, vCopy As Variant
            Dim sh As Worksheet, vData As Variant, vTitle As Variant, iLast As Long, C As Long, R As Long
            
            '// 각 부서 양식에서 사용한 필드명의 변형들을 결과값에 표시되어야 하는 열 순서대로 모두 나열합니다.
            fNames = Array("CS상태", "NO", "택배사", "송장번호|송장" & Chr(10) & "번호", "부서|담당부서|DEPT", "성함|이름|성명", "사번|사원번호|개인번호", _
                           "휴대폰1|개인연락처", "동복|상품명", "사이즈명|옵션사이즈", _
                          "수량|개수", "금액|구매금액")
        
        
            Set ws = Worksheets("결과값")
            
            For Each sh In Worksheets
                If sh.Name = ws.Name Then GoTo NEXT_SH
                sh.AutoFilterMode = False
                iLast = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
                If iLast < 2 Then GoTo NEXT_SH
                
                iNext = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
                
                vTitle = sh.Range("A1:BX1").Value2
                vData = sh.Range("A2:BC" & iLast).Value2
                For C = LBound(vTitle, 2) To UBound(vTitle, 2)
                    '// vTitle과 vData에 실제로 자료가 있는 부분보다 넓게 설정했으므로 빈셀에 대한 처리 필요
                    Col = CVErr(xlErrNA)
                    If vTitle(1, C) <> "" Then Col = Application.Match("*" & vTitle(1, C) & "*", fNames, 0)
                    If Not IsError(Col) Then
                        vCopy = Application.Index(vData, 0, C)
                        For R = LBound(vCopy) To UBound(vCopy)
                            '// 갑이 숫자형 '문자열'일 때 숫자로 변경되지 않도록 수정
                            If TypeName(vCopy(R, 1)) = "String" And IsNumeric(vCopy(R, 1)) Then
                                vCopy(R, 1) = "'" & vCopy(R, 1)
                            End If
                        Next
                        '// 시작위치를 Col + 0으로 조정해야 함... A열부터는 +0, E부터는 +4
                        ws.Cells(iNext, Col + 0).Resize(UBound(vData, 1), 1) = vCopy
                    Else
                        '// 열 제목이 fNames에서 찾을 수 없으므로 복사하지 않음
                    End If
                Next C
                
        NEXT_SH:
            Next sh
        
        End Sub

         

        첨부파일 : 문의사항-231119.xlsm


        • 2023-11-19 23:24

          @원조백수 님 이렇게 도움을 주셔서 감사합니다!!

          실은 제가 마켓정보를 하나로 취합하는 역할을 하고 있습니다...

          보내주신 코드를 활용하여, 마켓정보를 하나로 취합하려고 하는데, 다시 코드 디버깅이 나오네요 ㅠ

          범위는 vTitle = sh.Range("A1:BX1").Value2 동일하게 범위를 잡고, fNames = Array = 할당 명칭을 그대로 넣었는데도 디버깅이 나오는 이유가 무엇일까요?ㅠ 재차 문의드려서 번거롭게 해드려 죄송합니다. 혹시라도 괜찮으시면 다시한번 문의드리고자 합니다.ㅠㅠ

          첨부파일 : 문의사항-231120.xlsm


          • 2023-11-20 09:43

            @레벨업 김말이 님 VBA 코드를 전혀 이해하지 못하고 계시므로,
            추가로 답을 드리는 게 의미가 없을 것 같아서
            요청하신 검토는 진행하지 않겠습니다.


            • 2023-11-20 10:49

              @원조백수 님 알겠습니다. VBA 공부를 어떠한 방식으로 해야할지 고민해야할 시점인가 봅니다!!

              무튼 여러가지 문의사항 좋은 답변주셔서 감사합니다!


전체 13,306
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (235)
오빠두엑셀 | 2022.02.03 | 추천 514 | 조회 259424
오빠두엑셀 2022.02.03 514 259424
공지사항 문서서식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (197)
오빠두엑셀 | 2021.10.28 | 추천 280 | 조회 17669
오빠두엑셀 2021.10.28 280 17669
64367 VBA
New 특정셀에 여러 변수 값을 대입하여 나오는 계산 값을 변수에 맞게 한번에 출력되게 하는 방법이 있을까요?? 엑셀파일첨부파일
박재관 | 16:01 | 추천 0 | 조회 2
박재관 16:01 - 2
64366 문서서식
New 전체인쇄와 시트1개 인쇄시 이미지 품질 저하문제 첨부파일 (1)
코코마 | 15:23 | 추천 0 | 조회 12
코코마 15:23 - 12
64360 함수/공식
New 각 열의 텍스트를 비교하여 일치율에 따라 관련열 값 가져오기 첨부파일 (1)
요코하마박 | 13:50 | 추천 0 | 조회 23
요코하마박 13:50 - 23
64359 구글시트
New 엑셀 또는 구글시트 - 다른시트 데이터의 새로운값만 순차적으로 가져오는방법.. (3)
myyh**** | 13:42 | 추천 0 | 조회 21
myyh**** 13:42 - 21
64355 함수/공식
New sumifs 문의 드립니다. (2) 답변완료
sarangh**** | 12:43 | 추천 0 | 조회 21
sarangh**** 12:43 - 21
64353 함수/공식
New 엑셀 수식이 안 먹어요~ 엑셀파일 (2)
안녕 | 11:40 | 추천 0 | 조회 34
안녕 11:40 - 34
64352 VBA
New 명령단추 클릭시 색상변경 엑셀파일첨부파일 (1)
본아이디 | 11:39 | 추천 0 | 조회 20
본아이디 11:39 - 20
64351 VBA
New Sendkey 초기화 관련 문의
임정호 | 11:27 | 추천 0 | 조회 18
임정호 11:27 - 18
64340 함수/공식
New 셀 값을 변경하는 수식 사용 중에 작동이 안돼서 문의드립니다. 첨부파일 (4)
슈바츠론 | 09:35 | 추천 0 | 조회 26
슈바츠론 09:35 - 26
64333 함수/공식
New 실시간 데이터 연동 방법 좀 알려주실 수 있나요?? (2)
dfgkdflglkdf | 00:27 | 추천 0 | 조회 40
dfgkdflglkdf 00:27 - 40
64329 함수/공식
New IF와 VLOOKUP을 같이써서 처리를 해야하는 셀인데 어떻게 해야 맞는지 모르겠네요 ㅠㅠ... 첨부파일 (1)
fkdn**** | 2023.11.29 | 추천 0 | 조회 51
fkdn**** 2023.11.29 - 51
64327 함수/공식
New 몇주째 도저히 모르겠습니다ㅜㅜ 일별/주간/월별 데이터 불러올 함수 알려주실분 꼭 부탁드립니다. 엑셀파일 (5) 답변완료
shin**** | 2023.11.29 | 추천 0 | 조회 83
shin**** 2023.11.29 - 83
64326 구글시트
New 엑셀이나 구글시트에서 특정 데이터를 입력하면 표시,금지 할수있는 방법을 알수있을까요 ? (2)
다운이남편 | 2023.11.29 | 추천 0 | 조회 37
다운이남편 2023.11.29 - 37
64325 함수/공식
New 엑셀함수관련 문의드립니다 기초적인부분이지만 해결방법이 궁금합니다 첨부파일 (3) 답변완료
gnsdlgns | 2023.11.29 | 추천 0 | 조회 46
gnsdlgns 2023.11.29 - 46
64320 파워쿼리/피벗
New 파워쿼리 엑셀 파일 불러오기 액세스 거부 ㅜㅠ 첨부파일 (1)
방글당근 | 2023.11.29 | 추천 0 | 조회 38
방글당근 2023.11.29 - 38
64317 VBA
New 집계함수를 반영하니 계산시간이 많이 걸립니다 다른방법이 없는지요 엑셀파일 (3)
슈토파이터 | 2023.11.29 | 추천 0 | 조회 57
슈토파이터 2023.11.29 - 57
64316 문서서식
New 조건부서식 하나가 막히는 데 도와주세요 첨부파일
수캄 | 2023.11.29 | 추천 0 | 조회 47
수캄 2023.11.29 - 47
64312 함수/공식
New 특정 텍스트 추출 엑셀파일첨부파일 (4)
ggplay**** | 2023.11.29 | 추천 0 | 조회 69
ggplay**** 2023.11.29 - 69
64311 함수/공식
New 함수 문의 첨부파일 (1)
비갠오후 | 2023.11.29 | 추천 0 | 조회 48
비갠오후 2023.11.29 - 48
64310 함수/공식
New 기간 중복을 제외하고 주당 사용 일수 계산 문의드립니다. 엑셀파일첨부파일 (2)
함수시르미 | 2023.11.29 | 추천 0 | 조회 29
함수시르미 2023.11.29 - 29
64294 함수/공식
New 표준편차 계산시 특정월의 데이터만 계산하고 싶습니다 엑셀파일첨부파일 (2)
전설 | 2023.11.29 | 추천 0 | 조회 37
전설 2023.11.29 - 37
64292 함수/공식
New 다중조건으로 다른문서 데이터 가져오기 엑셀파일 (4) 답변완료
abc472091z | 2023.11.29 | 추천 0 | 조회 50
abc472091z 2023.11.29 - 50
64287 차트/그래프
New 자동 생성/변경 차트 문의 첨부파일 (1)
나짱보이 | 2023.11.28 | 추천 0 | 조회 42
나짱보이 2023.11.28 - 42
64286 함수/공식
New SUMIF 함수 문의드립니다. !! 첨부파일 (2)
김태훈 | 2023.11.28 | 추천 0 | 조회 61
김태훈 2023.11.28 - 61
64281 VBA
New 거래처 조회 엑셀파일 (7)
슈토파이터 | 2023.11.28 | 추천 0 | 조회 75
슈토파이터 2023.11.28 - 75
64278 피벗테이블
New 피벗테이블를 이용하여 차트 만들 때 평균을 표시하고 싶습니다~! 엑셀파일첨부파일 (5) 답변완료
| 2023.11.28 | 추천 0 | 조회 55
2023.11.28 - 55
64266 함수/공식
New 엑셀 수식 수정 어떻게 해야될까요?? 엑셀파일 (1)
편안하게 | 2023.11.28 | 추천 0 | 조회 65
편안하게 2023.11.28 - 65
64263 기능/도구
New 인쇄 영역 음영 구분하여 자동 설정 할 수 있는 방법이 있을까요? 첨부파일 (2) 답변완료
르밍 | 2023.11.28 | 추천 0 | 조회 43
르밍 2023.11.28 - 43
64257 함수/공식
New DATA가 열방향일때의 월별 DATA를 구하고 싶습니다. 엑셀파일첨부파일 (3)
전설 | 2023.11.28 | 추천 0 | 조회 52
전설 2023.11.28 - 52
64251 함수/공식
New 맨 밑 행부터 몇 개까지 같은 값인지 알고싶습니다 엑셀파일첨부파일 (6) 답변완료
노창복 | 2023.11.27 | 추천 0 | 조회 83
노창복 2023.11.27 - 83