• 카테고리

    질문 & 답변
  • 세부 분야

    오피스

  • 해결 여부

    미해결

파일시트 취합하기 문의

22.02.22 20:04 작성 조회수 243

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서안녀비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요?
강의 듣고 실무에 적용하다가 오류가 나서 문의드립니다.
 
 
Sub 시트취합() Dim 시트 As Worksheet For Each 시트 In Worksheets If 시트.Name <> "전체" Then 시트.Range("A2", 시트.Range("A2").End(xlToRight).End(xlDown)).Copy Sheets("전체").Range("A1").End(xlDown).Offset(1, 0).PasteSpecial End If Next End Sub
 
를 활용하려는데요


데이터는 인터넷에서 다운 받은 자료고요
 
예시로 파일 올립니다.
 
문의드립니다

제가 시트 취합하려는 데이터 이렇게 중간 셀에 값이 없는 경우 ctrl+shrft+↓ 누르면 열 12까지 밖에 드래그가 안됩니다.
 
그래서
 

이렇게 되고요

시트도 여러개가 있는데 1시트+일부시트 내용만

전체시트에 복사 됩니다.

오류 해결 방법을 알 수 있을까요?!

시트별 열너비 행 높이가 달라서 이러는 건가요?!

확인 부탁드립니다.

답변 2

·

답변을 작성해보세요.

0

<질문1>

Sheets("전체").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial   
'마지막 행 번호에서 ctrl + Shift + ↑를 눌렀을때 이동하는 행 위치에 붙여넣기

이렇게 하게되면 예를 들어 2월1일 시트 내용이 붙여지고 나서 2월 2일 시트내용이 윗행이 되는게 아닐까요??

<답변>
그렇지는 않습니다. 
Cells(Rows.Count, "A").End(xlUp) 코드가 데이터가 입력된 마지막 행 위치를 찾습니다. 
그다음 Offset(1, 0)로 아래쪽으로 한 칸 이동하여 붙여넣기를 하기 때문에 데이터가 차곡차곡 쌓이게 됩니다.

 

<질문2>

전체시트에서 필드가 2행부터 나열되어 있습니다.
만약에 전체 시트가 제목행 없이 1행 부터 필드명이 있는 행인 경우

 

Sheets("전체").Range("A1").End(xlDown).Offset(1, 0).PasteSpecial
이 아닌 Sheets("전체").Range("A1").End(xlDown).PasteSpecial
이렇게 Offset(1, 0)를 제거하면 되는건가요?!

<답변>
Sheets("전체").Range("A1").End(xlDown).PasteSpecial 코드로 붙여넣기 하면
최초 1번은 가능한데, 반복을 하면서 2번째 시트 데이터도 A1셀에 붙여넣기를 하게 됩니다.

그래서 If 조건문을 추가하면 좋습니다.
If
Sheets("전체").Range("A1")="" Then
Sheets("전체").Range("A1").End(xlDown).PasteSpecial
Else
   Sheets("전체").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial   
EndIf

이렇게 사용해보세요.
IF조건문에서 A1셀이 빈 셀이면 A1셀에 붙여넣기를 하고
빈 셀이 아니면 2번째 붙여넣기가 되므로 원래의 붙여넣기 코드를 실행하게 합니다.

 

고은숙님의 프로필

고은숙

질문자

2022.02.25

네 그러면 시트가 2개 이상일때는 필드를 2행에 놓고 하는게 좋은 방법인거죠?!

 

 

그리고 자세히 알려주셔서 감사합니다!

 

회사에서 실무하기에 너무 편합니다

 

선생님 혹시 이거는 제가 평소에 궁금한게 있어서요

 

예를 들어

품목이 100가지가 있는데 거래명세서에 그 품목명을 입력해야합니다.

 

그런데 기존시트는 동일한 이름만 vlookup으로 찾아와야 해서요

혹시 검색엔진처럼

가문이라는 글자를 입력하면 아래 스크롤바롤 가문, 가문의 영광, 남가문 등 비슷한게 나올 수 있을까요?!

 

데이터유효성 검사는 선택만 가능하지 입력해서 그 아래 하단에 비슷한 내용을 선택할 수는 없어서 여쭤봅니다

이러한 기능은 셀에 유효성 검사로는 불가능하고
[개발 도구]-[삽입]-[ActiveX 컨트롤]-[콤보상자]를 이용하여 [사용자 정의 폼]에서 [콤보 상자]로 직접 만들어야 합니다.

그리고 검색작업을 모두 VBA로 직접 코딩해야 하구요. 

 

0

안녕하세요? 

위의 코드로 복사 붙여넣기를 할 때는 A2셀에서 ctrl + Shift + 방향키를 눌렀을때 선택되는 범위를 복사할 수 있습니다. A열이나 2행을 기준으로 빈 셀이 있으면 그 전 셀까지만 선택하는 코드입니다.

그래서  아마 일부 데이터는 복사가 되지 않을 겁니다.

그리고 오류 메시지의 원인은 어떠한 시트는 복사할 때 시트 전체를 복사하고 있는듯합니다.

해결 방법은 각 시트의 데이터가 어떠한 형태로 되어 있는지 파악하여 적절한 코드로 변경해야 합니다.

우선 아래의 코드로 다시 변경하여 실행해보십시오.
그래도 오류가 발생하면 예제 파일을 저에게 메일로 보내주세요(onwings@hanmail.net)
시트의 내용을 보고 적절한 코드를 다시 찾아보겠습니다.

 

--------------------------------------------------------------------------------------

Sub 시트취합()

Dim 시트 As Worksheet

For Each 시트 In Worksheets

If 시트.Name <> "전체" Then

시트.UsedRange.Offset(1, 0).Copy    '사용되고 있는 셀 영역들 모두 복사(첫 행은 제외)

Sheets("전체").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial   
'마지막 행 번호에서 ctrl + Shift + ↑를 눌렀을때 이동하는 행 위치에 붙여넣기

End If

Next

End Sub

고은숙님의 프로필

고은숙

질문자

2022.02.23

네 해결되었습니다. 
그런데 이해가 안되는 부분이 있습니다.

 

Sheets("전체").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial   
'마지막 행 번호에서 ctrl + Shift + ↑를 눌렀을때 이동하는 행 위치에 붙여넣기

 

이렇게 하게되면 예를 들어 2월1일 시트 내용이 붙여지고 나서 2월 2일 시트내용이 윗행이 되는게 아닐까요??

그리고 강의 예제파일(지점별 /화장품)

전체시트에서 필드가 2행부터 나열되어 있습니다.

만약에 전체 시트가 제목행 없이

1행 부터 필드명이 있는 행인 경우

 

Sheets("전체").Range("A1").End(xlDown).Offset(1, 0).PasteSpecial

이 아닌 Sheets("전체").Range("A1").End(xlDown).PasteSpecial

이렇게 Offset(1, 0)를 제거하면 되는건가요?!