Excelのクラスの説明

Excelが持つクラスにどんなものがあるか、それらのドキュメントの調べ方を説明しておく。

オブジェクトブラウザ

RubyからExcelを制御するときには、Excelが持つクラスの構成と各クラスが持つメソッドを調べないといけない。 そのツールには「オブジェクトブラウザ」を使う。

オブジェクトブラウザのボタン

オブジェクトブラウザでExcel選択

オブジェクトブラウザで目的のクラスを探すにはちょっとコツがいる。まずはいくつかキーになるクラスを覚えておく。

Workbook

Excelのワークブック。

Worksheet

Excelのワークシート。

Range

Excelのセルやセルの集合。

例えば、セルに関する操作なら、オブジェクトブラウザでRangeクラスを調べて、メソッド一覧を眺めて、それっぽいメソッドを みつけてF1キーでヘルプを表示させれば、なんか見つかるかも。

クラス間の親子関係がわかってくると、もうちょっと探しやすくなる。

例えば、セルを指すRangeはワークシートに属するので、Rangeの親はWorksheet。また、セルの罫線などはセルに属するから、Rangeの 子孫に罫線を示すクラスがあるはず。 このようなあたりをつけてクラスやメソッドを探していく。

まぁ、これはちょっと慣れてきてからの方法。

マクロの記録機能で調べる

もうひとつのExcelのクラス/メソッドを調べる方法は、マクロの記録機能を使って、実際の操作をVBマクロに変換し、 どんなマクロを使えばいいか調べる方法。

例えば、セルの背景色を変える方法を調べてみる。

  1: Sub Macro1()
  2:    Range("F11").Select
  3:    With Selection.Interior
  4:        .ColorIndex = 6
  5:        .Pattern = xlSolid
  6:    End With
  7: End Sub
  
  1: Sub Macro1()
  2:   Range("F11").Interior.ColorIndex = 6
  3:   Range("F11").Interior.Pattern = xlSolid
  4: End Sub
  

WIN32OLEへの置き換え方

先ほどのようにVBAを単純化すると、Rubyへの置き換えも機械的にできる。

ここでのポイントは、

Rangeへの道程

  01: require 'win32ole'
  02: 
  03: class Excel
  04: end
  05: 
  06: excel = WIN32OLE.new('EXCEL.Application')
  07: WIN32OLE.const_load(excel, Excel)
  08: excel.visible = true
  09: book = excel.workbooks.add('c:\temp\test.xls')
  10: sheet = book.worksheets(1)
  11: range_01 = sheet.range("F11")
  12: range_01.Interior.ColorIndex = 6
  13: range_01.Interior.Pattern = Excel::XlSolid
  

解説する。

Excelのよく使うクラスとメソッド

Excelでよく使う基本的なクラスとメソッドをちょこっと載せておく。オブジェクトブラウザで調べるコツをつかむきっかけになれば いいのだが。

Applicationクラス

ApplicationクラスはExcelアプリケーションそのもの。まず、これを開いて、ワークブック、ワークシート、セルオブジェクト*4を得ることができる。

visible

Excelアプリの可視属性。visible=true にすることで、ウィンドウが表示される。

displayAlerts

Excelのいろんな警告ダイアログの表示を制限できる。displayAlerts=falseにしておかないと、終了時などに「上書きしますか?」とか聞いてきてしまう ため、スクリプトでファイルを自動生成するときに困る。

Workbooks

ワークブックのコレクション。現在、開いているワークブックを得るだけでなく、新しくワークブックを追加するときは"excel.Workbooks.add()"、 ワークブックを開くときは、"excel.Workbooks.open()"を使う。 なんとなく、ワークブックの追加ならexcel.add_workbook()やexcel.open_workbook()のような気がするんだが。

Selection

選択されたものを返す。セルが選択中ならRangeオブジェクトを返す。

Workbookクラス

WorkbookクラスはExcelのワークブックを指すクラス。excel.workbooks.open(filename)で既存のExcelファイルを開き、その開いたWorkbookオブジェクトを得る。 ワークブックに関する操作はこのクラスのメソッドを使う。保存や印刷だけでなく、ワークシートへのアクセスを提供する。

Save()
SaveAs()

ワークブックを保存する。

PrintOut()

ワークブックを印刷する。

Worksheets

ワークシートのコレクション。現在、ワークブックが保持しているワークシートへのアクセスはこのコレクションを使う。 n番目のワークシートはWorkbook.worksheets.item(n)で得られる*5。"Sheet2"という名前のワークシート はWorkbook.worksheets.item("Sheet2")でアクセスできる。

Worksheetクラス

Excelの各ワークシートをあらわすクラス。主にRangeクラスを得るための土台。 ワークシート全体にかかわる操作はこのクラスのメソッドを使う。

Range()

セルや複数のセルの集合を返すメソッド。引数に"A1"や"E8:G10"を指定すれば、そのRangeを返す。 あらかじめセルに名前をつけておけば、Worksheet.Range("範囲名")のように指定することもできる。

ちょっと変わった指定で、Worksheet.Range(Worksheet.Cells(4,1),Worksheet.Cells(4,4)) という方法で複数のセルの集合を指定できる。

Cells(v_pos,h_pos)

こちらは座標でセルを指定する時に使う。

Name

ワークシートの名前を参照したり、変更したりする。

Rangeクラス

セルまたはセルの集合を指すクラス。セルへの操作はこのクラスのメソッドを使う。

Value

セルに書き込まれている文字列、値を読み出したり書き込んだりする。

Borders

セルの罫線を示す。どこの罫線かは引数で指定する。罫線を示すBorderクラスを返す。

Interior.ColorIndex

背景色。

Copy/Cut/Delete/Paste

セルをコピー/カット/削除/ペーストする。

Height/Width

高さと幅を返す。

Row/Column

Rangeオブジェクトの座標を返す。Rowが縦方向の座標。Columnが水平方向の座標。


戻る


*1自分もVBAをまじめに勉強したことが無いので、VBAに 関することはほとんど推測。
*2オブジェクト指向って ありがたいなぁ。
*3うーん、Applicationが省略される場合と、ActiveSheetが 省略される場合があるみたいだが、実際どういうルールになってるんだろう。
*4ワークブックはExcelの 1ファイルのこと。ワークシートはワークブックに含まれる各シートのこと。セルはワークシート上のセルのこと(定義になってないが)。 複数のセルの集まりをRangeと呼ぶ。
*5Workbook.worksheets(n)という表記も同じ。