それ、PowerShellでもできます!
Excel資料が幅を利かせてる職場では、効率化と称してVBAを駆使したツール作りはじめ、案外それに時間がかかってしまったり、実運用でバグが出たりと、余計効率悪くなったりするもんですけど、VBAを選択する理由は何でしょう。
VBScriptもあるだろうし、別に他のメジャーな言語、たとえばPythonとかでもいいと思うんです。
VBAでExcel効率化を図ろうとするのは、知らないって理由が大半でしょう。
VBAだけがExcelを自動化する術ではありません。
VBAを使うのであればPowerShellも知っておこうよ、という思いを込めてPowerShellによるExcel操作入門記事を作成中です。
PowerShellでExcel自動化、とことんやってみましょう。
Contents
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を開く
今後作成予定です。
コメント