MSDN forum で質問が上がっていたので、 のでサンプルを作ってみました。
Excel シート上で、行や列が挿入(or 削除)されたことを検知するマクロです。
まずは動きをご覧ください。
# 質問が英文だったので、Excel の表示言語とメッセージを英語にしています。
OneDrive で共有したファイルでは日本語のメッセージにしました。
行・列の挿入・削除を検知する前提として、検知範囲(行と列)を指定しておきます。
# 動画の黄色部分(行:1-10、列:A-J)が検知範囲です。
この範囲内で行・列の挿入・削除が発生すれば、それを知らせるしくみです。
検知範囲の指定は、Excel ブックが開いたときのプロシージャで行っています。
(ThisWorkbook 内)
' ----------------------------------------------
Private Sub Workbook_Open()
With Sheets("Sheet1")
Set .RowRange = .Range("1:10")
Set .ColRange = .Range("A:J")
' ---
.RowCnt = .RowRange.Rows.Count
.ColCnt = .ColRange.Columns.Count
End With
End Sub
' ----------------------------------------------
シート内では次のコードを書きます。
(Sheet1 内)
' ----------------------------------------------
' --- for Row
Public RowRange As Range
Public RowCnt As Long
' --- for Column
Public ColRange As Range
Public ColCnt As Long
' --- check if Rows or Columns are deleted (added)
Private Sub Worksheet_Change(ByVal Target As Range)
' --- check Row count
If (RowRange.Rows.Count < RowCnt) Then
MsgBox RowCnt - RowRange.Rows.Count & " 行が削除されました"
RowCnt = RowRange.Rows.Count
End If
If (RowRange.Rows.Count > RowCnt) Then
MsgBox RowRange.Rows.Count - RowCnt & " 行が挿入されました"
RowCnt = RowRange.Rows.Count
End If
' --- check Columns count
If (ColRange.Columns.Count < ColCnt) Then
MsgBox ColCnt - ColRange.Columns.Count & " 列が削除されました"
ColCnt = ColRange.Columns.Count
End If
If (ColRange.Columns.Count > ColCnt) Then
MsgBox ColRange.Columns.Count - ColCnt & " 列が挿入されました"
ColCnt = ColRange.Columns.Count
End If
End Sub
' ----------------------------------------------
# 上のコードではインデント(見やすさ)のために全角スペースを先頭に付与しています。
実際のコードは全角スペースではなく、 [TAB] です。
なお、このファイル(マクロ付き Excel ファイル)を OneDrive で共有しました。
ご興味のある方は、ダウンロードしてお試しください。
Track_Insert-Delete.xlsm
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名の姓 and/or 名)を書いていただいた場合に限らせていただきます。
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
Excel シート上で、行や列が挿入(or 削除)されたことを検知するマクロです。
まずは動きをご覧ください。
# 質問が英文だったので、Excel の表示言語とメッセージを英語にしています。
OneDrive で共有したファイルでは日本語のメッセージにしました。
行・列の挿入・削除を検知する前提として、検知範囲(行と列)を指定しておきます。
# 動画の黄色部分(行:1-10、列:A-J)が検知範囲です。
この範囲内で行・列の挿入・削除が発生すれば、それを知らせるしくみです。
検知範囲の指定は、Excel ブックが開いたときのプロシージャで行っています。
(ThisWorkbook 内)
' ----------------------------------------------
Private Sub Workbook_Open()
With Sheets("Sheet1")
Set .RowRange = .Range("1:10")
Set .ColRange = .Range("A:J")
' ---
.RowCnt = .RowRange.Rows.Count
.ColCnt = .ColRange.Columns.Count
End With
End Sub
' ----------------------------------------------
シート内では次のコードを書きます。
(Sheet1 内)
' ----------------------------------------------
' --- for Row
Public RowRange As Range
Public RowCnt As Long
' --- for Column
Public ColRange As Range
Public ColCnt As Long
' --- check if Rows or Columns are deleted (added)
Private Sub Worksheet_Change(ByVal Target As Range)
' --- check Row count
If (RowRange.Rows.Count < RowCnt) Then
MsgBox RowCnt - RowRange.Rows.Count & " 行が削除されました"
RowCnt = RowRange.Rows.Count
End If
If (RowRange.Rows.Count > RowCnt) Then
MsgBox RowRange.Rows.Count - RowCnt & " 行が挿入されました"
RowCnt = RowRange.Rows.Count
End If
' --- check Columns count
If (ColRange.Columns.Count < ColCnt) Then
MsgBox ColCnt - ColRange.Columns.Count & " 列が削除されました"
ColCnt = ColRange.Columns.Count
End If
If (ColRange.Columns.Count > ColCnt) Then
MsgBox ColRange.Columns.Count - ColCnt & " 列が挿入されました"
ColCnt = ColRange.Columns.Count
End If
End Sub
' ----------------------------------------------
# 上のコードではインデント(見やすさ)のために全角スペースを先頭に付与しています。
実際のコードは全角スペースではなく、 [TAB] です。
なお、このファイル(マクロ付き Excel ファイル)を OneDrive で共有しました。
ご興味のある方は、ダウンロードしてお試しください。
Track_Insert-Delete.xlsm
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名の姓 and/or 名)を書いていただいた場合に限らせていただきます。
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・