- ベストアンサー
エクセルのマクロと処理スピード
エクセルでファイルサイズが1Mぐらいの時、マクロを作成しました。その後、だんだんとデータが増えるにつれて、マクロの処理スピードが遅くなってきました。現在のファイルサイズは1.8Mぐらいなのですが、この先情報量が増えると共にマクロの処理スピードは遅くなっていくのでしょうか? ちなみにマクロが処理するのは12行挿入とその行に番号を打つのと一列のオートフィル(12行)だけなのです。全体のファイルサイズとマクロの処理スピードに関連があるのでしょうか?・・・現実には遅くなって来てますが・・・。知ってる方教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足どうもです。 補足のプログラムを私なりに修正してみました。 相対参照が多くて、プログラムを読みきれているか不安ですが、 バックアップをとってから試してみてください。 Sub test() Dim wRow As Long Dim i As Integer Dim tbl(1 To 12, 1 To 1) As Integer wRow = Range("A65536").End(xlUp).Row '12行挿入 Rows(CStr(wRow) & ":" & CStr(wRow + 11)).Insert Range(Cells(wRow + 1, "B"), Cells(wRow + 11, "B")).FormulaR1C1 = "=R[-1]C" For i = 1 To 12 tbl(i, 1) = i Next i Range(Cells(wRow, "C"), Cells(wRow + 11, "C")).Value = tbl Cells(wRow + 12, "F").AutoFill Range(Cells(wRow, "F"), Cells(wRow + 12, "F")) ActiveWindow.SmallScroll Down:=12 Cells(wRow, 1).Select End Sub 少しは早くなったでしょうか? 間違ってる場所は、補足していただければ修正します。
その他の回答 (2)
- taisuke555
- ベストアンサー率55% (132/236)
>いずれ手動で行挿入したほうが早い日が来るのではないかと恐怖です。 手動での挿入のスピードは、遅くないのですか? 計算式が多くなると再計算に時間が掛かったりしますが、 そういうのとは違うのでしょうか? もしよければ、実際のマクロを補足して頂けませんか。
補足
>手動での挿入のスピードは、遅くないのですか? ・・・いえいえ、もっと遅いです(笑)。しかし、マクロを作成した時点での動作スピードと現在の動作スピードがあまりにも違うもので・・・。ちょっと誇張しましたが、待ち時間が退屈なもので・・・。 以下にマクロをコピーしてみました。このマクロは 作成時には1秒ぐらいで完了してたのですが、今はたっぷり5秒かかります。 どんなものなんでしょうか? Sub Insert12() ' ' Insert12 Macro ' マクロ記録日 : 2003/9/3 ' Range("Z1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert Selection.EntireRow.Insert ActiveWindow.SmallScroll Down:=3 ActiveCell.Offset(1, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=R[-1]C" ActiveCell.Select Selection.AutoFill Destination:=ActiveCell.Range("A1:A11"), Type:= _ xlFillDefault ActiveCell.Range("A1:A11").Select ActiveCell.Offset(-1, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "1" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "2" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "3" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "4" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "5" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "6" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "8" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "11" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "12" ActiveCell.Offset(-11, -2).Range("A1").Select ActiveWindow.SmallScroll Down:=6 ActiveCell.Offset(12, 5).Range("A1").Select Selection.AutoFill Destination:=ActiveCell.Offset(-12, 0).Range("A1:A13"), _ Type:=xlFillDefault ActiveWindow.SmallScroll Down:=-3 ActiveCell.Offset(-12, -5).Range("A1").Select End Sub
- gukky
- ベストアンサー率28% (17/60)
ご質問の場合とは異なりマクロを使っていない場合ですが、ファイルの容量が増えると処理速度が遅くなる感じは受けます。 特にご質問の場合、行の挿入という処理を考えると、データのあるメモリ領域を1つづつづらす処理ではないかと思われるので、ファイルサイズが大きくなるとともに遅くなる可能性がありそうに思えます。挿入する行の位置が原点に近い場合は特に遅くなるのではないでしょうか。
お礼
回答ありがとうございます。 > 挿入する行の位置が原点に近い場合は特に遅くなる > のではないでしょうか。 ・・・だんだんと原点から遠くなっております。つまり挿入する行の下には何も無い(に近い)状態です。この調子で行くといずれ手動で行挿入したほうが早い日が来るのではないかと恐怖です。
お礼
超ありがとうございます!! むちゃくちゃ早いです。一瞬のうちにマクロが終わってしまいました。感謝感激です。間違っている所もありません。問題なく使えました。 誠に誠にありがとうございます。マクロって勉強すべきですね。がんばってみます。しかしこうしてみると、自動記録マクロってやっぱりちょっとダメですね。 どうもありがとうございました。