2012-10-24 5 views
0

나는 회계 기간에 따라 시작 날짜와 완료 날짜를 채우는 매크로를 가지고 있습니다. 예 : 제품 X의 판매량은 Jan12 - Dec12입니다. 매크로는 vlookup/min 배열을 사용하여 시작을 찾고 vlookup/max 배열을 사용하여 마무리를 찾습니다. 날짜는 YYYYMM 형식이므로 vlookup은 해당 YYYYMM을 시작 날짜 또는 종료 날짜로 매핑하는 캘린더 탭을보고 있습니다. 코딩은 잘 작동하지만 경우에 따라 30,000 - 100,000 줄이 있으며 실행하는 데 15-20 분 정도 걸릴 수 있습니다. 이 사람이 더 빨리 달릴 수있는 방법에 대한 아이디어가 있습니까? 여기 Excel VBA FormulaArray 너무 느림

코드이다

세포 (RCNT 5) .FormulaArray = "= VLOOKUP (MIN (IF ('정상화'A! A ="& 세포 (RCNT 1) .Address (거짓, 거짓) & ','정상화 'J :! J)),'달력 'A! FALSE C, 2,) "

이 어떤 도움을 주시면 감사하겠습니다.

답변

0

매크로에서 수식을 사용하지 마십시오. VBA 코드를 직접 작성하여 코드를 훨씬 빠르게 작성할 수 있습니다. 한 줄의 모든 값을 반복하고 가장 작은 값과 가장 큰 값을 저장할 수 있습니다 (최대 값과 최소값을 유지하면 하나의 루프 만 필요합니다). 그런 다음이 값을 적절한 위치에 씁니다. 이것은 이미 엑셀 공식보다 속도가 빨라야합니다.

VBA 매크로 작성을 시작하려면 here을 사용하십시오. 당신은 구체적으로 세포를 통해 loop하는 방법을보고 싶습니다. max = 1 월 1 일과 min = 12 월 31 일을 설정하고 현재 검사중인 값이 max보다 크면 max를 값과 같게 설정하고 min과 마찬가지로 설정해야합니다. 해당 행을 반복 한 다음 해당 행에 최대 및 최소 값을 갖습니다. 그런 다음이 값을 다른 열에 기록하고 최대 값과 최소값을 재설정하고 다음 행으로 이동할 수 있습니다.

+0

메신저 일종의 새내기 ... 어떻게 정확하게 설정할 수 있습니까? – brewbrah

+0

시작하는 방법에 대한 정보를 추가했습니다. 프로그래밍을 한 적이 없다면 조금 더 열심히해야 할 것입니다. 혼자서 조사한 후에 게시 할 다른 질문이있는 경우 – emschorsch

0

귀하의 문제는 귀하의 데이터가 매월 각 제품의 판매를 나열하므로, 각 제품에 대해 첫 달 및 지난 달을 검색하고 있다는 점을 이해했습니다. 제품 및 날짜별로 데이터를 정렬 할 수 있습니까? Emschorsch가 설명한 것처럼 루프를 구현하는 가장 쉬운 방법입니다. 한 번에 하나의 제품만을 다루기 때문입니다.

몇 가지 다른 일들이 속도를하려고합니다 :에

Application.Calculation = xlCalculationManual 

과 마지막 행 :

Application.Calculation = xlCalculationAutomatic 

  • 가에 코드의 첫 번째 라인을 설정

    (여전히 많은 수의 조회가 있지만 각 행의 수식을 만들 때 한 번에 하나씩 계산하지는 않습니다)

  • 데이터가 정렬되지 않으면 각 제품을 연속적으로 자동 필터링하고 날짜 열을 참조하는 SUBTOTAL() 함수를 사용하여 최소 및 최대 값을 얻을 수 있습니다. 보지 않고 (

불필요한 것 같다 다른 부분 (당신은 당신의 코드에서 셀, 또는 Application.WorksheetFunction를 사용하여 코드에서 직접 사용하는 것이 사용하지 않는 셀 참조 소계() 공식을 배치 할 수 있습니다) 당신의 우리가 확신 할 수없는 데이터)는 YYYYMM을 날짜로 변환하기위한 검색을 사용하고 있습니다. 이것이 정말로 모든 날짜가 들어있는 형식이라면.VBA없이 DATE() 수식을 사용하거나 매크로 내에 필요하면 쉽게 할 수 있습니다.

cells(Rcnt, 5).Value = DateSerial(Left(x, 4), Right(x, 2), 1) 'x is your date in YYYYMM format 
+0

날짜는 기업 회계 연도 기준이므로 201210은 2012 년 9 월 29 일에 시작하고 10/25/2012는 끝낼 수 있습니다. – brewbrah

+0

목표에 대해 혼란 스럽습니다. 여러 기간에 매출을 합산하려고합니까? 또는 YYYYMM 날짜를 매월 첫 번째 및 마지막 회계 일로 변환하려고합니까? 아니면 둘다? 수동 계산 모드를 시도 했습니까? 속도가 향상 되었습니까? – ExactaBox