2

私はこのサイトを何ヶ月も使用して、初期のコーディングのキャリアを始める手助けをしてきましたが、これが私の最初の投稿です。昨日フォーラムを検索していたときにこの質問を見逃していたら、申し訳ありません。500,000 行以上のテーブルを参照する約 6,000 のアクティブな Sumif を含むスプレッドシートがありました。ご想像のとおり、これは計算に少し時間がかかりました。ユーザーが選択した場合にのみ計算されるように、VBA に記述しました。ただし、sumif が非常に多いため、コードの実行には約 3 ~ 5 分かかります。これをスピードアップして、エンドユーザーのエクスペリエンスを向上させる方法を探しています。以下に sumif を実行する方法を投稿します。状況によっては、これは同じユーザー グループに対して 2 回 sumifs を実行していますが、1 つの異なる基準を使用しています。関連する情報を省略した場合はお知らせください。

For i = 1 To 12
    Range("Emp_Utility").Offset(1, i).Activate
    Do Until Cells(ActiveCell.Row, 2) = ""
        ActiveCell.Value = Application.WorksheetFunction.SumIfs(Hrs, Emp, Cells(ActiveCell.Row, 2), Y, Cells(4, ActiveCell.Column), M, Cells(3, ActiveCell.Column))
        ActiveCell.Offset(1, 0).Activate
    Loop
Next i

For a = 1 To 12
    Range("Emp_Billable").Offset(1, a).Activate
    Do Until Cells(ActiveCell.Row, 30) = ""
        ActiveCell.Value = Application.WorksheetFunction.SumIfs(Hrs, Emp, Cells(ActiveCell.Row, 2), Y, Cells(4, ActiveCell.Column), M, Cells(3, ActiveCell.Column), Bill, "No")
        ActiveCell.Offset(1, 0).Activate
    Loop
Next a
4

3 に答える 3

1

SUM と SORT の組み合わせなど、SUMIFS (計算に時間がかかる可能性がある) の代替手段を検討することもできます。Excel の配列で VBA を使用して SumIf を実行する方法への回答を参照してください。これは、SUM と SORT の組み合わせを使用して非常に高速な計算を行い、SUMIFS メソッドが使用された場合と同じ値を返します。

于 2014-02-02T23:58:12.643 に答える
0

Excel でビッグ データ(顧客情報、ローン カード)を操作するために配列一致メソッドを使用することはお勧めしません。その sumif を使用して、コードの先頭で自動更新をオフにしてからオンにすることをお勧めします。次のコマンドに従ってください: これがお役に立てば幸いです!

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlManual

<Your sumifs code>

ActiveSheet.Calculate
Application.ScreenUpdating = True
Application.DisplayAlerts = True
于 2021-09-23T05:14:09.827 に答える