● Intersectメゾットを利用するには、下記の通りに設定を行います。
・ オブジェクト.Intersect(Arg1,Arg2,Arg3,…..Arg30) ※Arg・・・セル範囲
【使用例①】
・ 下記の使用例は、2つのセル範囲 ・セル範囲「A1~C5」とセル範囲「B4~D8」の重なっているセル範囲を取得する方法です。
Intersect(Range(“A1:C5”), Range(“B4:D8”))
【サンプルプログラム】
'
'
Sub Intersect00() '2つのセル範囲の重なっている部分のセル範囲を取得
Dim RngMix As Range
Set RngMix = Intersect(Range("A1:C5"), Range("B4:D8"))
MsgBox RngMix.Address
End Sub
'
【使用例②】
・ 下記の使用例は、アクティブセルの位置が指定したセルの範囲内か判定するサンプルプログラムです。Applicationオブジェクト・Intersectメゾットを利用する事で判定する事ができます。指定範囲をセル(A1~C5)を指定範囲内として、それ以外を指定範囲外としてアクティブセルセル位置に対して判定します。
【サンプルプログラム】
'
'
Sub Intersect01() '2つのセル範囲の重なっている部分のセル範囲を取得
Dim SetRng, WithRng As Range
Set WithRng = Range("A1:C5") '指定範囲として設定セル(A1~C5)
Set SetRng = Application.Intersect(ActiveCell, WithRng) 'アクティブセルが範囲内か範囲外か判定
If SetRng Is Nothing Then
MsgBox "指定範囲外"
Else
MsgBox "指定範囲内"
End If
End Sub
'
下記のサンプルプログラムは、指定したセルの範囲内のセルの内容を変更した時に、処理を実行するサンプルプログラムです。下記のプログラムではマスターデータとなる人事台帳の内容を登録・変更等、行った際に担当者の変更履歴が分かるように、登録データ単位で、担当者・日時・変更場所を記録します。それでは、順番に説明いたします。
●下記のプログラムは、シートモジュールのイベントプロシージャ「Worksheet change」に登録します。
【プログラムの流れ】
① 指定範囲として列(A列~E列)を指定します。(この範囲を変更した時に処理を実行します。)
② 現在のアクティブセルが指定範囲内(A列~E列)か指定範囲外か判定します。
③ 判定の結果、アクティブセルが(A列~E列)以外の場合は、何もしない。(プログラム終了)
④ 判定の結果、アクティブセルが(A列~E列)以内の場合は、以下の処理を実行します。
⑤ アクティブセルの行番号を取得します。
⑥ アクティブセルの列番号を取得します。
⑦ イベント発生を無効化します。※無効化しないと⑧⑨⑩の処理がイベントプロシージャー「Worksheet Change」に反応してしまい無限ループするため。
⑧ セル(G列)にEXCELアプリケーション・ユーザー名を転記します。※変更したユーザー
⑨ セル(F列)に現在の日時を転記します。※変更日時
⑩ セル(H列)に変更した項目を転記します。※社員番号・氏名・カタカナ・生年月日のいずれかの変更項目
⑪ イベント発生の有効化に戻します。
下記のサンプルプログラムでは、指定したセル範囲内のセル(行・列)をハイライト表示させるサンプルプログラムです。Intersectメゾッドは選択したセルが指定したセル範囲内か判定する時に使用します。指定範囲を指定する事で、範囲外のセルを選択した時は、何もしない(ハイライト表示しない)処理を行います。それでは、サンプルプログラムを交えて順番に説明致します。
●下記のプログラムは、シートモジュールのイベントプロシージャ「Worksheet SelectionChange」に登録します。
【プログラムの流れ】
① セル(C3)を起点とする表の範囲を取得して見出し部分の行1・列1分取得する範囲をずらします。
② ①で取得した表の範囲部分のずらした行1・列1部分が表の範囲からはみ出すので、表の範囲部分の行の最終行と最終列をー1にして、表範囲を揃えます。(数値部分のみを表範囲に指定します)
③ 現在のアクティブセルが表の範囲内か判定します。アクティブセルの数値部分は、④へ:数値部分以外は、このプログラムから抜けます。
【アクティブセルが範囲内の場合以下処理を実施】
④ 表の範囲のハイライト表示させる先頭行を代入
⑤ 表の範囲のハイライト表示させる最終行を代入
⑥ 表の範囲のハイライト表示させる先頭列を代入
⑦ 表の範囲のハイライト表示させる最終列を代入
⑧ 現在のアクティブセルの選択行の行番号を代入
⑨ 現在のアクティブセルの選択列の列番号を代入
⑩ 画面の更新を停止します。
⑪ 表の範囲(数値部分)のセルの背景色を消します。
⑫ 現在のアクティブセル位置にある選択行の背景色をグリーンに塗りつぶします。
⑬ 現在のアクティブセル位置にある選択列の背景色をグリーンに塗りつぶします。
⑭ 画面の更新を再開します。