処理に時間がかかるマクロがあります。これの主な理由は、数式で範囲を埋めるループです。VBAエクセル計算が遅い
高速化するために、オートフィル機能をある範囲で使用して、数式を高速に入力しました。これは動作しますが、マクロを実行するときには、式を更新するためにshift + F9を押す必要があります。
Excelで計算を処理するには20分かかりますが、数式で範囲を埋めるのに20秒かかります。
Excelで式を高速に更新するための回避策はありますか?
私は範囲を分解して、activesheet.calculation関数を使用しようとしましたが、すべてが遅くなります。
Sheets("Sheet").Range(CL1 & i.Row).Formula = "=ROUND(IF(Trim(Left(" & CL1 & "$2,4))="""",""Missing Value"",IF($B" & i.Row & "=""Sheet1"",SUMIFS(INDIRECT(""'""&$B" & i.Row & "&""'!""&SUBSTITUTE(ADDRESS(1,MATCH(trim(left(" & CL1 & "$2,4))&"" - Total"",Sheet2!$1:$1,0),4),""1"","""")&"":""&" & _ "SUBSTITUTE(ADDRESS(1,MATCH(trim(left(" & CL1 & "$2,4))&"" - Total"",Sheet2!$1:$1,0),4),""1"","""")),INDIRECT(""'""&$B" & i.Row & "&""'!""&SUBSTITUTE(ADDRESS(1,MATCH($C$3,Sheet2!$1:$1,0),4),""1"","""")&"":""& " & _ "SUBSTITUTE(ADDRESS(1,MATCH($C$3,Sheet2!$1:$1,0),4),""1"","""")),$C" & i.Row & ",INDIRECT(""'""&$B" & i.Row & "&""'!""&SUBSTITUTE(ADDRESS(1,MATCH($D$3,Sheet2!$1:$1,0),4),""1"","""")&"":""&" & _ "SUBSTITUTE(ADDRESS(1,MATCH($D$3,Sheet2!$1:$1,0),4),""1"","""")),$D" & i.Row & "),IF($B" & i.Row & "=""SOI"",IFERROR(SUMIFS(INDIRECT(""'SOI'!""&SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ", Sheet3!$1:$1,0)+2,4),""1""," & """"") & "":"" &SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ",SOI!$1:$1,0)+2,4),""1"","""")),INDIRECT(""'SOI'!""&SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ",SOI!$1:$1,0)+0,4),""1"","""") & "":"" &SUBSTITUTE(ADDRESS(1," & _ "MATCH($C" & i.Row & ",Sheet4!$1:$1,0)+0,4),""1"","""")),Trim(Left(" & CL1 & "$2,4)),INDIRECT(""'SOI'!""&SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ", Sheet3!$1:$1,0)+1,4),""1"","""") & "":"" &SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ",SOI!$1:$1,0)+1," & "4),""1"","""")),$D" & i.Row & "),""Classification Error""),if(B" & i.Row & "=""Unrealised"",INDEX(INDIRECT($B" & i.Row & "&""!A:ZZ""),MATCH($D" & i.Row & ",INDIRECT($B" & i.Row & "&""!A:A""),0),MATCH(trim(Left(" & CL1 & "$2,4))&"" - Movement"",INDIRECT($B" & i.Row & "&""!2:2""),0)),""Sheet Name Error"")" & _ ",if(B" & i.Row & "=""SOFP"",SUMIF(Sheet4!" & Str & ": A" & fin_Row & ", A" & i.Row & ",INDEX(Sheet3!E" & str_Row & ":" & fin_Col & fin_Row & ",0,MATCH(LEFT(" & CL1 & "$2,4), Sheet3!" & "E2:" & fin_Col & "2,0))),""Sheet Name Error""))),)"
数式を簡略化するか、数式を使用する代わりにコード内の値を計算します。しかし、質問にはコードや数式はありません。あなたはどんな答えを期待していますか? – BrakNicku
こんにちはBrak、コードは仕事であり、すべての機密情報です - 申し訳ありません。私の質問は、Excelが式をどのように更新し、より速い方法があるかに関連しています。 – Lowpar
次に、異なるデータとフィールド名を持つ簡略化されたバージョンを表示して、その概念を見ることができます。 – Mike