ExcelVBAでWorksheet_Changeサブルーチンの作成留意点

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

2009-07-12 ExcelVBAでWorksheet_Changeサブルーチンの作成留意点

VBAのWorksheet_Changeサブルーチンは、セルが書き換えられた時に起動されます。

その時に、システムから書き換えられたRangeオブジェクトが渡されます。


このRangeオブジェクトは、実は、一つのセルだけでなく、複数のセルの場合もあるのです。

また、空の場合もあるのです。


要は、複数セルをDelキーで削除したり、単一セルをDelキーで削除したり・・・。

すると、Rangeオブジェクトは一つのセルデータでなく、配列だったり、空だったりするのです。


その場合、処理をしないようにするには、以下のようにします。

複数セルをDelキーで削除した場合は、配列で、IsArray関数を使います。

単一セルをDelキーで削除した場合は、空で、IsEmpty関数を使います。


サンプル
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sheet2 As Worksheet
Dim Sheet_Save As Worksheet

    '配列だったら Exit Sub
    If IsArray(Target.Cells.Value) Then Exit Sub
    '空だったら Exit Sub
    If IsEmpty(Target.Cells.Value) Then Exit Sub

    Set Sheet_Save = ActiveSheet
    Set Sheet2 = Worksheets("Sheet2")
    Sheet2.Activate
    
    '任意シート(例ではSheet2)の任意の処理を記述する。
    MsgBox "Sheet2"
    
    Sheet_Save.Activate
    Set Sheet_Save = Nothing
    Set Sheet2 = Nothing
End Sub

まぁ、もちろん、複数のセルや空のセルに対する処理が必要な場合は、Exit Subしないでその処理を記述します。

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。