• ベストアンサー

なぜ「Workbook」ではなく「Workbook

なぜ「Workbook」ではなく「Workbooks」なのでしょうか? エクセルVBAについて教えてください。 ファイルのタイトルバーのところに、文字を入れたくてVBAコードを調べていたら Workbooks.Application.Caption = "タイトル" と言うコードが出てきました。 このコードでやりたいことが行えるので問題ないのですが、 なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?

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

  • ベストアンサー
  • nak777r
  • ベストアンサー率36% (49/136)
回答No.3

■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
質問者

お礼

参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

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
質問者

お礼

参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>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
質問者

お礼

参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • workbookオブジェクトのクリアについて

    下記のコードはtest.xlsxを開き、ABCにセットして、開いたtest.xlsxを閉じた後、 ABCを参照しようとするコードです。 しかし、(4)でオートメーションエラーが発生します。 (3)のtest.xlsxを閉じるコードを 削除した場合うまくいきます。 開いたtest.xlsxを閉じた場合はABCにセットしたtest.xlsxもクリアされてしまうものなのでしょうか? 私のオブジェクトの認識では、エクセルファイルをオブジェクトにセットした場合はセット元のエクセルファイルは閉じてもworkbookオブジェクトのABCに保持されていると思っています。 ※test.xlsxを閉じたい理由は以降のコードで同名ファイルを開きたいからです。 よろしくお願い致します。 Sub a() Dim ABC As Workbook Workbooks.Open (ThisWorkbook.Path & "\" & "test.xlsx") '(1) Set ABC = Workbooks("test.xlsx") '(2) Workbooks("test.xlsx").Close savechanges:=False '(3) ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = ABC.Worksheets("Sheet1").Range("A1").Value '(4) End Sub

  • 別のプログラムとして開いたエクセルをVBAコードでアクティブにする方法について

    すいません、エクセルVBAのことで質問があります。 使っているのはExcel2000です。 1 エクセルブック"A"を開く 2 当方で使用している業務用のアプリケーションを使いデータをエクセル形式で搬出   ⇒"AAA"とは別のエクセルプログラムとして"BooK1"が開かれる このとき、ブック"A"のVBAコードに Workbooks("Book1").Activate と記載しても実行時エラーとなってしまいます。 別のエクセルプログラムで開いたブックを指定してアクティブにするにはどのようなVBAコードを記載したらよろしいのでしょうか。 同じプログラムとして開ければ問題ないのでしょうが、 当方で使っているアプリケーションですと、データを搬出するときには必ず別のプログラムとしてブックが開かれてしまう模様で どうにも回避できません。 どうぞよろしくご教示願います。

  • WorkbookのCopyについて

    Workbookのコピーについて教えてください。 下記のマクロにセル内の数式もコピーしたいのですが、出来ないで困ってます。 値と数式をコピーする、マクロを入れると指定した範囲にコピーされません。 Sub CopyWorkbookToWorkbook() Windows("sheet2.xls").Activate Workbooks.Open Filename:="D:\book1.xls" Workbooks("book1.xls").Worksheets("sheet1").Range("A6:k1000").Copy Workbooks("book2.xls").Worksheets("sheet1").Range("A6").PasteSpecial    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False,Transpose:=False          Workbooks("book1.xls").Close End Sub よろしくお願いします。

  • VBAの「This Workbook」について

    VBAの「This Workbook」にコードを書くことについて教えて下さい。 ここにコードを書きと、例えばどんな便利な機能があるのでしょうか? よろしくお願いします。 私は下記の意味はだいだいわかります。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_Open()

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • Excelのworkbookの各sheetを分割

    Excelのworkbookの各sheetをそれぞれ単独のworkbookにばらかすVBAを教えて下さい。

  • アクセスでApplication.Caption

    アクセスでApplication.Captionに代わるコードはありますか? エクセルでなら Sub test01() Debug.Print Application.Caption End Sub は動きますが、アクセスだとコンパイルエラーになります。 CaptionがApplicationのメンバにないからだと思います。 いくつかのアプリケーションを跨いでVBAを動かしているのですが、 アクセスで自身のアプリケーション名、もしくはファイル名を取得するコードはありますか? ご回答よろしくお願いします。

  • VBA-Workbook_Open()イベントで

    再度、お世話になります。 手順1.book1よりボタンをクリックしてbook2を開く 手順2.あるフォルダの.xlsファイル名をボタン名に貼り付ける 手順3.book2の戻るボタンでbook2を閉じ、book1を開く 手順4.手順1を実行する という流れを行ったところ1回目のbook2の表示の際にはうまくファイル名を表示できるのですが、戻った後の2回目のbook2の表示ではファイル名が1回目のときのままになってしまいます。 一部 [book2での処理] ***Module1*** Public strPath as String ***ThisWorkbook*** Public Sub Workbook_Open() strPath = "C:\" & Worksheets("Sheet1").Range("A1") myName = Dir(strPath & "\*.xls", vbDirectory) If myName <> "" Then FCnt = FCnt + 1 Worksheets("Sheet1").OLEObjects("btn" & FCnt).Object.Caption = myName Do ・・・(略) Loop End If End Sub ***Sheet1*** Private Sub btnBack_Click() Workbooks.Open Filename:="C:\book1.xls" Workbooks("book2.xls").Close saveChanges:=False End Sub のようにしています。 お手数をおかけしますが、どなたかご教授お願いいたします。

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • ExcelVBAでのページ設定

    ExcelVBAで、新しいブックを開き、そのページ設定をしたく、以下のような記述をしたのですが、余白の値が変わりません。 Private Sub Workbook_Open() Workbooks.Add With ActiveSheet.PageSetup .TopMargin = Application.CentimetersToPoints(1.7) .BottomMargin = Application.CentimetersToPoints(1.7) .LeftMargin = Application.CentimetersToPoints(0.9) .RightMargin = Application.CentimetersToPoints(1.1) .HeaderMargin = Application.CentimetersToPoints(1.3) .FooterMargin = Application.CentimetersToPoints(1.3) End With (以下省略) Workbooks.Addを記述せず、新しいをブックを開かなければ、思い通りの動作をします。 外部ファイルを読み込んで、帳票を作るVBAなので、起動時に新しいブックを開きページ設定をしたいのですが、Workbook_Open()で、このような使い方は出来ないのでしょうか? よろしくお願いします。 尚、会社のLANからgooの閲覧が規制されており、返事が遅れるかもしれません。ご理解の程、お願いします。

このQ&Aのポイント
  • ウィルスセキュリティをダウンロードして解凍する際には注意が必要です。Windows10からデバイスに損害を与える危険性があり、ブロックされる可能性があります。
  • ソースネクスト株式会社の製品・サービスについての質問です。ウィルスセキュリティをダウンロードして解凍する際には注意が必要です。
  • ウィルスセキュリティをダウンロードして解凍すると、Windows10からデバイスに損害を与える危険性があるため、ブロックされる可能性があります。
回答を見る

専門家に質問してみよう