回答編集履歴

1 コード修正

sho_cs

sho_cs score 3598

2015/09/01 11:40  投稿

VBAとPowerShellは全く別物なので操作も別物と考えてください。
比較的近いやり方だと以下のようになります。
```
# Excelを起動する
$excel = New-Object -ComObject Excel.Application
# ブックを開く
$book = $excel.Workbooks.Open("C:worksample.xls")
# シートを取得
$sheet = $book.Worksheets.Item(1)
# 最終行の行数取得
$lastRowIndex = $sheet.UsedRange.Rows.Count
# 最終行を取得
$lastRow = $sheet.UsedRange.Rows.Item($lastRowIndex)
# カンマで結合して出力
Write-Output ($lastRow.Formula -join ",")
# Excelを終了する
$excel.Quit()
[System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel) | Out-Null
```
PowerShellらしくやるなら
```
# Excelを起動する
$excel = New-Object -ComObject Excel.Application
# ブックを開く
$excel.Workbooks.Open("C:worksample.xls") | %{
   # シートを取得
   $_.Worksheets| %{
       # 最終行を取得
       $_.UsedRange.Rows.Item($_.UsedRange.Rows.Count) | %{
           # カンマで結合して出力
           Write-Output ($_.Formula -join ",")
       }
   }
}
# Excelを終了する  
$excel.Quit()  
[System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel) | Out-Null  
 
注:こちらは全シート分の最終行が出るようにしています。
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る