2017-05-03 1 views
1

더 넓은 범위에 수식을 추가하고 계산하는 더 빠른 방법이 있는지 궁금합니다.sumifs 수식을 넓은 범위에 더 빨리 추가하는 방법

따라서 범위는 각각 14235 행의 22 개의 열을 계산합니다. 모든 열은 고유 한 수식을가집니다. 대부분의 열은 5 개의 기준으로 구성됩니다.

내 접근 방식은 실제로 매우 간단하지만 아마도 가장 빠르지는 않습니다. 각 열의 범위를 선택하고 수식을 삽입하기 만하면됩니다.

Sheet1.Range("G4:G14238").FormulaR1C1 = "=SUMIFS(sumRangeA,criteria_range1,RC[-6],criteria_range2,RC[-5],criteria_range3,RC[-4],criteria_range4,RC[-3],criteria_range5,RC[-2])" 
Sheet1.Range("H4:H14238").FormulaR1C1 = "=SUMIFS(sumRangeB,criteria_range1,RC[-7],criteria_range2,RC[-6],criteria_range3,RC[-5],criteria_range4,RC[-4],criteria_range5,RC[-3])" 
...and so on 

실제로 이것은 꽤 오래 걸립니다. Excel이 삽입 한 후 모든 것을 삽입하고 계산하기 때문입니다.

그래서 수식을 삽입하기 전에 자동 계산을 비활성화하고 모든 수식이 채워지면 모든 계산을 Excel에서 처리하도록 시도했지만 시간이 오래 걸렸습니다 (거의 두 배 오래 걸림). 지금은 일반 엑셀 테이블에서 이러한 식 (전혀 VBA)가 될 때까지 : 난 당신에게 내가 달성하기 위해 무엇을하려고 더 나은 이해를 제공하기 위해

Application.Calculation = xlCalculateManual 

Sheet1.Range("G4:G14238").FormulaR1C1 = "=SUMIFS(sumRangeA,criteria_range1,RC[-6],criteria_range2,RC[-5],criteria_range3,RC[-4],criteria_range4,RC[-3],criteria_range5,RC[-2])" 
Sheet1.Range("H4:H14238").FormulaR1C1 = "=SUMIFS(sumRangeB,criteria_range1,RC[-7],criteria_range2,RC[-6],criteria_range3,RC[-5],criteria_range4,RC[-4],criteria_range5,RC[-3])" 

Application.Calculation = xlAutomatic 

불구하고, 코드를 올바르게 사용하면 확실하지. 그것은 효과가 있지만 매우 느립니다. 하나의 조건을 필터링하면 결과를 표시하는 데 최대 2 분이 걸립니다. 이 테이블을 매일 사용하기 때문에 시간이 많이 걸리고 오히려 비효율적입니다.

그래서 나는 vba로 뭔가를 만드는 것이 더 빨리 할 수 ​​있다고 생각했습니다. 제 아이디어는 수식을 삽입하여 계산 한 다음 모든 것을 값으로 붙여 넣는 것입니다. 그렇게하면 파일로 더 빨리 작업 할 수 있습니다. 그러나 내 접근 방식이 너무 많은 시간이 걸리는 지금까지는 완벽한 솔루션이 아닙니다.

저를 도와 드릴 수 있습니까? 작업 흐름을 고정하는 데 도움이 될 수있는 다른 방법에 만족합니다!

미리 감사드립니다.

보다도,

라몬

+1

당신은에 Sheet1.Calculate'를 다음에 수식을 추가'사용하는 코드의 두 번째 조각을 사용할 수 있습니다 수식이 계산되었는지 확인하십시오. 그런 다음 수식을 값으로 바꿀 수 있습니다. 'Sheet1.Range ("A4 : Z14238") .Value = Sheet1.Range ("A4 : Z14238") .Value 이것은 결과를 필터링 할 때마다 계산할 수식이 없음을 의미합니다. – Jordan

+0

@ . 하지만 vba (PasteSpecial) 대신 Excel 자체에서 수행 할 수 있습니다. – Masoud

+0

@Jordan이 그것을 시도하고 더 빨리, 고마워하는지 볼 것입니다! Masoud에서 문제는 매일 수식이 필요하다는 것입니다. 표는 일상적인 업데이트 값을 계산합니다. – Ramon

답변

0

좋은 간단한 루프는 그것을 할 것입니다 :

Sub SumIf() 
Dim ASCII As Long 
Dim iRef As Long 
Application.Calculation = xlCalculationManual 

iRef = 6 
For ASCII = 71 To 93 
    Sheet1.Range(Chr(ASCII) & "4:" & Chr(ASCII) & "14238").FormulaR1C1 = "=SUMIFS(sumRange,criteria_range1,RC[-" & iRef & "],criteria_range2,RC[-" & (iRef - 1) & "],criteria_range3,RC[-" & (iRef - 2) & "],criteria_range4,RC[-" & (iRef - 3) & "],criteria_range5,RC[-" & (iRef - 4) & "])" 
    iRef = iRef + 1 
Loop 

Application.Calculation = xlAutomatic 

End Sub 
+0

이 방법을 사용해 주셔서 감사합니다. 불행히도 SumRange가 각 열마다 다르므로이 방법이 작동하지 않습니다. – Ramon

관련 문제