マクロレコーダーで簡単に遊んでみると、次のコードが残っています。
Sub insertRow()
Dim insertBeforeRow
insertBeforeRow = 1
ActiveSheet.Rows(insertBeforeRow).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
' The following two lines are the same - both active the second sheet in the book
Sheet2.Activate
Sheets(2).Activate
ActiveSheet.Rows(insertBeforeRow).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
次に、デバッガーで簡単にプレイすると、ActiveSheet にプロパティがあることがわかりますindex
。これは Sheets コレクション内のインデックスです。( をクリックActiveSheet
し、右クリックして [ウォッチの追加] を選択します)
私はこれを思いつきました (エラーチェックはありません。いくつか追加することを忘れないでください! - ワークブックの最後のシートを選択してこれを実行すると、恐ろしい「うーん、ダミーではありません」というエラー音とメッセージ ボックスが表示されます。 )
Sub getActiveSheet()
Dim curSheetIndex, numSheets, secondSheetIndex
curSheetIndex = ActiveSheet.Index
secondSheetIndex = curSheetIndex + 1
' the following two lines are equivalent - both operate on the Active Sheet
ActiveSheet.Cells(1, 1) = "Active Sheet"
Sheets(curSheetIndex).Cells(1, 1) = "Active Sheet"
' finally, operate on the following sheet
Sheets(secondSheetIndex).Cells(1, 1) = "Sheet following Active Sheet"
End Sub
目的に合わせて 2 つのスニペットを結合できます。VBA 環境のデバッガーは、利用可能な機能とプロパティを発見するという点で優れています。正直なところ、これが VBA でのこのような小さなタスクをとても楽しんでいる理由の 1 つです。多くの場合、デバッガーと Excel のオブジェクト モデルに少し慣れていれば、目的の効果をすばやく簡単に実現できます。