【ExcelVBA】 상세 집계 처리의 전술 메모

소개



MK가 1000번인 한 부품의 제조 스테이터스가 B라는 공정에 들어갔다.
아래 그림 오른쪽에는 소위 미완성 부품 목록이 있습니다. 이 미완성 부품 리스트는 매일 서버상에서 생성되어 그 「미완성의 양」이라고 하는 정보를 사용해 번다운 차트를 작성하는 것이다. 그 번다운 차트 작성 도구의 이야기.


그런데이 프로그램 ...



전부 Excel로 처리하려고 하고 있어, 매일 5시간 걸리는 처리다.
하루 8시간 속에서 매일 5시간이라는 것은 좀처럼 터프할 것이다. 실제로는 태스크 스케줄러에서 킥이 걸리기 때문에 2시간 정도 벌지만, 그래도 3시간 PC 받지 않는 것은 힘들고...

작업장의 PC 사양은 높지 않다.



Celeron의 1.9 ... 였어.
경험 지수라든가 그 숫자의 녀석은 평가를 산출할 수 없을 정도로 낮다...알겠지? OS는 Windows7이다.


하는 일은 혼마에 그냥 집계



또 한번 같은 그림을 가져오지만, 본래는 SQL로 서버로부터 카운트 취해 정리하면 좋을 뿐의 이야기. 처음 왜 이렇게 시간이 걸릴지 몰랐다. 이 지연은, 미완성 부품 리스트의 시트 A를 집계하고 있던 평소의 처리에 가세해, 조금 조건이 다른 시트 B도 해 주었으면 하는 개수 속에서 발각했다(처리량이 배 이상이 되기 때문에) .


시간이 없고 문서도 없다.



SQL에서 가져오는 형태로 하고 싶지만, 그 SQL(스토어드 프로시저)이 이것 또 귀축이 되고 있다. 현장 들어가 몇 달에서는 업무 데이터의 로직은 알 수 없다. 문서도 없이 소스 아내 상태로, 주어진 기간은 5일. 원래 SQL을 구문 분석하는 시간의 여유가 없습니다 .... 「결과 세트」로서 생성된 일일 엑셀을 읽어 하나하나 가산 처리를 한다고 하는 구조가 심장부가 되고 있는 이상은, 이 흐름을 이용할 수밖에 없다.

처리 무게 분석



지금 집에 있고 세세한 곳은 잊어버렸습니다만(아무리 세세하게 이야기해도 이번은 컴플러이고…), 대체로의 흐름으로서 미완성 부품 리스트를 루프의 축으로 하고, 전량 돌려 Find 로 집계 시트 에서 key를 검색하고 1을 더하는 것 같은 일을 하고 있기 때문에 빌어 먹을 무거운 셈이다. 게다가 이 루프 속에서 빌어 먹을 무거운 테이블에 SELECT를 던지는 처리가 있었다. 다만 양이 많은 미완성 부품 리스트 측에서 루프를 걸고 있고, 즉 미완성 부품 리스트가 15,000개 항목 있으면 SQLServer에 15,000회 SELECT를 던지고 있는 셈이다. 이것은 네고라고 하고 그만두게 했지만, 그렇다 해도 심하다.

리노베이션 정책



이 경우, 구조로서는, 좌측의 집계 시트측을 루프의 축으로 해야 한다. 집계 key가 1에 대해서 라인은 n이니까. 틀림없다..."만들지 말아야 할 인간"이 만들고 있다(게다가 예에 따라 작성자 본인은 더 이상 없었고 만난 적도 없다)

(togetter) 싱크대 프로그래머는 멕시코의 황야와 같은 현장에 가기 쉬운 경향이 있습니다.

소스 코드



GitHub 에 있습니다 (크로스 집계 버전 추가)
교차 집계 버전은 ExcelManipulator를 사용합니다

이것이 편리했습니다.



Excel 표를 Markdown 형식으로 변환

사이고에게



Qiita에 쓰면 문서 쓰고있는 것 같은 것 같은 www
휴가에 일한 분은 적어도 범용화하고 오픈하게 해줄게
일주일에 즐거워졌습니다.

축소된 시간을 측정해 보았다



4:53:35 걸렸던 것이 0:41:33.
3:21:10 줄어든 것

좋은 웹페이지 즐겨찾기