エクセルマクロで計算すると遅い
エクセル2013です。
表に対して、いろいろな処理を行い
要求された結果になるようにマクロを作成し完成しました。
思ったように動作するのですが処理時間が長すぎます。
自分で調べて、以下の部分が処理を遅くしている原因とわかりました。
ただの計算ですが、シート内に計算式や関数は残したくなくて
このようにしましたが、別の方法が浮かびません。
どのような方法が有りますでしょうか?
よろしくお願いします。
表は600行、50列。
17列目から49列目までの10行目から595行目までにデータがあります。
50列目は合計値用の空欄です。8行目は項目欄です。
インプットボックスは18~48までしか入力できないようにしてあります。
17列目からインプットボックスで入力した列までの合計値を
インプットボックスで指定した列のひとつ前の列に1行づつ処理して転記。
17列目からインプットボックスで指定した列の1列前までまとめて列削除
その後17列目から削除され残った最終列の1列前までの合計値を最終列に転記で
1行づつ処理です。
最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得
最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得
遅延合計欄列 = 選択列 - 1 'INPUT-BOXで選択した列の1列前の列番号を格納。この列に合計値を転記する為
遅延合計末列 = 選択列 - 2 'INPUT-BOXで選択した列の2列前を格納。ここまでの列を削除する為
Cells(8, 遅延合計欄列).Value = "遅延" 'INPUT-BOXで選択した列の1列前の列の8行目を「遅延」と転記しこの列に合計を転記する
Cells(8, 遅延合計欄列).Font.Color = -16776961
Cells(8, 遅延合計欄列).Font.Size = 15
Range(Cells(10, 遅延合計欄列), Cells(最終行, 遅延合計欄列)).Interior.Color = 65535
For 計算行 = 10 To 最終行 '10行目から最終行まで繰り返す
'17列目からINPUT-BOXで選択した列の1列前の列までの合計値を1列前の列に転記する。10行目から最終行まで
Cells(計算行, 遅延合計欄列).Value = WorksheetFunction.Sum(Range(Cells(計算行, 17), Cells(計算行, 遅延合計欄列)))
Next 計算行
Range(Columns(17), Columns(遅延合計末列)).Delete '17列目からINPUT-BOXで選択した列の2列前までを列削除
最終列2 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得
最終行2 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得
For 合計行 = 10 To 最終行2 '10行目から最終行まで繰り返す
'17列目から最終列の1列前までの合計数数を最終列に転記
Cells(合計行, 最終列2).Value = WorksheetFunction.Sum(Range(Cells(合計行, 17), Cells(合計行, 最終列2 - 1)))
Next 合計行
お礼
早速のご返事いただきありがとうございます、補足説明させて発信しましたのでご面倒ではありますが宜しくお願い申し上げます
補足
説明不足の所を追加させて頂きます。複数の列とはご指摘の通り例えば、A~E列(5列)を決まった幅で設定しますと次の5列も同様の幅の繰り返しで使いたい、又行においても同様に繰り返しの設定をします。その様に設定して実際に数字あるいは文字を打つわけですが、このとき不用意に設定しておいた幅寸法が動く事があるのです。これが困るのです、決めた列、行寸法は固定したいのです。枠固定の方法もあるのは承知していますが、この様な使い方の場合は不向きなのです。ご理解いただけましたでしょうか? 何しろ、列、行の繰り返し使用は20ページにもなります、それをA4寸法にピッタリ印刷をする場合には少しの狂いも困るのです、しかも定期的に追加、変更、取り消しをするのですから、寸法の狂いを避けたいのです。