EXCEL VBA アクティブセルが範囲内に含まれているかの判定・指定した範囲内のセル変更の判定(Intersect)

 

 

EXCEL VBA アクティブセルがセル範囲内に含まれているかの判定・指定した範囲内のセル変更されたかの判定(Intersectメゾット)

 

 

 ●はじめに

今回説明するのは、指定したセルが範囲内に含まれているかを判定するIntersectメゾットの利用方法を説明いたします。通常の使い方では複数のセル範囲を指定して重なっている部分のセル位置を取得する時に使用します。また、イベントプロシージャと組み合わせることにより、特定のセルを変更した時に処理を実行するなど様々な所で利用する事が出来ます。それでは、サンプルプログラムを交えて順番に説明致します。

 

●【Intersectメゾットの活用方法が記載されていますので、下記を参照して下さい】

EXCEL VBA 選択セル・選択行・列 ハイライト表示・目立たせる・見やすく・強調)テクニック

●【Intersectメゾット (Excel)、下記を参照して下さい】(Microsoft社 様)】

https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.intersect

 

 

 ●書式の説明

● Intersectメゾットを利用するには、下記の通りに設定を行います。

・ オブジェクト.Intersect(Arg1,Arg2,Arg3,…..Arg30)         ※Arg・・・セル範囲

【使用例①】
・ 下記の使用例は、2つのセル範囲 ・セル範囲「A1~C5」とセル範囲「B4~D8」の重なっているセル範囲を取得する方法です。
Intersect(Range(“A1:C5”), Range(“B4:D8”))
【サンプルプログラム】

 

【使用例②】
・ 下記の使用例は、アクティブセルの位置が指定したセルの範囲内か判定するサンプルプログラムです。Applicationオブジェクト・Intersectメゾットを利用する事で判定する事ができます。指定範囲をセル(A1~C5)を指定範囲内として、それ以外を指定範囲外としてアクティブセルセル位置に対して判定します。

【サンプルプログラム】

 

 

 

 

 

EXCEL VBA セル範囲内のセル内容を変更したら実行・入力後に処理実行(Intersectメゾット)

 

 

 ●プログラム説明 (サンプル①)

下記のサンプルプログラムは、指定したセルの範囲内のセルの内容を変更した時に、処理を実行するサンプルプログラムです。下記のプログラムではマスターデータとなる人事台帳の内容を登録・変更等、行った際に担当者の変更履歴が分かるように、登録データ単位で、担当者・日時・変更場所を記録します。それでは、順番に説明いたします。

 

●下記のプログラムは、シートモジュールのイベントプロシージャ「Worksheet change」に登録します。
【プログラムの流れ】
① 指定範囲として列(A列~E列)を指定します。(この範囲を変更した時に処理を実行します。)
② 現在のアクティブセルが指定範囲内(A列~E列)か指定範囲外か判定します。
③ 判定の結果、アクティブセルが(A列~E列)以外の場合は、何もしない。(プログラム終了)
④ 判定の結果、アクティブセルが(A列~E列)以内の場合は、以下の処理を実行します。
⑤ アクティブセルの行番号を取得します。
⑥ アクティブセルの列番号を取得します。
⑦ イベント発生を無効化します。※無効化しないと⑧⑨⑩の処理がイベントプロシージャー「Worksheet Change」に反応してしまい無限ループするため。
⑧ セル(G列)にEXCELアプリケーション・ユーザー名を転記します。※変更したユーザー
⑨ セル(F列)に現在の日時を転記します。※変更日時
⑩ セル(H列)に変更した項目を転記します。※社員番号・氏名・カタカナ・生年月日のいずれかの変更項目
⑪ イベント発生の有効化に戻します。

 

 

 

 

 

●実行前~実行後 ※セルA列~F列(社員番号・氏名・カタカナ・性別・生年月日)の内容を変更すると、変更日時と変更者(EXCELアプリケーションユーザー名)・変更場所(社員番号・氏名・カタカナ・性別・生年月日)が自動的に変更情報として記録されます。
(画面クリックして拡大)

 

 

 

EXCEL VBA セル範囲内の選択セルのをハイライト表示(目立たせる強調)します。(Intersectメゾット)

 

 

 ●プログラム説明 (サンプル②)

下記のサンプルプログラムでは、指定したセル範囲内のセル(行・列)をハイライト表示させるサンプルプログラムです。Intersectメゾッドは選択したセルが指定したセル範囲内か判定する時に使用します。指定範囲を指定する事で、範囲外のセルを選択した時は、何もしない(ハイライト表示しない)処理を行います。それでは、サンプルプログラムを交えて順番に説明致します。

●下記のプログラムは、シートモジュールのイベントプロシージャ「Worksheet SelectionChange」に登録します。

 

【プログラムの流れ】
① セル(C3)を起点とする表の範囲を取得して見出し部分の行1・列1分取得する範囲をずらします。
② ①で取得した表の範囲部分のずらした行1・列1部分が表の範囲からはみ出すので、表の範囲部分の行の最終行と最終列をー1にして、表範囲を揃えます。(数値部分のみを表範囲に指定します)
③ 現在のアクティブセルが表の範囲内か判定します。アクティブセルの数値部分は、④へ:数値部分以外は、このプログラムから抜けます。
【アクティブセルが範囲内の場合以下処理を実施】
④ 表の範囲のハイライト表示させる先頭行を代入
⑤ 表の範囲のハイライト表示させる最終行を代入
⑥ 表の範囲のハイライト表示させる先頭列を代入
⑦ 表の範囲のハイライト表示させる最終列を代入
⑧ 現在のアクティブセルの選択行の行番号を代入
⑨ 現在のアクティブセルの選択列の列番号を代入
⑩ 画面の更新を停止します。
⑪ 表の範囲(数値部分)のセルの背景色を消します。
⑫ 現在のアクティブセル位置にある選択行の背景色をグリーンに塗りつぶします。
⑬ 現在のアクティブセル位置にある選択列の背景色をグリーンに塗りつぶします。
⑭ 画面の更新を再開します。

 

 

 

 ●実行前~実行後 ※表の数値部分を選択(アクティブセル)し、該当する行と列がハイライトで表示されます。(ハイライト表示されるのは、数値部分のみで、見出しや・表以外の位置では、ハイライト表示されないように設定されています。)
(画面クリックして拡大)

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。