PowerShellでExcelを操作する方法|読み取り・書き込み・自動処理をサンプルで解説

PowerShell

PowerShellはWindowsの標準機能でありながら、Excelの読み書きや自動化処理にも対応できる非常に強力なツールです。
VBAやPythonを使わなくても、PowerShellを使えば業務レポートの自動生成や表の更新が可能です。

この記事では、PowerShellでExcelを開く、データを読み取る、書き込む、保存するなどの基本操作をサンプルコード付きでわかりやすく解説します。
エクセル業務を効率化したい方に、特におすすめの内容です。

前提:Excel操作にはCOMオブジェクトを使う

PowerShellでは Excel.Application というCOMオブジェクトを使ってExcelを操作します。
これはWindowsのExcelアプリ(Office)がインストールされていることが前提です。

Excelファイルを開いて中身を読む

基本コード

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

$workbook = $excel.Workbooks.Open("C:\Data\report.xlsx")
$sheet = $workbook.Sheets.Item(1)

# セルの内容を取得
$value = $sheet.Cells.Item(2, 1).Text
Write-Host "A2の値は:$value"

# 終了処理
$workbook.Close($false)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

ポイント

  • Visible = $false で画面を非表示に
  • Cells.Item(行, 列) で任意のセルを取得
  • 後始末(COMオブジェクトの解放)を忘れずに

Excelファイルに書き込む

セルに値を書き込む

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

$workbook = $excel.Workbooks.Open("C:\Data\report.xlsx")
$sheet = $workbook.Sheets.Item(1)

# A2セルに書き込み
$sheet.Cells.Item(2, 1).Value2 = "売上合計"

# 上書き保存して閉じる
$workbook.Save()
$workbook.Close($false)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

新規Excelファイルを作成して保存する

新規作成コード

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

$workbook = $excel.Workbooks.Add()
$sheet = $workbook.Sheets.Item(1)

# 見出しとデータを入力
$sheet.Cells.Item(1,1).Value2 = "名前"
$sheet.Cells.Item(1,2).Value2 = "売上"

$sheet.Cells.Item(2,1).Value2 = "山田"
$sheet.Cells.Item(2,2).Value2 = 120000

# ファイルを保存
$savePath = "C:\Data\new_report.xlsx"
$workbook.SaveAs($savePath)
$workbook.Close()
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

Write-Host "Excelファイルを保存しました:$savePath"

応用:複数行のデータを一括書き込み

$data = @(
@{Name = "佐藤"; Sales = 100000},
@{Name = "田中"; Sales = 95000},
@{Name = "鈴木"; Sales = 110000}
)

$row = 2
foreach ($entry in $data) {
$sheet.Cells.Item($row, 1).Value2 = $entry.Name
$sheet.Cells.Item($row, 2).Value2 = $entry.Sales
$row++
}

このように、PowerShellの配列とループを使えば、Excelに一括で表形式のデータを書き込むことも可能です。

よくあるエラーと対処法

エラー内容 原因と対策
Exception calling "Open" ファイルパスの指定ミス。拡張子含め正しいパスにする
Access Denied 別のアプリでファイルが開かれていると保存できない
null 参照エラー Excelやワークブック、シートの取得に失敗している可能性

Excel業務の自動化に活用できる例

  • 毎月の売上レポートを自動作成
  • フォルダ内のCSVファイルをExcelにまとめる
  • Excelで作ったテンプレートにデータを差し込む
  • 定期的にExcelを開いてメール送信する準備を自動で行う

まとめ

PowerShellを使えば、VBAや他のプログラミング言語を使わなくてもExcelの読み書きを自動化することが可能です。
特に、Windows環境で業務自動化を進めたい場合には、非常に有効な選択肢です。

今後は、複数ファイルのバッチ処理グラフ生成など、さらに高度な使い方も紹介予定です。
この記事を参考に、ぜひご自身の業務にもPowerShellのExcel操作を取り入れてみてください!

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