解決済み

なぜ「Workbook」ではなく「Workbook

  • 困ってます
  • 質問No.7338927
  • 閲覧数411
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (129/129)

なぜ「Workbook」ではなく「Workbooks」なのでしょうか?
エクセルVBAについて教えてください。

ファイルのタイトルバーのところに、文字を入れたくてVBAコードを調べていたら
Workbooks.Application.Caption = "タイトル"
と言うコードが出てきました。

このコードでやりたいことが行えるので問題ないのですが、
なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?

質問者が選んだベストアンサー

  • 回答No.3

ベストアンサー率 36% (49/136)

■Application クラス
・EXCEL本体の親ウインドウ側のクラス
・主なプロパティとして
Caption EXCEL本体のタイトルバーの文字列
Visible EXCEL本体を表示/非表示
TOP,LEFT,WIDTH,HEIGHT EXCEL本体の位置や大きさを変更する
Workbooks
EXCEL 本体で開いている ブック(複数)のリスト

■Workbooks クラス
・Workbook クラスのコレクションクラス
・EXCEL を親ウインドウとして ブック(workbook)を複数開く事が出来るためそのリストクラス
・主なプロパティ、メソッドとして
Add 新たなブックを表示する
Open ブックを開く
Item Workbook を選択する
Application 親元の EXCEL

■Workbook クラス
・Workbook ブックのクラス
・主なプロパティ、メソッドとして
Save ブックを保存する
Application 親元の EXCEL
WorkSheets
 ブック内にあるシート(複数)のリスト

■WorkSheets クラス
・WorkSheet クラスのコレクションクラス
・主なプロパティ、メソッドとして
Add 新たなシートを作成する
Item WorkSheet を選択する
Application 親元の EXCEL

■WorkSheet クラス
・WorkSheet シートのクラス
・主なプロパティ、メソッドとして
Range 各セル単位のクラス
Application 親元の EXCEL



だいたいのEXCELクラスの位置づけ(雰囲気)はこんな感じ
お礼コメント
i98iu787

お礼率 100% (129/129)

参考になりました。ありがとうございます。
投稿日時 - 2012-03-24 10:25:54
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 61% (656/1071)

Workbooks.Application.Caption の流れがわからないので割愛。


> なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?
一つしか開いていないのは、たまたま今この瞬間がそうだってだけで、潜在的には複数のブックを開くこともある。("ある" というか "複数のブックを開くことができる" ようになっている)
それが Excel の機能。
だから Excel という Application は WorkBooks という入れ物を持っている。
この Workbooks という入れ物は、Workbook をいくつも格納して管理することができる入れ物。
こういうのを "コレクション" という。名前のルール的には複数形になっている。

だから Workbook を VBA の中で参照する場合、
Workbooks("hogehoge") ← Workbooks コレクションで管理されているブックのうち、hogehoge という名前の Workbook を指し示す。
という書き方が一般的になっている。

名前指定のほかにも特殊なルートを使えば直接とある Workbook を参照することができる。
ThisWorkbook ← VBA コードを実行している Workbook を指し示す。つまり実行中の VBA からすれば自分自身になるのでこういう指定の仕方もできる。
ActiveWorkbook ← 対象 Excel の中でアクティブになっている Workbook を参照することができる。Excel にとってアクティブなブックというのは常に一つなのでこういう指定の仕方もできる。


単数形で用意されているオブジェクトを複数格納して管理できる複数形のコレクション。
これは Workbook だけに限らずたくさん用意されている。
たとえばブックの中にあるワークシート、セル、ウインドウなどなど
お礼コメント
i98iu787

お礼率 100% (129/129)

参考になりました。ありがとうございます。
投稿日時 - 2012-03-24 10:25:39
  • 回答No.1

ベストアンサー率 79% (496/625)

>Workbooks.Application.Caption = "タイトル"
ここだけの抜粋では、これがどういうコードの流れの中で出てきたものか、不明なところもありますが、
Application.Caption = "タイトル"
で良いはずです。

>なぜ「Workbook」ではなく「Workbooks」なのでしょうか?
Workbooks.Application.Caption = "タイトル" の『Workbooks』プロパティは
親オブジェクトが省略されたものです。
親オブジェクトApplicationの『Workbooks』プロパティです。
だから
Workbooks.Application.Caption は
Application.Workbooks.Application.Caption です。
(正式にはExcel.Global.Workbooks..なんですが解りにくいでしょうから便宜的に。)

『>なぜ「Workbook」ではなく「Workbooks」』ここだけに焦点を当てると
ApplicationにはWorkbooksプロパティはあってもWorkbookプロパティはないからです。

前述、
Application.Workbooks.Application.Caption
これは Applicationオブジェクト の Workbooksプロパティ の Applicationプロパティ の Captionプロパティ ..という記述になっているので、
少し素直に Applicationプロパティ の Captionプロパティ、つまり
Application.Caption = "タイトル" という記述のほうが解り易いかと思います。



>なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?
「Workbooks」は「Workbook」の複数形 という文法的なものではなく、
ExcelVBAの「Workbooks」プロパティ(属性)として規定されたものです。
1つのBookを操作する時でも
Workbooks(1).Activate
Workbooks("Book1.xls").Activate
と書いて、Workbook("Book1.xls")..とは書きませんよね。
「Workbooks」プロパティ は 開かれているすべてのブックを表す「Workbooksコレクション」を返します。
開いているBookが1つでも複数でも、この「Workbooksコレクション」の中にWorkbookオブジェクトがあり、
そのWorkbookオブジェクトを呼び出す時に「Workbooksコレクション」の中のxxというアイテム、という指定をします。
Workbooks("Book1.xls") は Workbooks.Item("Book1.xls") を省略した書き方です。
(省略した書き方のほうが認知されています)


VisualBasicEditorのヘルプは状況依存型で、コード内の調査語句にマウスキャレットをあてて[F1]キーを押せば
目的のトピックにクイックアクセスできますので、色々調べてみてください。
また、[F2]キーで「オブジェクトブラウザ」が開きます。
各オブジェクトがどんなプロパティやメソッド持っているかが確認できます。
VBAを理解するのに役立ちますから、活用していってください。
お礼コメント
i98iu787

お礼率 100% (129/129)

参考になりました。ありがとうございます。
投稿日時 - 2012-03-24 10:25:05
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ