Excel VBAがWindows 11で停止する?実行時エラー9とWindows・Workbooksの確認

Excel VBAがWindows(“Book名.xlsx”).Activateなどの行で「実行時エラー9:インデックスが有効範囲にありません」と止まる場合は、まずその名前のウィンドウやブックが、現在のExcelから参照できるかを確認します。Windows 11へ移行した後に起きたというだけで、OSの互換性不具合と断定はできません。

目次

エラー9は何を示す?

Microsoftのエラー9の説明では、存在しない配列要素やコレクションのメンバーを参照した場合などが挙げられています。「ブック間を移動できない」という専用のエラーではありません。止まった行が配列、シート、ブック、ウィンドウのどれを参照しているかを先に見ます。

旧記事の「約8割成功・2割停止」という比率や、Windows 11が原因であるとの推測は、一般的な発生率や確定原因として扱いません。実際のブック・コード・Excelのビルドで再現条件を確認する必要があります。

WindowsとWorkbooksの違い

Windowsはウィンドウ、WorkbooksはそのExcelアプリケーションで開いているブックのコレクションです。同じブックに複数のウィンドウを開いている場合など、ウィンドウの表示名とブック名が一致しないことがあります。ブックを指定したいのか、特定の表示ウィンドウを指定したいのかで選びます。

Windows("Book名.xlsx").Activate
Workbooks("Book名.xlsx").Activate

この2行は比較用です。下の行へ機械的に置換すれば必ず直るわけではありません。対象ブックが開いていない、名前・拡張子が違う、別のExcelインスタンスで開かれている場合は、Workbooks側でも対象が見つかりません。参照:Workbooks、Windows.Item。

まず現在のExcelから見える名前を一覧にする

元ファイルとコードをコピーしてから確認します。次の診断用マクロはブック内容を変更せず、VBEのイミディエイトウィンドウへ名前を出力します。VBEでCtrl+Gを押して出力を確認してください。

Sub ListOpenObjects()
    Dim wb As Workbook
    Dim wn As Window
    For Each wb In Application.Workbooks
        Debug.Print "Workbook:", wb.Name, wb.FullName
    Next wb
    For Each wn In Application.Windows
        Debug.Print "Window:", wn.Caption
    Next wn
End Sub

出力された名前を停止行の文字列と比べます。ファイル名の変更、xlsx/xlsmの違い、空白、保存前のBook1などに注意します。画面上では開いていても、この一覧に出なければ、別インスタンスや保護ビューなどの状態を確認します。保護を無条件に解除して診断しないでください。

可能ならActivateに依存しない参照にする

セルの読み取りや更新が目的なら、ブックとシートを変数で明示し、ActiveWorkbookや選択状態に依存しない書き方を検討します。次はすでに開いているブックを名前で探し、A1を表示するだけの例です。シート名とブック名は実際の対象へ置き換えてください。

Sub ReadTargetCell()
    Dim wb As Workbook
    Dim candidate As Workbook
    For Each candidate In Application.Workbooks
        If StrComp(candidate.Name, "Book名.xlsx", vbTextCompare) = 0 Then
            Set wb = candidate
            Exit For
        End If
    Next candidate
    If wb Is Nothing Then
        MsgBox "このExcelで対象ブックが開かれていません。"
        Exit Sub
    End If
    Debug.Print wb.Worksheets("Sheet1").Range("A1").Value
End Sub

Sheet1が存在しなければ最後の行でもエラー9になります。ブックだけでなくシート名も確認してください。ThisWorkbookはマクロを格納するブックであり、操作したいブックと常に同じではありません。

まだ止まるときの切り分け

・停止した正確な行、Err.Number、エラー文章を記録する。
・同じファイルを同じ順で開いた場合に再現するか、最小コードで確認する。
・イベントマクロや他の処理が対象を閉じる/名前を変えるタイミングがないか確認する。
・Excelの版・ビルド、32/64ビット、アドインの有無を記録する。

On Error Resume Nextで広い範囲のエラーを隠すと、別のブックへ処理が進むなどの誤動作を見逃します。OSやOfficeの更新は管理方針に従って確認しますが、エラー9の名前参照ミスを更新だけで解決できるとは限りません。

相談時は機密データを除いた再現用ブックと最小コードを用意し、Microsoftサポートや管理者へ、停止行と名前一覧を伝えます。正常完了だけでなく、意図したブック・シートの結果になっていることまで確認してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメント一覧 (2件)

コメントする

目次