関数は自分で作る

ExcelオブジェクトとExcelアプリ、ファイルの関係

Excelアプリをマウスで操作しますが、操作している対象はVBAから扱えるオブジェクトです。左の赤い枠がExcelのオブジェクトモデルです。右のVBAには、そのオブジェクトモデルの一部が見える。左の赤枠の階層構造は何となく覚えておけば、VBAのコードを書く時にリストから選ぶことができる。

Excelのオブジェクトは、画面と関連して名前を覚える。画面では見えないトップのApplicationから順に階層の構造になっている

ExcelオブジェクトとExcelアプリ、ファイルの関係

マクロ記録では得られない情報です。オブジェクトとコレクションの操作を説明します。

Workbooksオブジェクトは、Excelファイルのこと。単語の最後にsが付く複数形は、コレクションと言う。複数のオブジェクトの集合でExcelが開いているxlsファイル/ワークブックをWorkbooksで管理できる。コレクションは、Countプロパティは持っている。また、コレクションの特定のオブジェクトを使う場合は、()を付けて1から始まる数値か名前を使う。

同様に、Worksheetsもワークブック内の全ワークシートを操作できる。以下はイミディエイトウィンドウで入力する。?から始まる行を入力。その下が出力結果。「’」から始まる文字列はコメントなので不要。

?application.Workbooks.Count       '入力行、ワークブックの個数を調べる。
 1
?application.Workbooks(1).Sheets.Count 'ワークシートの個数
 3 
?application.Workbooks(1).Worksheets(1).name      'Worksheetsの1は、Index番号
Sheet1               '1つ目のワークブックの1つ目のワークシートの名前
?application.Workbooks(1).Worksheets("sheet1").index    'Index番号の確認
 1 
?application.Workbooks(1).Worksheets("sheet1").name
Sheet1

ワークブックは、「メニュー/ファイル/開くで(??.xls?)」ファイルを読み込むとワークシートが現れる。ワークブック(ファイル)の中にワークシートが前図の例では3つ(Sheet1,Sheet2,Sheet3)ある。

通常は、Excelを起動するとすぐに使えるオブジェクトも準備している。つまり、ワークブックを開いているのでSheet1やSheet2が使える。しかし、次図のようにワークブックが無い状態だと、ワークシートもないのでプロジェクトエクスプローラには何のオブジェクト( Sheet1 など)も無い。起動しているのはApplcationオブジェクトだけ。

Applicationオブジェクトだけの状態。 ???.xlsファイルを呼び込んで無い状態。ワークシートが無い。

この状態では、「メニュー/ツール/参照設定」もできないのでオブジェクトが無いのでF2オブジェクトブラウザも起動しない。

上図の状態は、VBAだと確認しやすい。というのは、マウス操作でExcelを起動すると何かファイルを選ぶため。

以下をイミディエイトウィンドウに入力すると上図のワークシート無しのExcel(Applicationオブジェクト)だけを見ることができる。

set x=new Excel.Application  ‘Bookを持たないExcelを起動する
x.visible=true  ‘Excelを見えるようにする
Applicationオブジェクトだけの状態 その2

次図は、マウス操作でワークブック(Excelファイル)を2つ読み込んでいる。手前と背面にワークブックがある 。

オブジェクトモデルと画面の関係 2つのワークブックがある

まず2つのExcelが動いているように見える。これをイミディエイトウィンドウで確認する。

?excel.Application.Workbooks.Count
2                                               '2つのファイルを開いている
?excel.Application.Workbooks(1).Name
Book1.xlsx 
?excel.Application.Workbooks(2).Name 
Book2                               '保存してないと拡張子xlsmが無い

ワークシート(Sheet?)タブの他にGraph?が見える(Graph?を作るには、グラフを作って右クリックメニューで「グラフの移動」を選択、「新しいシート」を選択)。Sheetsコレクションは、Chartsも含む。Sheets≠Worksheetsである。Chartsが無ければ結果的にSheets=Worksheetsとなる。クラス名で言えばSheetの方が守備範囲が広い。

オブジェクトの複数形は、コレクションという。

Workbookの複数形Workbooks
Worksheetの複数形Worksheets

オブジェクトを扱う時は、2通りの扱い方がある。

  1. 直接オブジェクト名を扱う
  2. コレクションのIndex番号か名前(Excel本体のワークシートのタブの文字列)を使う

オブジェクトの名前は、次図のSheet1やSheet2などでVBEでないと見えれない。

WorkSheetsコレクションと各オブジェクト名の関係

コレクションは、Index番号や名前を使って個々のオブジェクトとしても使える。

コレクションから特定のオブジェクトを指定する
?excel.Application.Workbooks.Count?
2                                               '2つのファイルを開いている
?excel.Application.Workbooks(1).Name
Book1.xlsx 
?excel.Application.Workbooks(2).Name 
Book2                               '保存してないと拡張子xlsmが無い
?application.Workbooks(2).sheets.Count  
 5 
excel.Application.Workbooks(2).worksheets.Count 
 3 
?application.Workbooks(2).charts.Count  
 2 

先にBook2のどこかのセルをクリックしてから以下を実行する。ブックを選択していると「application.Workbooks(?).」を省略できる。以下は、イミディエイトウィンドウ。

?excel.Sheets.Count  
 5 
?excel.Workbooks.Count
 3 
?excel.Charts.Count   
 2 

あるワークシートを選択していると「application.Workbooks(?).Worksheets(?)」を省略できる。

モバイルバージョンを終了