18
24

More than 5 years have passed since last update.

複数Excelファイルの各シートのフォーカスをA1に、表示倍率を100%に統一するPowerShell

Last updated at Posted at 2016-08-18

実現したいこと

Excelファイルで資料を作成する際、
最終的に各シートのフォーカスをA1に、表示倍率を100%に統一したい、とします。
対象が1ファイルだけで、数シートなら手動でやっても構わないのですが、
ファイル数やシート数が多い場合は大変なので、PowerShellでスクリプト化しておきます。

コード

フォーカスと表示倍率を統一する.ps1

# 処理対象のファイル名を取得(複数可) 
# ここではスクリプトファイルと同じフォルダにあるファイルを対象とします。
$targetFiles = Get-ChildItem -Path *.xlsx

# Excelオブジェクト作成
$excel = New-Object -ComObject Excel.Application

# 非表示のまま処理する
$excel.Visible = $false

# xlsx ファイルのループ
foreach ($file in $targetFiles) {

    # エクセルを開く
    $book = $excel.Workbooks.Open($file.FullName)

    # シートのループ
    foreach ($WorkSheet in $excel.Worksheets) {
        # 非表示シートは対象外
        if ($WorkSheet.Visible -ne $false) {
            # 処理対象のシートを選択状態にする
            $WorkSheet.Activate()

            # セル「A1」を選択状態にする
            $WorkSheet.Cells.Item(1,1).Select() | Out-Null

            # 表示倍率を100%にする
            $excel.ActiveWindow.Zoom = 100
        }

    }

    # 一番左のシートを選択状態にする(おまけ)
    $excel.Worksheets.Item(1).Activate()

    # 上書き保存する
    $book.save()
    $book.close()

}

# 閉じる
$excel.Quit()

# プロセスを解放する
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel

実行例

実行前確認

実行前は、以下のようにフォーカスはA1以外、表示倍率は100%以外になっています。
[Sheet1]
image.png

[Sheet2]
image.png

処理実行

D:\>powershell -ExecutionPolicy Unrestricted .\フォーカスと表示倍率を統一する.ps1

実行後確認

実行後は、以下のようにフォーカスはA1、表示倍率は100%に統一されました。
[Sheet1]
image.png

[Sheet2]
image.png

補足

  • 動作確認環境は Windows 10、PowerShell 5、Excel 2013です。多少前のバージョンでも大丈夫だと思います。
  • 処理後のファイルを別名で保存したい場合は$book.save()のところを$book.saveAs("別名保存先ファイル名")にしてください。
  • Excelオブジェクトのプロセス解放の仕方はネットで調べるといろいろあるようですが、私は以下のサイトの方法を参考にしています。
18
24
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
24