6월 13 2016
엑셀(EXCEL) – 일정행마다 제목행 추출과 일정행 아래의 특정 열들을 순차적으로 반복 이동
엑셀에서 VBA를 사용하는 경우 단순 반복 작업을 자동화하는 경우들에 유용한
방법입니다. 단순하게 반복하는 것과 논리적으로 반복하는 경우의 예를 아래에
들어보겠습니다. 처음에는 매크로 기록 기능으로 사용하다 조금 더 공부하시면
논리적으로 반복을 규칙화 시킬 수 있다고 봅니다.
http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3747083
엑셀 메크로 좀 도와주셔요ㅠㅠ
질문의 내용을 보시면 매크로 기록으로 한 번의 반복 작업을 기록하고 이것을
반복적으로 실행하는 법을 질문하셨는데 댓글에 DSFord님께서 반복매크로를
만들어 올려주셨는데 이것을 논리적 반복으로 바꾸어 보겠습니다.
아래의 두 매크로를 한 번 데이터를 500개 정도로 돌려봤는데 속도가 논리적 반복은
1초 정도인데 댓글의 방법으로 하니 150여초 정도 걸렸습니다. 숫자가 몇 천개되면
무시못할 정도의 시간과 쓸데없는? 작업을 하게됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
' 반복의 단순화 매크로 Sub another_method() Dim i As Integer For i = 4 To 555 Range("A20").Select Selection.Cut Cells(1, i).Select ActiveSheet.Paste Range("C21").Select Range("C21:C38").Select Selection.Cut Cells(2, i).Select ActiveSheet.Paste Rows("20:38").Select Selection.Delete Shift:=xlUp Next i End Sub ' 논리적 반복으로 인한 매크로 설명은 주석으로 다 달아놓았으니 잘 해석해서 사용하세요. Option Explicit Sub Unit_Row_To_Col_Move() Dim i As Integer, j As Integer, k As Integer Dim Unit As Integer, row_cnt As Integer Dim data_cnt As Long i = 0 ' list순서 j = 0 ' 행위치 k = 0 ' 단위 조직 위치 Unit = 19 ' 단위 컬럼당 데이터 갯수 ' 빨리 재배치를 할 경우, 채워지는 애니메이션을 보고 싶은 경우 주석 처리 Application.ScreenUpdating = False Sheets("Data").Select ' 처리할 영역의 행 숫자를 구함, 여러 방법이 있지만 이것으로 ... row_cnt = Application.CountA(Range("A1", Range("A65536").End(xlUp))) ' 핵심 코드, 돌머리 굴리느라 힘들었어요. 엉엉엉 ... For i = 20 To row_cnt ' 단위표의 크기에 따라 몫을 구해서 표의 위치 결정 k = i \ Unit - 1 ' 단위표의 몫을 구해 한 단위표의 위치를 정함 j = i - (Unit * (i \ Unit)) ' 정해진 위치에 제목과 데이터 뿌려주는 루틴, 잘 해석해 보세요. Cells(1, k + 4) = Cells(Unit * (k + 1) + 1, 1) Cells(j + 1, k + 4) = Cells(i + 1, 3) Next i ' 분리된 데이터 영역을 삭제 처리 Columns("A:C").EntireColumn.Delete ' 이 앞에 까지는 눈에 보이지 않음. 완료된 시트 업데이트해서 보기 Application.ScreenUpdating = True End Sub |
위의 제목행의 논리를 찾아내는 방법이 어려웠어요. ㅠㅠ
첨부된 그림의 그래프롤 보시면 이해하실 수 있을 것입니다.
지우고 난 열값의 초기화에 따른 제목행을 선정하는 1차함수 유도
y=19*x +1 , 계산을 해 보면 알겠지만 k=0 부터 시작하므로 +1을 함
Cells(1, k + 4) = Cells(Unit * (k + 1) + 1, 1)
위의 코드를 잘 이해하셨으면 대부분의 반복 작업을 처리할 Module하나를
얻었고 이 코드를 응용해서 많은 부분을 자동화 할 수 있을 것으로 보입니다.
그냥 20개 행을 바로 바로 이동하는 코드는 쉬운데 제목행과 데이터행을
단위 갯수로 다르게 분리하는 부분이 상당히 어려운 부분이었습니다.
파일 첨부 : 20160610-리스트 형식을 특정 행으로 분리하여 열에 붙여넣기
6월 13 2016
엑셀(EXCEL) – 피봇으로 정렬된 데이터를 Raw데이터로 분리해서 한셀에 합치기
엑셀이란 프로그램으로 데이터를 다루다 보면 대부분의 데이터들이 격자에 담겨 있어
이것은 (x,y)좌표처럼 어떤 함수로 다룰 수 있다는 것입니다. 그 함수를 찾아내는 것이
VBA를 잘 다루는 능력이라 봅니다.
http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3747908
데이터를 격자행으로 사람이 보기좋게 분리해 두었는데 컴퓨터가 보기좋게 행으로
분리하였다가 또 그것을 한 행으로 합치는 것이 위 질문의 요지입니다. 결국 두 액션은
하나로 뭉쳐 하나인 것처럼 보이지만 두 액션이 붙어있다는 것입니다.
잘 이해하시면 VBA실력과 데이터를 해석하는 눈이 높아질 것으로 보입니다.
예제보고 열심히 공부하세요.
첨부 파일 : 20160613-분리된 데이터 행으로 통합
By vinipapa • 무른모 • 0