PowerShellによりExcelファイルをシート毎にファイル分割するサンプルコード

記事内に広告が含まれています。

PowerShellによりExcelファイルを、シート毎にファイル分割するサンプルコードを紹介します。

仕様

シートが複数あるExcelファイルを、シートごとにブック分割します。

以下のようなサンプルファイルを用意します。

実行前

PowerShellのScriptファイル(*.ps1)を実行すると各シートがファイルに運活されます。

実行完了後に、以下3ファイルができるイメージです。

  1. 「AAA.xlsx」
  2. 「BBB.xlsx」
  3. 「CCC.xlsx」

ソースコード

ソースコードはPowerShellで記載しています。

excelファイルはデータとして扱い、マクロ等は一切入れません。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "book.xlsx"
$filePath = (Convert-Path .) + "\" + $fileName

$book = $excel.Workbooks.Open($filePath)

for ($i=1; $i -le $book.worksheets.Count; $i++){

    $newbook = $excel.Workbooks.Add()

    # シートコピー
    $book.Worksheets($i).copy($newbook.Worksheets(1))
    
    #デフォルトシートの削除
    if ($newbook.worksheets(2).Name -eq "Sheet1"){
        $newbook.Worksheets(2).Delete()
    }

    # 新ブックの保存
    $newBookPath =(Convert-Path .) + "\" + $i.ToString() + "_" + $newBook.Sheets(1).Name +".xlsx"
    [void]$newbook.SaveAs($newBookPath)

    # 新ブックのクローズ
    [void]$newbook.Close($false)
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($newbook)

}

# コピー元を保存、クローズ
[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行

では実行します。

実行手順

実行手順は簡単です。

「readWorkSheetExcel .ps1」上で右クリックして、「PowerShellで実行」をクリックするだけです。

実行結果

実行後、各シートごとにファイルができています。

※整列させるためにシート順にファイル名の頭にシート番号を入れます。

1_AAA.xlsx

2_BBB.xlsx

3_CCC.xlsx

参考情報

環境

下記の環境で作成・実行しております。

No.環境バージョン
1OSWindows10
2PowerShell5.1

VBAサンプル版

VBAサンプル版も用意してあります。

ケースバイケースで使ってみてください。

以上です。

コメント

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