Excel VBA 逆引き集 | 一番左のシートを取得

Excel VBA
スポンサーリンク

一番左のシートを取得

「左端(最初)のシート」を確実に扱う基本から、可視シートだけを対象にする安全版、他ブック対応、実務で使える例題までを初心者向けにわかりやすくまとめました。


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

Sub GetFirstWorksheet_Basic()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)
    MsgBox "一番左のワークシート: " & ws.Name
End Sub
VB
  • ポイント:
    • 1番目指定: 左端はインデックス1で取得できます(インデックスは左から1始まり)。
    • WorksheetsとSheets: グラフシートを含めたくないならWorksheetsが安全。グラフシートも対象にするならSheets(1)でもOK。

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

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

Sub Use_GetFirstWorksheet()
    Dim firstWs As Worksheet
    Set firstWs = GetFirstWorksheet()
    If firstWs Is Nothing Then
        MsgBox "ワークシートがありません。"
    Else
        MsgBox "左端シート: " & firstWs.Name
    End If
End Sub
VB
  • ポイント:
    • 対象の明示: Optional wbで他ブックにも対応。
    • 存在確認: シートが0枚ならNothingを返し安全に扱う。

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

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

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

Sub Use_GetFirstVisibleSheet()
    Dim firstVisible As Worksheet
    Set firstVisible = GetFirstVisibleSheet()
    If firstVisible Is Nothing Then
        MsgBox "可視のシートが見つかりません。"
    Else
        MsgBox "左端の可視シート: " & firstVisible.Name
    End If
End Sub
VB
  • ポイント:
    • 非表示対策: 左端がHidden/VeryHiddenでも、最初に可視なシートを返して画面操作エラーを避ける。

他ブックの左端のシートを取得する

Sub GetFirstWorksheet_OtherWorkbook()
    Dim wb As Workbook, ws As Worksheet
    Set wb = Workbooks("月次集計.xlsm") '開いているブック名を指定
    Set ws = wb.Worksheets(1)
    MsgBox "他ブックの左端: " & ws.Name
End Sub
VB
  • ポイント:
    • ブック指定: Workbooks("名前")で対象ブックを明確化。
    • 一貫性: 「左端へコピー・追加」などの処理と組み合わせやすい。

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

例題1:左端のシートを選択して見出しをセット

Sub InitFirstSheetHeader()
    Dim ws As Worksheet
    Set ws = GetFirstWorksheet()
    ws.Select
    ws.Range("A1").Value = "タイトル"
    ws.Range("B1").Value = "作成日"
    ws.Range("C1").Value = Date
    MsgBox "左端シートに見出しを設定しました。"
End Sub
VB
  • ポイント:
    • 定型作業: 左端に「一覧」や「トップ」シートを置く運用に相性が良い。

例題2:左端の可視シートへログを追記

Sub AppendLogToFirstVisible()
    Dim ws As Worksheet, r As Long
    Set ws = GetFirstVisibleSheet()
    If ws Is Nothing Then Exit Sub
    r = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
    ws.Cells(r, "A").Value = Now
    ws.Cells(r, "B").Value = Environ$("Username")
    ws.Cells(r, "C").Value = "処理完了"
    MsgBox "ログを左端の可視シートへ追記しました。"
End Sub
VB
  • ポイント:
    • 画面安全: 可視限定取得+最終行検出で実務的なログ追記。

例題3:左端に新規シートを挿入してアクティブ化

Sub AddBeforeFirstAndActivate()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add(Before:=ThisWorkbook.Worksheets(1))
    ws.Name = "トップ_" & Format(Now, "hhmmss")
    ws.Activate
End Sub
VB
  • ポイント:
    • 先頭追加: Before:=Worksheets(1)で左端に新規作成。トップページや目次の自動生成に便利。

実務の落とし穴と対策

  • 対象誤り:
    • ThisWorkbookとActiveWorkbook: マクロ格納ブックを確実に処理するならThisWorkbook、ユーザー操作中のブックならActiveWorkbook。混在させない。
  • 非表示シートの選択エラー:
    • 可視チェック: 画面操作(Select/Activate)前はVisible確認を挟むと安全。
  • Sheets vs Worksheetsの違い:
    • 用途に合わせる: グラフシートも含める必要がない場面ではWorksheetsで統一すると混乱が減る。

次の一歩(小課題)

  • 課題1: 左端の「可視」シートに、ファイルの最終更新日時をA1へ書き込む。
  • 課題2: 左端のシートをテンプレートとしてコピーし、左端に挿入して「Index_YYYYMMDD」命名。
  • 課題3: 左端から3枚分のシート名を取得して、新規ログシートに一覧出力する。

タイトルとURLをコピーしました