VB6.0
EXCEL2000
WINDOWS2000
で次の一行がやたらと遅いのですが、
Worksheets(1).Range("B13:M18").Copy _
Destination:=Worksheets(ObjSheet.Sheets.Count).Rang("B13:M18")
コピーに関して処理速度を速くするにはどうしたらいいですか?
説明が抽象的すぎやしないでしょうか?
Excelの画面を表示しているとか、していないとか。
他の環境では試したらどうなのか、とか。
掲示板で質問する前にやるべきことやってないんじゃ、お話になりませんよね。
ぬるぽさん、すいませんでした。掲示板の書き込みはじめてでして、、、
Excelの画面は表示してませんし、もちろん画面の更新もありません。
他の環境ではWindowsXPで試しても同様の結果でした。
それ以外のことはメモリの問題かとも思いシャットダウンしてみたりしたのですが
解決できませんでした。
これって、ワークシート数が1個しかない場合に、
自分を自分にコピーすることになってしまいませんか?
> Worksheets(1).Range("B13:M18").Copy
まず、この部分がNG。Worksheets(1) ではなく、
objBook.Worksheets(1) のような構文を使いましょう。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200403/04030102.txt
たとえば、このようなイメージで。
Dim oApp As Excel.Application
Dim oBook As Excel.Workbook
Dim oSheets As Excel.Sheets
Set oApp = New Excel.Application
oApp.Visible = True
Set oBook = oApp.Workbooks.Add(〜) 'または、oApp.Workbooks.Open(〜)
Set oSheets = oBook.Sheets '一度変数に受ける。
oSheets(1).Range("B13:M18").Copy Destination:=oSheets(oSheets.Count).Range("B13:M18")
魔界の仮面弁士さんごめんなさい、記述ミスです。
例えばこんなんで、
ObjSheet.Sheets(1).Range("B7:Y12").Copy _
Destination:=ObjSheet.Sheets(2).Range("B7:Y12")
モデルシートからコピーして新しいシートに貼り付けたいだけなんですが、この1ステップに1秒くらいかかるんです。これって普通ですか?
えぇと。
ObjSheetという変数の中身は、(Worksheetではなく)Workbookオブジェクトですか?
> この1ステップに1秒くらいかかるんです。
シートに、いろいろな書式設定や式があれば、もっと時間がかかる場合も
ありますし、逆に情報が単純なら、一瞬で完了する場合もあります。
アンチウィルス系のソフトが、実行速度の障害となるケースもありますね。
> これって普通ですか?
と言われても、べジー田さんがお使いのExcelシートの内容や
環境構成などを一切知りませんので、何とも答えようがありません。
とりあえず、
・新規ブックでも遅いのか(空のSheet1から空のSheet2へのコピー)
・他のPCで実行した時も遅いのか
・実行速度に影響を与えるようなソフトが入っていないか
・手動でコピーを行った時にも遅いのか
などを調べてみましょう。
ちなみに下記のコードを試してみたところ、
当方の環境では平均 0.57813秒で実行されました。
Private Sub Main()
Dim T1 As Single, T2 As Single
T1 = Timer
Dim O As Object
Dim B As Object
Set O = CreateObject("Excel.Application")
O.Visible = True
O.SheetsInNewWorkbook = 3
Set B = O.Workbooks.Add()
B.Worksheets(1).Range("B7:Y12").Copy B.Worksheets(2).Range("B7:Y12")
B.Saved = True
B.Close
Set B = Nothing
O.Quit
Set O = Nothing
T2 = Timer
Debug.Print FormatNumber(T2 - T1, 5)
End Sub
ツイート | ![]() |