ちょっとした事

プログラムを作るうえでのちょっとしたこと。


プログラムは簡潔に

学生時代にFortranの先生がよく言っていたことを思い出します。
「プログラムは簡単に。小学生でもわかるように書くこと」
はるか昔のことで、授業で覚えていたのはこれだけ(^_^;)ですが、その通りだと思います。少しややこしいルーチンだと、後で見たときに自分で分からなくなることが有ったり、 下手をすると、問題を見つけデバッグしたところが、それ以前にデバッグした部分が元に戻ってしまったり(先祖返り)してしまったりすることがあります。 また昔~し、製品を試験するためのDIAG(Diagnosis(診断)の略)プロを見たとき、担当者が試験、調整し易いように、GOTOなどでめちゃくちゃなルーチンにしてあって、何が何だかわからなくて 書き直したことがあります。だったら、自分専用に別にプログラムを作れよ!って事ですが、他人が見ても分かり易いものにしたほうが、自分にも、後で誰かが変更するにしても良いに決まっていますね。


ActivateよりはSetで

ワークシートのデータを別のワークシートに繰り返しコピーする事が良くありますが、方法として
「ワークシートをActiveにして(或いはSelectして)セルのデータをコピー・貼り付け」
というやり方をよくします。例えば以下のような場合です。


Worksheets("Sheet1").Activate
Copydata = Cells(3, 2).Value

Worksheets("Sheet2").Activate
Cells(3, 2).Value = Copydata

この処理を繰り返し実行すると、以下のようなことが起こります。

  1. シートを切り替えるので、画面の表示がちらつく
  2. VBA実行中にActive中のシート以外をクリックしたりすると、エラーとなる。(デバッグ中にクリックしてしまって???となったことがあります)
  3. 実行に時間がかかる。(特に昔はCPUが非力だったので、極端に遅くなりました。)

なので、このような場合は、ワークシートも指定して、例えば以下のようにしたほうが良いと思います。


Copydata = Worksheets("Sheet1").Cells(3, 2).Value
Worksheets("Sheet2").Cells(3, 2).Value = Copydata

あるいはオブジェクト変数を使用して、


Dim copySheet As Worksheet
Set copySheet = Worksheets("Sheet1")
  
Dim pastSheet As Worksheet
Set pastSheet = Worksheets("Sheet2")
 
Copydata = copySheet.Cells(3, 2).Value
pastSheet.Cells(3, 2).Value = Copydata

こうすると以下のような利点があります。

  1. 画面のちらつきがない
  2. VBA実行中に他のシートをクリックしてもエラーとなりにくい。
  3. 実行時間が早くなる。

Excel VBAのチップス一覧へ戻る

ツイート
このエントリーをはてなブックマークに追加
inserted by FC2 system