変更されたセルの番地を特定するExcelVBA

変更されたセルの番地を特定するExcelVBA

ユーザーが何か入力した際、その入力したセルの番地を求めるVBAです。Rangeを取得したり、そこから列と行を取り出したり。


Worksheet_ChangeでTargetを取得

120501-3

VisualBasicEditorで、入力セルを特定したいシートのコード画面を開き、

Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox "変更されたセルは" & Target.Address & "です。"
End Sub

このように書きます。Worksheet_Changeで、シートが変更されたときこのコードが起動して、RangeオブジェクトのAddressプロパティを指定してメッセージボックスで表示してやります。

ただ、これだと$A$1のように絶対参照の記号がついちゃうので、

Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox "変更されたセルは" & Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) & "です。"
End Sub

A1のように出してやるにはこのように書きます。

でも、実際プログラムではセル番地よりも、列や行の番号をダイレクトに取得したほうが便利なことが多いので、その場合は、

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim x As Integer, y As Integer

  x = Target.Column
  y = Target.Row
  MsgBox "変更されたセルは" & x & "列" & y & "行目です。"
End Sub

このように書くと、それぞれを取得できます。

Module1に値を引き渡す

さっきはSheetのコード内で完結しちゃったのですが、この値を利用していろいろ長い処理を書きたいという場合は、値をModuleに引き渡してそちらでコードを書くほうが便利だったりします。

Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim x As Integer, y As Integer
  
  x = Target.Column
  y = Target.Row
  Call セルの特定(x, y)
End Sub

Targetから行と列の値を取得したら、それを引数にしてCallステートメントでプロシージャを呼び出します。

Module1

120501-1

呼び出されるプロシージャをModuleに書きます。

Sub セルの特定(ByVal x As Integer, ByVal y As Integer)
  MsgBox "変更されたセルは" & x & "列" & y & "行目です。"
End Sub

引数を受け取って、こちらのプロシージャで処理を行うことができます。

Public変数を利用する

値を引数として受け渡さず、Public変数を使うという方法もあります。

120501-2
  • Dim ・・・ そのプロシージャ内のみ使える
  • Private ・・・ そのモジュール内のみ使える
  • Public ・・・ 全てのモジュールで使える

このように宣言の形で使える範囲が変わります。今回は別モジュールで変数を使うので、Publicで宣言します。

Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)
  x = Target.Column
  y = Target.Row
  Call セルの特定
End Sub

Callステートメントでプロシージャを呼び出しますが、引数はなしです。

Module1

Public x As Integer, y As Integer

Sub セルの特定()
  MsgBox "変更されたセルは" & x & "列" & y & "行目です。"
End Sub

Moduleのほうで、変数をPublic宣言しておきます。引数の受け渡しなしで、使えます。

公開日:2012/05/01

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。