::: 까만콩 빈이네 :::
까만콩 빈이네의 살아가는 이야기를 기록합니다
RSS
  • Home
20160617090613

6월 17 2016

엑셀(EXCEL) – 워크북의 모든 PivotTable을 버튼 하나로 모두 갱신하기

누군가에게는 참 간단한 일인데 누군가에게는 너무 절박하고 힘들 일들이
많은 것 같습니다. 어제 잠깐 질문에 간단하게 댓글로 알려드렸는데 이해가
힘드신 모양입니다.

피봇테이블이 8개라 순서대로 하다가 잠시 다른 생각과 다른 일들이 생기면
했는지 안했는지 헷갈리고 다시 한 번 더 갱신하면 되는데 귀찮아서, 바빠서
그냥 갱신하지 않은 피봇테이블을 보고서에 올리는 경우가 있는가 봅니다.
업무를 하다보면 잘 하다가도 실수를 하게 됩니다.

VBA Editor여시고(Alt+F11) 삽입 > 모듈 추가하세요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Explicit
 
Sub Auto_Pivot_Refresh()
 
Dim pt As PivotTable
Dim sht As Worksheet
' 속도를 위해 화면 갱신 중지
Application.ScreenUpdating = False
' 현재 워크북의 모든 시트를 돌며 모든 피봇테이블 갱신
For Each sht In Worksheets
For Each pt In sht.PivotTables
pt.RefreshTable
Next pt
Next sht
' 화면 갱신 활성화
Application.ScreenUpdating = True
 
End Sub

위에 설명보시면 이해하실 것입니다. 그리고 개발도구에서 디자인모드 활성화
옆의 삽입에서 ActiveX 명령 단추 하나 만드시고 그 명령단추 더블 클릭해서
아래 코드 붙여 주시고 저장하면 됩니다. 개발도구 디자인모드 해제!!!

1
2
3
4
5
Private Sub CommandButton1_Click()
Call Auto_Pivot_Refresh
End Sub

필요할 때마다 버튼 눌러주면 현재 워크북의 모든 피벗테이블 갱신합니다.
속도를 위해 화면 갱신을 하지 않고 처리하므로 그냥 버튼 눌러주시면 됩니다.

첨부 파일 : 20160617-Pivot자동 갱신

By vinipapa • 무른모 • 0

20160613162744

6월 13 2016

엑셀(EXCEL) – 피봇으로 정렬된 데이터를 Raw데이터로 분리해서 한셀에 합치기

엑셀이란 프로그램으로 데이터를 다루다 보면 대부분의 데이터들이 격자에 담겨 있어
이것은 (x,y)좌표처럼 어떤 함수로 다룰 수 있다는 것입니다. 그 함수를 찾아내는 것이
VBA를 잘 다루는 능력이라 봅니다.

http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3747908

데이터를 격자행으로 사람이 보기좋게 분리해 두었는데 컴퓨터가 보기좋게 행으로
분리하였다가 또 그것을 한 행으로 합치는 것이 위 질문의 요지입니다. 결국 두 액션은
하나로 뭉쳐 하나인 것처럼 보이지만 두 액션이 붙어있다는 것입니다.

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
Option Explicit
 
Sub Data_Merge()
 
Dim i As Integer, j As Integer, colcnt As Integer
Dim cel1 As Range, Ref1st As Range
Dim cel2 As Range, Ref2nd As Range
Set Ref1st = Range("A2", Range("A65536").End(xlUp))
Set Ref2nd = Range("B2", Range("B65536").End(xlUp))
' 화면 갱신 중지
Application.ScreenUpdating = False
' 순환하고자 하는 컬럼의 갯수를 세어줌, 적은 경우 직접 세어서 입력
colcnt = Application.CountA(Range("C1", Range("C1").End(xlToRight)))
For Each cel1 In Ref1st ' 첫번째 영역 순환
If Len(cel1) > = Then ' 첫번째 영역이 비어있지 않으면 다음 영역 순환
For Each cel2 In Ref2nd ' 두번째 영역 순환
For i = 0 To colcnt - 1 ' 칼럼 위치별 순환
Cells(j + 1, 7) = cel1 & "-" & cel2 & "-" & Cells(1, i + 3)
Cells(j + 1, 8) = cel2.Offset(0, i + 1)
j = j + 1 ' 컬럼을 증가시킨만큼 행을 이동해 줌
Next i
Next cel2
End If
Next cel1
' 화면 갱신
Application.ScreenUpdating = True
 
End Sub

잘 이해하시면 VBA실력과 데이터를 해석하는 눈이 높아질 것으로 보입니다.
예제보고 열심히 공부하세요.

첨부 파일 : 20160613-분리된 데이터 행으로 통합

By vinipapa • 무른모 • 0

20160613152543

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-리스트 형식을 특정 행으로 분리하여 열에 붙여넣기

By vinipapa • 무른모 • 0 • Tags: 엑셀(EXCEL), 특정열 분리 추출, 특정행

«< 17 18 19 20 21 >»

카테고리

  • 매킨토시 (261)
    • 굳은모 (73)
    • 무른모 (194)
  • 빈이네 (305)
    • 가족들 (109)
    • 까만콩 (60)
    • 엄마아빠 (131)
  • 잡동사니 (175)
    • 수다떨기 (37)
    • 정 보 (127)
    • 책읽기 (11)

그 밖의 기능

  • 로그인
  • 글 RSS
  • 댓글 RSS
  • WordPress.org

태그

AirPlay AirPrint Apple BootCamp bundle Database Design Dock Dropbox Edit Event Excel free iPad iPhone iTunes Limitted Free Mac Macbook Mac Bundle MacJournal Mac OSX Macupdate MobileMe OCR Pebble safari Sale share Snow Leopard software Tip tweet Twitter Update Windows 구입 나들이 맥 무료 빈이 업데이트 엑셀 엑셀(EXCEL) 팁
  • 2026 새로운 봄
  • 29년 11개월 회사를 그만 두면서…
  • 2024 윤석열 탄핵 집회 참석
  • 맥 마이그레이션 중…
  • 동백

↑

© ::: 까만콩 빈이네 ::: 2026
Powered by WordPress • Themify WordPress Themes