Excel VBA 逆引き集 | 最後のシートを取得

Excel VBA
スポンサーリンク

最後のシートを取得

「最後(右端)のシート」を確実に扱う基本から、可視シートだけを対象にする安全版、他ブック対応、実務で役立つ例題までを初心者向けに丁寧にまとめます。


基本:右端(最後)のワークシートを取得する

Sub GetLastWorksheet_Basic()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    MsgBox "最後のワークシート: " & ws.Name
End Sub
VB
  • ポイント: 最後のシートは「シート枚数のインデックス」で取得します。Worksheets.Countで枚数を取り、Worksheets(その数)が右端のワークシートです。
  • WorksheetsとSheets: グラフシートを含めないならWorksheetsが安全。Sheetsは図表シートも含むため用途で使い分けます。

安全テンプレート:例外なく「最後のワークシート」を返す

Function GetLastWorksheet(Optional wb As Workbook) As Worksheet
    If wb Is Nothing Then Set wb = ThisWorkbook
    If wb.Worksheets.Count = 0 Then
        Set GetLastWorksheet = Nothing
    Else
        Set GetLastWorksheet = wb.Worksheets(wb.Worksheets.Count)
    End If
End Function

Sub Use_GetLastWorksheet()
    Dim lastWs As Worksheet
    Set lastWs = GetLastWorksheet()
    If lastWs Is Nothing Then
        MsgBox "ワークシートがありません。"
    Else
        MsgBox "右端シート: " & lastWs.Name
    End If
End Sub
VB
  • ポイント: 実務では「どのブックを対象にするか」を明示するのが安定。Optional wbで他ブックにも対応できます。

可視シートだけを対象にする(非表示を除外)

Function GetLastVisibleSheet(Optional wb As Workbook) As Worksheet
    Dim i As Long
    If wb Is Nothing Then Set wb = ThisWorkbook

    For i = wb.Sheets.Count To 1 Step -1
        If wb.Sheets(i).Visible = xlSheetVisible Then
            Set GetLastVisibleSheet = wb.Sheets(i)
            Exit Function
        End If
    Next
    Set GetLastVisibleSheet = Nothing
End Function

Sub Use_GetLastVisibleSheet()
    Dim lastVisible As Worksheet
    Set lastVisible = GetLastVisibleSheet()
    If lastVisible Is Nothing Then
        MsgBox "可視のシートが見つかりません。"
    Else
        MsgBox "右端の可視シート: " & lastVisible.Name
    End If
End Sub
VB
  • ポイント: 最後のシートが非表示(Hidden/VeryHidden)の場合に備え、後ろから見て最初に「Visible」なものを返すロジックが安全です。

他ブックの最後のシートを取得する

Sub GetLastWorksheet_OtherWorkbook()
    Dim wb As Workbook, ws As Worksheet
    Set wb = Workbooks("月次集計.xlsm") '開いているブック名を指定
    Set ws = wb.Worksheets(wb.Worksheets.Count)
    MsgBox "他ブックの右端: " & ws.Name
End Sub
VB
  • ポイント: 「どのブックの右端か」を明示できれば同じ考え方で取得可能です。右端へ追加したい場合は Worksheets.Add After:=wb.Worksheets(wb.Worksheets.Count) が定番です。

例題で練習:右端を使う定番タスク

例題1:右端のシートに日付を記録

Sub LogDateToLastSheet()
    Dim ws As Worksheet
    Set ws = GetLastWorksheet()
    ws.Range("A1").Value = "更新日"
    ws.Range("B1").Value = Date
    MsgBox "右端シートに日付を記録しました。"
End Sub
VB
  • ポイント: 右端=最新追加の出力シート、といった運用に相性が良いです。

例題2:右端に新規シートを追加してアクティブ化

Sub AddAfterLastAndActivate()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    ws.Name = "出力_" & Format(Now, "hhmmss")
    ws.Activate
End Sub
VB
  • ポイント: 末尾に追加したいときは After:=Worksheets(Worksheets.Count) を使うのが最短です。

例題3:右端の可視シートを選択(非表示ならスキップ)

Sub SelectLastVisibleSheet()
    Dim ws As Worksheet
    Set ws = GetLastVisibleSheet()
    If Not ws Is Nothing Then ws.Select
End Sub
VB
  • ポイント: 可視チェックを挟むと、非表示が右端でも確実に選択できます。

実務の落とし穴と対策

  • 対象誤り: ThisWorkbookとActiveWorkbookの混同で別ブックを触ってしまう事故が多い。常にどちらを使うかを意図で統一しましょう。
  • 非表示シート: 右端が非表示だと「選択」や「画面操作」が失敗します。可視シート限定の取得関数を用意しておくと安心です。
  • SheetsとWorksheets: グラフシートを含める必要がないならWorksheetsを使うと混乱が減ります。末尾への挿入・取得は枚数インデックスで行うのが基本です。
タイトルとURLをコピーしました