一番左のシートを取得
「左端(最初)のシート」を確実に扱う基本から、可視シートだけを対象にする安全版、他ブック対応、実務で使える例題までを初心者向けにわかりやすくまとめました。
基本:左端(最初)のワークシートを取得する
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。混在させない。
- ThisWorkbookとActiveWorkbook: マクロ格納ブックを確実に処理するなら
- 非表示シートの選択エラー:
- 可視チェック: 画面操作(Select/Activate)前は
Visible確認を挟むと安全。
- 可視チェック: 画面操作(Select/Activate)前は
- Sheets vs Worksheetsの違い:
- 用途に合わせる: グラフシートも含める必要がない場面では
Worksheetsで統一すると混乱が減る。
- 用途に合わせる: グラフシートも含める必要がない場面では
次の一歩(小課題)
- 課題1: 左端の「可視」シートに、ファイルの最終更新日時をA1へ書き込む。
- 課題2: 左端のシートをテンプレートとしてコピーし、左端に挿入して「Index_YYYYMMDD」命名。
- 課題3: 左端から3枚分のシート名を取得して、新規ログシートに一覧出力する。
