2017-05-03 9 views
1

もっと広い範囲に数多くの数式を追加する(計算する)方が早いかどうかは疑問です。sumifs公式を広い範囲に高速に追加する

したがって、範囲は、それぞれ14235行の22個の列をカウントします。すべての列には独自の数式があり、そのほとんどは5つの基準を持つsumifです。

私のアプローチは実際には非常に単純ですが、おそらく最も速くはありません。 各列の範囲を選択し、数式を挿入するだけです。

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が挿入し、挿入した後、すべてを計算しているので、私は信じて、時間がかかります。

私は数式を挿入する前に自動計算を無効にしてみましたが、数式が一杯になるたびにすべてを計算するようにしましたが、それはもっと長く(約2倍)でした。今、私は定期的に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 

かかわらず、コードを正しく使用するかどうかわかりません。それは働いていますが、非常に遅いです。 1つの条件をフィルタリングすると、結果が表示されるまでに最大2分かかります。 私は毎日この表を使用しているので、時間がかかり、むしろ非効率です。

だから、私はvbaで何かを作成することがより速くなるのに役立つかもしれないと思った。 私の考えは、数式を挿入し、計算してすべてを値として貼り付けることでした。それで私はファイルでより速く作業することができます。しかし、私のアプローチは非常に時間がかかるので、これまで完璧な解決策ではありません。

あなたは私にそれを手伝ってもらえますか?私は仕事の流れを固定するのに役立つかもしれない他のアプローチに満足しています!

ありがとうございます!

ベスト、

ラモン

+1

あなたは、その後に 'Sheet1.Calculate'を使用して数式を追加するためのコードの2番目の部分を使用することができます数式が計算されていることを確認します。次に、数式をその値で置き換えることができます。 'Sheet1.Range( "A4:Z14238")。Value = Sheet1.Range( "A4:Z14238").Valueこれは、結果をフィルタリングするたびに計算される数式がないことを意味します。 – Jordan

+0

@ 。しかし、それはvba(PasteSpecial)の代わりにExcel自体で行うことができます。 – Masoud

+0

@ジョーダンはそれを試して、それがもっと速いかどうかを確認します。ありがとう! at 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

関連する問題