※重要:SharePoint・ブラウザ版での動作制限について
1. はじめに:Excelのこんなお悩みありませんか?
多くのシート(Worksheet)が含まれるExcelブックを扱っていると、こんなストレスを感じることはないでしょうか。
- 「シートを切り替えるたびに、前回作業していたセルが表示されてしまい、毎回A1セルに戻すのが面倒だ」
- 「シートによってズーム倍率がバラバラで、切り替えるたびに拡大・縮小操作をしている」
これらの「ちょっとした手間」も、積もり積もれば大きな作業効率の低下につながります。
この記事では、**「シートを切り替えたら、常にA1セルを選択し、なおかつ表示ズームを75%(任意の倍率)に自動で戻す」**というVBA(マクロ)をご紹介します。
さらに、この記事の後半では、多くの方が疑問に思われる**「このマクロはSharePointやブラウザ版のExcel (Excel for the web) でも動くのか?」**という点について、明確な回答と代替策を詳しく解説いたします。
2. 解決策:デスクトップ版ExcelならVBAで自動化できます
このお悩みは、Excelに標準搭載されている「VBA(Visual Basic for Applications)」というプログラミング機能を使うことで、鮮やかに解決できます。
具体的には、「ブック内のいずれかのシートがアクティブになった時(=切り替えられた時)」というイベント(きっかけ)をVBAが検知し、自動で処理を実行するように設定します。
3. 【VBAコード】設定手順と完全コード
このVBAは、特定のシートではなく、ブック全体(どのシートが選ばれても)に適用する必要があるため、「ThisWorkbook」モジュールに記述します。
設定手順
- 自動化したいExcelブックを デスクトップ版Excel で開きます。(※ブラウザ版では設定できません)
- キーボードの
Alt+F11を同時に押し、VBAエディタ(Visual Basic Editor)を起動します。 - 画面左側の「プロジェクト」ウィンドウから、「Microsoft Excel Objects」フォルダ内にある「ThisWorkbook」を探し、ダブルクリックします。
- 中央に表示された白いコードウィンドウに、以下の【完全コード】をすべてコピーして貼り付けてください。
- VBAエディタを閉じ、Excelに戻ります。
- ファイルを保存します。その際、必ずファイルの種類を「Excel マクロ有効ブック (*.xlsm)」に変更して保存してください。
【完全コード (ThisWorkbook モジュール)】
Option Explicit
' 既定のズーム倍率(ここをお好みの数値に変更してください)
Private Const DEFAULT_ZOOM As Long = 75
' ブックを開いた直後にも、最初のシートに適用する
Private Sub Workbook_Open()
On Error Resume Next
ApplyViewFor ActiveSheet
On Error GoTo 0
End Sub
' 任意のシートがアクティブになったとき(切り替えられたとき)に実行
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' 共通処理を呼び出す
ApplyViewFor Sh
End Sub
' A1選択とズームを適用する共通処理
Private Sub ApplyViewFor(ByVal Sh As Object)
' エラーが発生しても処理を中断せず、最後に抜ける
On Error GoTo ExitHandler
' グラフシートなどではなく、通常の「ワークシート」の場合のみ処理
If TypeOf Sh Is Worksheet Then
Dim ws As Worksheet
Set ws = Sh
' 処理中の画面ちらつきを防ぎ、イベントの多重発生を防ぐ(重要)
Application.ScreenUpdating = False
Application.EnableEvents = False
' --- 1. ズーム設定 ---
' (アクティブなウィンドウに対して適用)
If Not ActiveWindow Is Nothing Then
On Error Resume Next ' ズーム設定失敗に備える
ActiveWindow.Zoom = DEFAULT_ZOOM
On Error GoTo 0
End If
' --- 2. A1 セルを選択 ---
Dim tgt As Range
Set tgt = ws.Range("A1")
' もしA1が結合セルの場合、結合範囲の先頭セルを対象にする
If tgt.MergeCells Then
Set tgt = tgt.MergeArea.Cells(1, 1)
End If
' もしシートが保護されていて A1 が選択できない場合の対策
If ws.ProtectContents And tgt.Locked Then
Dim c As Range
Dim found As Boolean
found = False
On Error Resume Next
' 使用されているセル範囲から、最初の「ロックされていない」セルを探す
For Each c In ws.UsedRange.Cells
If Not c.Locked Then
Set tgt = c
found = True
Exit For
End If
Next c
On Error GoTo 0
' ロック解除セルが見つからなければ、選択操作をスキップ
If Not found Then GoTo ExitHandler
End If
' 最終的なセルを選択
tgt.Select
End If
ExitHandler:
' 停止していた設定を必ず元に戻す(非常に重要)
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
コードの簡単な解説
Private Const DEFAULT_ZOOM As Long = 75: ここの数字を100や80に変えるだけで、お好みの固定倍率に変更できます。Workbook_SheetActivate: これが「シートが切り替えられた時」に自動実行されるVBAの「イベント」です。Application.EnableEvents = False: マクロがマクロ自身を呼び出して無限ループに陥るのを防ぐための、重要なおまじないです。- シート保護への対応: このコードは、シートが保護されていてA1セルが選択できない場合でもエラー停止せず、代わりに選択可能な(ロックされていない)セルを探す、高度なエラー回避処理を含んでいます。
4. 【最重要】SharePoint・ブラウザ版Excelでの動作について
さて、ここが最も重要な注意点です。このVBAマクロを仕込んだファイルをSharePointやOneDriveに保存した場合、どのように動作するのでしょうか。
結論:ブラウザ版 (Excel for the web) ではVBAは一切動作しません
SharePointやOneDriveにあるExcelファイルを、EdgeやChromeなどのWebブラウザで開く(=Excel for the web)場合、設定したVBAマクロは一切実行されません。
したがって、ブラウザ上でシートを切り替えても、A1セルへの移動やズーム固定は行われません。
なぜブラウザ版ではVBAが動かないのか?
- VBAの実行環境がないため VBAは、WindowsやMacにインストールされた「デスクトップ版Excelアプリケーション」が持つ機能です。WebブラウザはVBAを実行するための仕組み(エンジン)を持っていません。
- シート切り替えイベント (SheetActivate) が使えないため ブラウザ版Excelの自動化機能として「Office Scripts」がありますが、これはVBAとは全く異なるものです。そして現在のOffice Scriptsでは、「シートを切り替えた時」をきっかけにスクリプトを自動実行するイベント機能は提供されていません。
SharePoint上のファイルでVBAを動作させる唯一の方法
SharePointに保存されているファイルであっても、VBAを正しく動作させる方法が一つだけあります。 それは、「アプリで開く」機能を使って、デスクトップ版Excelでファイルを開くことです。
ブラウザでSharePointライブラリを開き、対象の .xlsm ファイルを選択して「開く」→「アプリで開く」を選択します。 これにより、ご自身のPCにインストールされているデスクトップ版Excelが起動します。この状態であれば、VBAは正常に動作し、シート切り替えのたびにA1セル選択とズーム固定が実行されます。
5. ブラウザ版Excelでズームを固定する代替策は?
「VBAが動かないのは分かった。では、ブラウザ版だけでズームを固定する方法はないのか?」という疑問もあるかと存じます。
Excelの機能では「不可」
残念ながら、Excel for the web の機能として、ブックに既定のズーム倍率を保存したり、シート切替時にズームを固定したりする方法は、現在のところ存在しません。Office Scriptsでも画面表示ズームを操作することはできません。
唯一の代替策:ブラウザ自体の「ページズーム」機能
Excelの機能ではありませんが、**Webブラウザ自体の「ページズーム機能」**を使うことで、擬似的に表示を固定することは可能です。
- 操作方法: Excel for the web を開いているブラウザ画面で、
Ctrlキーを押しながらマウスホイールを操作するか、Ctrl+-(マイナスキー) を押して、ページ全体の表示を 75% などにします。 - 動作: 多くのブラウザ(EdgeやChrome)は、サイト(ドメイン)ごとにページの表示倍率を記憶します。
- メリット・デメリット:
- メリット: 一度設定すれば、次回以降もそのSharePointサイトは指定した倍率で表示されます。
- デメリット: あくまでWebページ全体を縮小しているだけです。そのため、Excelのシート部分だけでなく、上部のリボンメニューなども含めてすべてが小さくなります。
6. まとめ
- Excelでシート切替時にA1セル選択&ズーム固定を自動化するには、**デスクトップ版ExcelでVBA(マクロ)**を使います。
- 設定は「ThisWorkbook」モジュールに行い、
*.xlsm形式で保存する必要があります。 - SharePoint上のファイルでも、「アプリで開く」でデスクトップ版を起動すればVBAは正しく動作します。
- ブラウザ版 (Excel for the web) ではVBAは動作せず、シート切替イベントも利用できません。
- ブラウザ版での代替策は、ブラウザ自体のページズーム機能を使うしかありませんが、これはExcelの機能とは異なります。
VBAによる自動化は非常に強力ですが、「デスクトップ版でのみ有効な機能」であることを理解し、ファイルを共有する相手にもその前提を伝えておくことが重要です。
