VBAだけじゃない!PowerShellでもExcel操作

コマンド&スクリプト

それ、PowerShellでもできます!

Excel資料が幅を利かせてる職場では、効率化と称してVBAを駆使したツール作りはじめ、案外それに時間がかかってしまったり、実運用でバグが出たりと、余計効率悪くなったりするもんですけど、VBAを選択する理由は何でしょう。
VBScriptもあるだろうし、別に他のメジャーな言語、たとえばPythonとかでもいいと思うんです。

VBAでExcel効率化を図ろうとするのは、知らないって理由が大半でしょう。

VBAだけがExcelを自動化する術ではありません。
VBAを使うのであればPowerShellも知っておこうよ、という思いを込めてPowerShellによるExcel操作入門記事を作成中です。

PowerShellでExcel自動化、とことんやってみましょう。

スポンサーリンク

PowerShellでExcel操作入門

Excel起動

PowerShellからExcelを起動してみます。

PS C:\Users\taku\Desktop> $xls = new-object -com excel.application

あれ? 何も起こりません。

tasklistを確認してみます。

PS C:\Users\taku\Desktop> tasklist | findstr /i excel

EXCEL.EXEというアプリが見つかりました。確かにExcelは起動しているようです。
PowerShellのターミナルウィンドウから、以下を入力してみます。

PS C:\Users\taku\Desktop> $xls.visible = 1

ターミナルウィンドウの背面にExcelが表示されました。Visibleが1になったことで可視化されたようです。

起動したExcelを強制終了してみます。

PS C:\Users\taku\Desktop> taskkill /im excel.exe /f

tasklistでEXCEL.EXEが残っていないか確認してみましょう。

PS C:\Users\taku\Desktop> tasklist | findstr /i excel

Excelブック、ワークシート新規作成

Excelブックを新規作成します。
まずはExcel.ApplicationのCOMオブジェクトを生成し、可視化します。

PS C:\Users\taku\Desktop> $xls = new-object -com excel.application
PS C:\Users\taku\Desktop> $xls.visible = 1

次にWorkBookを追加します。

PS C:\Users\taku\Desktop> $book = $xls.workbooks.add()

このaddの後の()は必ずつけてください。
$book = $xls.workbooks.add
として実行しても、WorkBookは表示されません。

正しく実行すると、シートが表示されますので、操作してみましょう。
J10のセルに”AAAA”と記入してみます。

PS C:\Users\taku\Desktop> $book.worksheets(1).cells(10,10) = "AAAA"

worksheets(1)の1は、1番目のシートの意味です。今回の場合はシートは一つだけなので1しかありません。

Excel セルのアクセス方法

Cells

Cellsを使ってセルにアクセスできます。

Cells(行番号,列番号)

B1の内容を書き換えたい場合は、Cells(1,2)と指定します。

PS C:\Users\taku\Desktop> $book.worksheets(1).cells(1,2) = "B1"
PS C:\Users\taku\Desktop>

Range

Rangeを使って範囲指定できます。

PS C:\Users\taku\Desktop> $book.worksheets(1).range("B1") = "B1"
PS C:\Users\taku\Desktop> $book.worksheets(1).range("C2:E3") = "C2:E3"

RangeとCellsを組み合わせて範囲指定することもできます。

PS C:\Users\taku\Desktop> $s=$book.worksheets(1)
PS C:\Users\taku\Desktop> $s=range($s.cells(2,3), $s.cells(3,5)) = "C2:E3"

Excel 文字に太字、斜体の設定

セルのプロパティを操作して文字を変更できます。

PS C:\Users\taku\Desktop> $book.worksheets(1).range("C1:C3") = "HELLO"
PS C:\Users\taku\Desktop> $book.worksheets(1).range("C2").font.bold = 1
PS C:\Users\taku\Desktop> $book.worksheets(1).range("C3").font.italic = 1
PS C:\Users\taku\Desktop>

Excel セルの内容を削除

セル内のテキストを削除するには、Clear()を使います。


この状態から、Clear()を使うと、

PS C:\Users\taku\Desktop> $book.worksheets(1).range("C1:C3").clear()
PS C:\Users\taku\Desktop>

こうなります。

Excel セル文字色の変更

文字色を赤色にしてみます。Font.Colorで指定する数値は、16進数で、青緑赤の順で各1バイトの数値を指定すればよいです。

PS C:\Users\taku\Desktop> $book.worksheets(1).range("A1:C3") = "RED"
PS C:\Users\taku\Desktop> $book.worksheets(1).range("A1:C3").font.color = 0x0000ff
PS C:\Users\taku\Desktop>

Excel セル背景色の変更

背景色を緑にしてみます。Interior.Colorに値を設定します。

PS C:\Users\taku\Desktop> $book.worksheets(1).range("A1:C3").interior.color = 0x00ff00
PS C:\Users\taku\Desktop>

Excel 行の高さ、列の幅を変更

行の高さと、列の幅を変更してみます。プロパティはそれぞれ、RowHeight、ColumnWidthです。

PS C:\Users\taku\Desktop> $book.worksheets(1).range("A1:K3").rowheight = 40
PS C:\Users\taku\Desktop> $book.worksheets(1).range("A1:K3").columnwidth = 2
PS C:\Users\taku\Desktop>

Excel セルの結合、解除

セルの結合をするには、MergeCellsプロパティにTrue(1)を設定します。0にすると結合が解除されます。
(綴り間違いに注意 MargeCellsではありません。)

PS C:\Users\taku\Desktop> $book.worksheets(1).range("C2:E3").mergecells = 1
PS C:\Users\taku\Desktop>

Excel セルにコメント(メモ)を追加する

コメント追加、常時表示

コメントはオブジェクトなので、変数に格納してからの操作が簡単です。Visibleプロパティは、True(1)にすると、常時コメントの内容を表示してくれます。False(0)の場合は、マウスホバーしたときのみ表示されます。

PS C:\Users\taku\Desktop> $comment = $book.worksheets(1).range("B2").addcomment("コメント")
PS C:\Users\taku\Desktop> $comment.visible=1
PS C:\Users\taku\Desktop>

コメントのシェイプ変更

PS C:\Users\taku\Desktop> $comment.shape.autoshapetype = 2
PS C:\Users\taku\Desktop>

Excel セルに合わせてオートシェイプの線を引く

セルの角頂点の座標を取得するには、セルの左上座標であるLeft,Topを取得した後、セルの幅Widthと高さHeightを取得して左上座標から右下座標を算出すればよいです。
では左上座標と、幅と高さを取得してみます。

PS C:\Users\taku\Desktop> $s = $book.worksheets(1).range("C2:E3")
PS C:\Users\taku\Desktop> $s.left, $s.top, $s.width, $s.height
108
18.75
162
37.5
PS C:\Users\taku\Desktop>

各座標が求まったら、Shapes.AddLine()で線を引くだけです。

PS C:\Users\taku\Desktop> $ret = $book.worksheets(1).shapes.addline(108, 18.75, 270, 56.25)
PS C:\Users\taku\Desktop>

Excel ウィンドウタイトル変更

ウィンドウは、シートと同じく、ウィンドウが1つだけなら(1)で参照できます。
タイトルの変更は、window.captionを書き換えるだけです。

PS C:\Users\taku\Desktop> $book.windows(1).caption = "AAA"
PS C:\Users\taku\Desktop>


赤丸の部分がAAAに書き換わりました。

Excelを終了

今後作成予定です。

Excelを開く

今後作成予定です。

コメント

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