매월 데이타를 분석해서 표와 그래프를 만드는 작업을 합니다.
데이타는 사내프로그램에서 엑셀로 다운받아서 정제합니다.
결과값 1. 각 진료과별: 1) 월별 응급회신율 2) 비응급회신율 3)총회신율
2. 월 을급회신률, 비응급회신률 , 총회신률
3. 분기별 응급회신률, 비응급회신률 , 총회신률
이렇게 필요합니다.
매월 데이타를 분석해서 표와 그래프를 만드는 작업을 합니다.
데이타는 사내프로그램에서 엑셀로 다운받아서 정제합니다.
결과값 1. 각 진료과별: 1) 월별 응급회신율 2) 비응급회신율 3)총회신율
2. 월 을급회신률, 비응급회신률 , 총회신률
3. 분기별 응급회신률, 비응급회신률 , 총회신률
이렇게 필요합니다.
파일 다운 받아서 보니 엄청 복잡해 보이네요. 오빠두님이 강조 하듯이 RawData가 중요한데 말이죠~ 일단 아래처럼 6개 항목만 추출 후 다른 필요한 정보 몇가지를 수식으로 완성
회신과/ 월/ 응급의뢰/ 24시간내회신/ 비응급의뢰/ 48시간내회신/
위 파일에서 가져오려면 이미 복잡한 작업을 하셔야 되서 일단 RawData 가져오는 첫걸음부터 시작 해봐야 될꺼 같네요. (위 파일에서 추출 하려니 헤더가 보기에는 같이보여도 다르게 입력된것도 있어서 2가지 방법으로 추출했네요)
"사내프로그램에서 엑셀로 다운받아서 정제합니다." 이렇게 써 있는데. 사내프로그램에서 엑셀로 저장한 파일을 올려줘보세요. (이것으로 추출 하면 좀 쉬울 듯 싶네요)
월단위로 저장해서 가져 오시는건지? 아무튼 6가지 필요한 정보만 각셀에서 매크로 이용해서 RawData 추출한 다음에 그것을 이용해 원하시는 형식으로 피벗 테이블을 수동 또는 매크로로 만들어서 실행시키고 차트까지 삽입해서 자동화 하시면 지금보다는 좀 쉽게 하실꺼 같네요.
시트 하나에 많을 걸 넣다보니 가독성이 떨어지는데 큰 항목별(응급/비응급)로 나눠서 관리 하는건 어떨지요?
작업 해봤던 파일 참조 해보세요. 여러가지 종류의 피벗 테이블을 생성 시켜 놨어요.
(전체 시트만 놔두고 다른 시트는 다 삭제하고 전체 시트위에서 A 매크로, RawData 시트에서 B 매크로 실행) - 차트도 추가 해봤어요~
실무에서 엑셀을 써본적이 거의 없는 초보라서 원하시는 내용도 파악하기 힘드네요
매크로 파일이라서 다운 받고 아래처럼 작업 해야 사용 가능합니다.
파일을 마우스 오른쪽 버튼으로 클릭 후[속성]을 선택합니다.
일반 탭 하단에 있는 보안 항목의[차단 해제]체크박스를 클릭 후[확인]을 누릅니다.
안녕하세요~


1. 이전 질문에 대해
코딩 작업을 하는 중에 답변이 없으셔서 중단했다가
다시 코딩했습니다.
한번 살펴보세요.
2. 첨부파일을 실행하면 리본메뉴에 버튼이 자동으로 생성됩니다.
※ 매크로를 처음 사용해 보신다면,
인터넷에서 다운받은 매크로 파일은
보안상 기본적으로 차단되어 있어서, 바로 실행하면 매크로가 막히는 경우가 많습니다.
아래와 같이 조치하세요.
[파일 속성에서 차단 해제]
파일을 다운로드 받은 폴더에서 파일 → 마우스 오른쪽 클릭 → 속성
“차단 해제” 체크 후 [확인]
[매크로 보안 설정 확인]
Excel 실행 → [파일] → [옵션] → [보안센터] → [보안센터 설정] → [매크로 설정]
"VBA 매크로 사용" 체크 후 [확인]
(선택)[신뢰할 수 있는 위치에 저장]
자주 쓰는 매크로 파일이라면,
[파일] → [옵션] → [보안센터] → [신뢰할 수 있는 위치]
매크로 파일이 있는 폴더를 추가 후, 그 폴더 안에서 매크로 파일을 실행하면 항상 허용이 됩니다.
역시 전문가~ 멋지네요.
초보가 3일 동안 제미나이와 씨름하면서 만든것도 봐주세요~
최대한 PDF 보고서와 비슷하게 하려고 노력했어요.
아래 제안해주신 내용 수정하면서 다른 문제점 발견해서 파일 다시 올립니다.
감사합니다~
네,
아주 잘 코딩하셨네요^^
다만,
이 부분은 한 행당 셀을 12번 호출을 해서
n행이면 12* n 번 호출을 합니다.
' 데이터 출력 Dim rowIdx As Long: rowIdx = 2: Dim k As Variant For Each k In dic.Keys With wsTo .Cells(rowIdx, 1).Value = dic(k)(0) .Cells(rowIdx, 2).Formula = "=INT((SUBSTITUTE(C" & rowIdx & ",""월"","""")-1)/3)+1 & ""분기""" .Cells(rowIdx, 3).Value = val(Replace(dic(k)(1), "월", "")) & "월" .Cells(rowIdx, 4).Value = dic(k)(2) .Cells(rowIdx, 5).Value = dic(k)(3) .Cells(rowIdx, 6).Formula = "=IF(D" & rowIdx & "=0,0,E" & rowIdx & "/D" & rowIdx & ")" .Cells(rowIdx, 7).Value = dic(k)(4) .Cells(rowIdx, 8).Value = dic(k)(5) .Cells(rowIdx, 9).Formula = "=IF(G" & rowIdx & "=0,0,H" & rowIdx & "/G" & rowIdx & ")" .Cells(rowIdx, 10).Formula = "=D" & rowIdx & "+G" & rowIdx .Cells(rowIdx, 11).Formula = "=E" & rowIdx & "+H" & rowIdx .Cells(rowIdx, 12).Formula = "=IF(J" & rowIdx & "=0,0,K" & rowIdx & "/J" & rowIdx & ")" End With rowIdx = rowIdx + 1 Next k
이를 메모리에서 연산하고
바로 한번에 기록할 수 있도록 아래와 같이 수정하면
성능이 많이 올라갑니다.
Dim rowIdx As Long Dim n As Long, i As Long Dim arrV As Variant Dim keys As Variant Dim rng As Range rowIdx = 2 n = dic.Count If n = 0 Then GoTo DataOut_Exit ReDim arrV(1 To n, 1 To 12) '// 값만 사용 keys = dic.keys '// 0-base For i = 1 To n tmp = dic(keys(i - 1)) arrV(i, 1) = tmp(0) '// 회신과 arrV(i, 3) = val(Replace(tmp(1), "월", "")) & "월" '// 월(중요: 값으로 유지) arrV(i, 4) = tmp(2) '// 응급의뢰 arrV(i, 5) = tmp(3) '// 24시간내회신 arrV(i, 7) = tmp(4) '// 비응급의뢰 arrV(i, 8) = tmp(5) '// 48시간내회신 Next i Set rng = wsTo.Range("A2").Resize(n, 12) rng.Value2 = arrV wsTo.Range("B2").Resize(n, 1).FormulaR1C1 = _ "=INT((SUBSTITUTE(RC[1],""월"","""")-1)/3)+1 & ""분기""" wsTo.Range("F2").Resize(n, 1).FormulaR1C1 = _ "=IF(RC[-2]=0,0,RC[-1]/RC[-2])" wsTo.Range("I2").Resize(n, 1).FormulaR1C1 = _ "=IF(RC[-2]=0,0,RC[-1]/RC[-2])" wsTo.Range("J2").Resize(n, 1).FormulaR1C1 = _ "=RC[-6]+RC[-3]" wsTo.Range("K2").Resize(n, 1).FormulaR1C1 = _ "=RC[-6]+RC[-3]" wsTo.Range("L2").Resize(n, 1).FormulaR1C1 = _ "=IF(RC[-2]=0,0,RC[-1]/RC[-2])" rowIdx = n + 2 DataOut_Exit:응원의 박수를 보내드립니다~
월별, 분기별, 연도별 보고서 추가 해서 파일 올려드립니다.
"데이타는 사내프로그램에서 엑셀로 다운받아서 정제합니다."
댓글 보시면 사내프로그램으로 다운 받은 엑셀 파일 올려줘보세요.
가상으로 추정해서 가져오기 시트 만들어 놓았으니 세팅값이 맞으면 RawData를 쉽게 가져올수 있을껍니다.