アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
ExellVBAを業務に使用しています。
動作環境は、自宅は256M、Exell2002+Sp3、職場は256M、Exell2003+Sp2。
両方共にウィルスバスターがインストールされています。

次に方法で、Sheet1から、Sheet2、3,4,5・・・へ、セルを連続コピーしていますが、同時にコピー先のSheetではデータ編集も行なっているので、とても重たく感じられます。
ウィルスバスターの推奨メモリは512Mで、足りない環境で動かしているので、この所為かとは思っていますが、取り外して試してはいません。

現在のコピー方法は次の通りです。これで、8年運営しています。
(例)
Sheet1において、
Range("A003:A024").Name = "namA_Room"
Application.Goto Reference:="namA_Room"
Selection.Copy Destination:=Worksheets("Sheet2").Range("E03")

質問です。
コピーには色々方法があろうかと思いますが、
↑の(例)の方法は、現在、一般的に多く使われている方法でしょうか?
それとも、例えば、クリップボードのコピー&ペーストみたいな記述方式の方がいいのでしょうか?
他にも、もっと良い方法がありますか?

一部作り直すつもりです。どうせなら、ベターな方法を取り入れたいと思っています。
御教示よろしくお願いします。

A 回答 (1件)

>コピーには色々方法があろうかと思いますが、


理屈はよくわかりませんが
コピー&ペーストだとメモリーの使用量に影響が必ずあるはずです。
お仕事のようですが コピーするのは
書式やフォントなどの一緒にコピーしなければならない作業なのでしょうか
私は、値を入れたいだけであれば

Worksheets("Sheet2").Range("E03:E24").Value = Range("A3:A24").Value
の1行で済ましてしまいます。
名前をつけたり、コピーしたりする必要もありません。
ちなみに
Range("C2").Value = Now
For i = 1 To 1000
Range("A003:A024").Name = "namA_Room"
Application.Goto Reference:="namA_Room"
Selection.Copy Destination:=Worksheets("Sheet2").Range("E03")
Next
Range("C3").Value = Now
End Sub

Range("B2").Value = Now
For i = 1 To 1000
Worksheets("Sheet2").Range("E3:E24").Value = Range("A3:A24").Value
Next
Range("B3").Value = Now
End Sub
同じ作業を1000回繰り返してみたら
5秒と1秒という結果でしたので 5倍ほど違いました。
メモリーが少ない場合はさらに違いが出てもおかしくないと思うのですが。
    • good
    • 0
この回答へのお礼

ご丁寧に、比較のの実行結果まで行なって頂き、ありがとうございます。
8年前はVB使い初めで、例題を見ながら作っていました。
最近、これが重たく感じられ、いつか作り直しをと思ってましたが
そのままにしていました。
これを機会に、ご提案の内容を取り込み、作り直ししてみます。
ありがとうございました。
補足ですが、
私、クラスモジュールが、なかなか理解が出来なくて、最近なんとなく判ってきて
標準モジュールをクラスモジュールに置き換えながら進めていく予定です。

お礼日時:2011/04/23 20:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!