다. 복사할 범위로 여러 셀 지정후 붙여 넣을 범위에 붙여 넣는 매크로 작성
CopyRange가 2차원 배열이므로 2차원 배열에 맞게 매크로를 작성하였습니다.
Sub FilteredRange_Copy5()
Range("a2").Select
If Not ActiveSheet.FilterMode Then Selection.AutoFilter 2, "가락1*"
Set CopyRange = Application.InputBox("복사할 범위를 선택하세요.", Type:=8)
Set PasteRange = Application.InputBox("붙여넣을 첫번째 셀을 선택하세요.", _
Type:=8, Default:=Range("a2").Address(0, 0))
Set PasteRange = Range(PasteRange, PasteRange.End(xlDown)).SpecialCells(xlCellTypeVisible)
Row_limit = CopyRange.Rows.Count
Column_limit = CopyRange.Columns.Count
i = 1
For Each c In PasteRange
' 인덱스 값 i가 CopyRange 배열의 1차원 인덱스 값 상한보다 작거나 같다면
If i <= Row_limit Then
Range(CopyRange(i, 1), CopyRange(i, Column_limit)).Copy Destination:=c
Else
End
End If
i = i + 1
Next
End Sub
다. 매크로 설명
다른 부분은 이전 것과 같으므로 생략하고 다른 부분만 설명하겠습니다.
Row_limit = CopyRange.Rows.Count : 복사할 범위를 인쇄할 때는 Ubound함수를 사용했는데, 이번에는 행 수를 구하기 위해 Rows.Count 속성을 이용했습니다.
Column_limit = CopyRange.Columns.Count : 마찬가지로 Ubount함수가 아니라, 열 수를 구하기 위해 Columns.Count 속성을 이용했습니다.
If i <= Row_limit Then : i가 행 수보다 작거나 같은 동안만
Range(CopyRange(i, 1), CopyRange(i, Column_limit)).Copy Destination:=c :
i행 첫 번째 열부터 열의 개수에 해당하는 열까지 범위로 잡은 후 복사해서 붙여 넣을 범위에 하나씩 붙여 넣습니다.
여기서 1이란 1열이 아니라 복사할 범위중 첫 번째 열을 의미합니다.
라. 매크로 실행
개발 도구 - 매크로를 누른 후 매크로 목록에서 FilteredRange_Copy5를 선택하고 실행 버튼을 누르면
복사할 범위를 선택하라고 하는데, A25셀부터 K30셀까지 지정하고 확인 버튼을 누릅니다.
이번에는 붙여 넣을 첫 번째 셀을 선택하라고 하는데 A2셀을 클릭하고 확인 버튼을 누릅니다.
그러면 A25셀부터 K30셀의 내용이 2행부터 9행까지 화면에 보이는 행에만 붙여 넣어집니다.
마. 매크로 일부 수정
(1) 입력 대화상자 기본 값 지정
붙여 넣을 범위의 첫 번째 셀을 지정하는데 매번 A2셀을 클릭하는 것이 불편하므로 이를 수정하려면
Default값을 A2셀로 지정하면 됩니다.
Set PasteRange = Application.InputBox("붙여넣을 첫번째 셀을 선택하세요.", _
Type:=8, Default:=Range("a2").Address(0, 0))
A2셀의 주소를 지정해야 하므로 Address속성을 이용해야 하며,
Range("a2") 다음의 .Address(0, 0)을 지우면
기본 속성이 .Value이므로 A2셀의 값인 송파구가 입력됩니다.
바. A열에 빈 열을 삽입하고 실행할 경우
CopyRange(i, 1)이라고 줘서 A열일 경우만 적용되는지 확인하기 위해 A열을 클릭한 후 마우스 오른쪽 버튼을 눌러 삽입 메뉴를 눌러
빈 열을 삽입합니다.
개발 도구 - Visual Basic을 눌러 VB Editor를 실행한 후
Range(CopyRange(i, 1), CopyRange(i, 1).End(xlToRight))까지 범위를 잡은 후 마우스 오른쪽 버튼을 눌러 조사식 추가 메뉴를 클릭합니다.
그리고 나서 End키를 눌러 식 맨 오른쪽으로 이동한 후 범위에 해당하는 주소를 알기 위해 .address를 추가하고 확인 버튼을 누릅니다.
그리고, 조사식 창에서 마우스 오른쪽 버튼을 누른 후 식에 c.address를 입력하고 확인 버튼을 눌러 조사식 2개를 추가합니다.
그리고, 조사식의 값을 알기 위해 왼쪽 기둥을 눌러 중단점을 설정하고, 엑셀로 돌아가서
개발도구 - 매크로를 누른 후 FilteredRange_Copy5를 선택하고 실행버튼을 누릅니다.
그리고 나서 복사할 범위로 B25셀부터 L30셀까지 선택하고,
붙여 넣을 첫 번째 셀을 B2셀을 클릭해서 A2셀을 B2셀로 수정하고 확인 버튼을 누르면
VB Editor창이 열리면서 중단점에서 매크로 실행을 멈추고,
Range(CopyRange(i, 1), CopyRange(i, Column_limit)).Address의 값은 "$B$25:$L$25"로 표시되고,
c.Address의 값은 "$B$2"로 범위 내 첫 번째 셀을 기준으로 잘 표시됩니다.
CopyRange(i, 1)에서 1이 A열이 아니라 복사할 범위에서 첫 번째 열을 가리키므로 문제가 없는 것입니다.
Selection.AutoFilter 2, "가락1*"에서 2도 필터 영역의 두 번째 필드인 동명을 가리키기 때문에 빈 열이 삽입돼도 문제가 없습니다.
표준도구 모음에서 실행 아이콘을 누르면
정상적으로 복사 및 붙여 넣기가 실행됩니다.
3. 매크로 사용 통합 문서 저장
파일을 저장하기 위해 파일 - 저장을 누르면 아래와 같이 VB 프로젝트가 포함되어 있어서 매크로 제외 통합 문서에 저장할 수 없다고 하면서, VB 프로젝트 기능이 포함된 파일을 저장하려면 [아니요]를 누른 후 [파일 형식] 목록에서 매크로 사용 파일 형식을 선택하라고 합니다. 아래 부분의 아니요 버튼을 누르면
아래와 같은 화면이 나오는데, 파일 형식 부분을 누른 후 Excel 매크로 사용 통합 문서(*.xlsm)를 선택하고 저장 버튼을 누르면 에러 없이 저장됩니다.
'EXCEL - VBA' 카테고리의 다른 글
Range.AutoFilter Method(2) - Field, Criteria, Operator, SubField, VisibleDropDown (2) | 2023.03.12 |
---|---|
Range.AutoFilter Method(1) - expression.AutoFilter (2) | 2023.03.11 |
Range.AutoFilter Method(6) - 필터된 영역에 붙여넣기(2-1) (0) | 2023.03.09 |
Range.AutoFilter Method(5) - 필터된 영역에 붙여넣기(1) (0) | 2023.03.08 |
Range.AutoFilter Method(4) - SpecialCells(xlCellTypeVisible)(1) (2) | 2023.03.07 |