マクロでいこう! ~ Excel活用HomePage ~

VBAでラクしたい ~Part 2~

こちらのコーナーでは、VBAの使い方を中心にご紹介していきます。
作者自身の経験から書いておりますので、本とかとは違ったコトを
書いてるトコロもあるかもしれません。 そういう場合は、良さそうな方を信じましょう(^_^;
TOPVBAでラクしたい ~Part 2~ > 重複する処理はまとめませう

重複する処理はまとめませう

前回は関数の解説なぞをしてみましたが、今回は今まで書いたコードの整理をチョットやってみた
いと思います。

これまでに結構たくさんのコードを書きましたよね。

でも上からずーーっと順に眺めていってみてください。何か気がつくでしょうか。
間違いとかいうことではないんですが・・・。

そうです、よく見ると全く同じコードの集まりが何個所かありますよね。同じ処理を使いまわしで
きる個所が色々とありましたから、これは当然といえば当然ですね。

そこで一つ考えるわけです。

「まったく同じものであれば、一つにまとめてしまうことはできないか」と。

実は出来るのです。

方法はカンタン。"重複する処理部分を1つのSub処理にしてしまう"のです。

これまで書いてきたコードっていうのは"CmdAddNew_Click"とか"TxtRecCnt_Change"のように、
「イベントに対応した処理」ばかりでした。

ところが、Sub処理っていうのはイベントに対応しているものが全てというわけではなく、あくまで
一塊の処理を指すものですんで、処理中で汎用的に使うモノを作ることも出来るのです。
要は「共通で使える処理をひとまとめにしておいて、必要に応じて呼び出して使う」ことが出来る
んですねヽ(^-^ )

それでは実際にやってみましょう。まずは重複している処理を探すところから

・*** レコード表示処理 ***
・*** 空白表示処理 ***

これらは明らかに同じものですよね。

それと、コメント文が違っていますが

 *** データ登録処理 ***

と

*** データ修正処理 ***

も、よく見ると同じです。

それではこの辺からまとめていきましょうか。


まずSub処理に名前をつける必要があります。

・*** レコード表示処理 ***
・*** 空白表示処理 ***
・*** データ登録・修正処理 *** → *** データ書込処理 ***

から私が考えた名前は

・RecShow
・NoRecShow
・DataWrite

です(^-^;
もちろん自分でお好きな名前に変えても大丈夫ですよ。

で、この名前を元にSub処理を用意します

Private Sub RecShow()

End Sub


とりあえず今は1つのフォームだけでやってますので、フォームモジュールの中に書いて構いませ
ん。

ただ、今後複数のフォームを扱うようになり、複数のフォーム間で共通で使える処理を書くってこ
とになれば

Public Sub RecShow()

End Sub

として、標準モジュール内に書くのが望ましいです。

そして後はこの中に処理を入れまして

Private Sub RecShow()
    '*** レコード表示処理 ***
    TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
    TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
    TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
End Sub


とします。同様に他の2つも

Private Sub NoRecShow()
    '*** 空白表示処理 ***
    TxtName.Text = ""
    TxtEmail.Text = ""
    TxtBirthday.Text = ""
End Sub

Private Sub DataWrite()
    '*** データ書込処理 ***
    Cells(LngRecRow, cNameDataCol).Value = TxtName.Text
    Cells(LngRecRow, cMailDataCol).Value = TxtEmail.Text
    Cells(LngRecRow, cBirthDataCol).Value = TxtBirthday.Text
End Sub


としましょうヽ(^-^ )

そうしますと今までは

    '*** 現在行位置が見出し行位置と同じ場合(レコード数ゼロ)
    If LngRecRow = cMidasiRow Then
        '*** 空白表示処理 ***
        TxtName.Text = ""
        TxtEmail.Text = ""
        TxtBirthday.Text = ""
    Else
        '*** レコード表示処理 ***
        TxtName.Text = Cells(LngRecRow, cNameDataCol).Value
        TxtEmail.Text = Cells(LngRecRow, cMailDataCol).Value
        TxtBirthday.Text = Cells(LngRecRow, cBirthDataCol).Value
    End If

と書いていたものが

    '*** 現在行位置が見出し行位置と同じ場合(レコード数ゼロ)
    If LngRecRow = cMidasiRow Then
        '*** 空白表示処理 ***
        NoRecShow
    Else
        '*** レコード表示処理 ***
        RecShow
    End If

で済んでしまいます(^-^;A

このように処理を一通り書いてから、まとめられる部分をまとめるっていうやり方もありますが、
慣れてくれば設計の段階から、共通で使えそうな処理をピックアップできるようになるでしょう。



それでは次回までごきげんよぉ~(^^)/~


TOPVBAでラクしたい ~Part 2~
Copyright (C) 2006 マクロでいこう!. All Rights Reserved.