2015-06-12

PowerShellでExcelを操作する - セルの操作編2 -


PowerShellでは、Excelファイル(エクセル 拡張子xls、xlsx、xlsm等)を操作することもできます。

Excelファイルは、Officeソフトの中でも特に使用頻度が高く、業務で毎日使用しているという人も少なくないことと思います。

そんな毎日使用するものだからこそ、定型業務をPowerShellで自動化していきましょう!!


Excel操作 4回目の今回は「PowerShellでExcelを操作する - セルの操作編2 -」です。

前回の投稿では、セルC5やセルM8といった一箇所のセルに対して、文字列を入力したり、逆に取得する方法について記述しました。 参照:【PowerShellでExcelを操作する - セルの操作編 -

今回はその続きとして、指定範囲から文字列を取得したり、指定範囲をコピー&貼り付けする方法について書いていきます。



<前準備>

・Excel操作の過去記事をお読みいただき、C:\TESTフォルダ内に、AAA.xlsxというExcelファイルを作成していただくと、よりわかりやすいかと思います。
また、今回は事前にB2:C5に、画像のような文字列を入力しておいてください。



⇒ 過去の記事はこちら 【PowerShellでExcelを操作する - 基礎編 -


それでは早速、例文を記述していきます。



---------ここから-------------------------------------------------------------------------------------

# Excel操作 セルの操作編2


# Excelを操作する為の宣言
$excel = New-Object -ComObject Excel.Application

# 可視化する
$excel.Visible = $false

# 既存のExcelファイルを開く
$book = $excel.Workbooks.Open("C:\TEST\AAA.xlsx")

# ワークシートを番号で指定し、接続する
$sheet = $excel.Worksheets.Item(1)

# 範囲B2:B5の内容をテキストとして取得し、配列として変数に格納
$text = @($sheet.Range("B2:B5")).text

# メッセージボックスで変数textの内容を表示
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("科目は $text です。", "結果")

# 範囲B2:C5をコピーし、セルE2に貼り付ける
$sheet.Range("B2:C5").copy($sheet.Range("E2"))

# 上書き保存
$book.Save()

# Excelを閉じる
$excel.Quit()

# プロセスを解放する
$excel = $null
[GC]::Collect()

---------ここまで-------------------------------------------------------------------------------------

上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。

実行直後、メッセージボックスが表示されます。



処理完了後、C:\TESTフォルダ内のAAA.xlsxを開くと、画像のように入力されると思います。



それでは1行ずつ解説していきます。
(コマンドが記述してある部分だけを数えて1行目、2行目…としています)


<解説>

◆1行目~4行目
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$book = $excel.Workbooks.Open("C:\TEST\AAA.xlsx")
$sheet = $excel.Worksheets.Item(1)

この4行については割愛します。
内容がわからない場合は【PowerShellでExcelを操作する - 基礎編 -】をご覧ください。


◆5行目
$text = @($sheet.Range("B2:B5")).text

5行目では、セルB2からB5の範囲の値を文字列として取得し、変数textに格納しています。


◆6行目・7行目
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("科目は $text です。", "結果")

6行目・7行目では、5行目で取得し、変数に格納した文字列をメッセージボックスで表示させています。

※メッセージボックスの使用については【PowerShellでMessageBoxを使用する】をご覧ください。


◆8行目
$sheet.Range("B2:C5").copy( $sheet.Range("E2") )

8行目では、セルB2からC5の範囲をコピーし、セルE2に貼り付けています。
ここでE2セルは貼り付け位置の起点となります。


◆9行目~12行目
$book.Save()
$excel.Quit()
$excel = $null[GC]::Collect()

この4行についても同様に割愛させていただきます。
内容がわからない場合は【PowerShellでExcelを操作する - 基礎編 -】をご覧ください。


解説は以上となります。

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
ここで、参考までに「列ごとコピーする方法」と「行ごとコピーする方法」をご紹介します。

# A列を列ごとコピーし、C列に貼り付ける
$sheet.Range("A1").EntireColumn.Copy($sheet.Range("C1"))

# 1行目を行ごとコピーし、5行目に貼り付ける
$sheet.Range("A1").EntireRow.Copy($sheet.Range("A5"))


上記例文の8行目と基本的な構文は同じですが、copyメソッドの前に、「列ごと(=EntireColumn)」と「行ごと(=EntireRow)」が追加されています。
- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *


 Excelの操作において、コピー&ペーストは日常茶飯事です。
本稿を参考に、皆様の作業効率が向上することをお祈りいたします。


次回は「PowerShellでExcelを操作する - 行・列の操作編 -」を投稿致します。

おおまかな内容は次の通りです。
  ・行の挿入
  ・列の挿入
  ・使用行数の取得
  ・使用列数の取得

=======================================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=======================================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=======================================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/