VBA Worksheetsはプロパティなの?

このQ&Aのポイント
  • 「Worksheets」プロパティは、指定されたブックのすべてのワークシートを表す「Sheets」コレクションを返します。
  • Worksheetsはワークシートの集合体つまりコレクションであり、ワークシートオブジェクトでもある。
  • VBAの構文でWorkbook.Worksheet.Rangeのような表現はよく使いますが、後ろにくっつくのはすべてプロパティです。
回答を見る
  • ベストアンサー

VBA Worksheetsはプロパティなの?

(株)C&R研究所発行 Excel VBA逆引きハンドブック 著者 蒲生睦男 234ページを引用します。 ----- ワークシートを参照するには「Worksheets」プロパティを使います。「Worksheets」プロパティは、指定されたブックのすべてのワークシートを表す「Sheets」コレクションを返します。 ----- 私は今までWorksheetsはコレクションだと思ってました。つまりワークシートの集合であると。違うのですか?さらにプロパティはオブジェクトの性質を表わすもので、例えばCellのプロパティであればValue, Colour等です。では、Worksheetsは何のプロパティなのでしょうか?Workbookのプロパティですか?もしそうなら、他にはどんなプロパティがあるのですか?さらに上記引用で「返す」とありますが、返すってなんですか?ファンクションプロシージャの戻り値を返す、みたいな表現はありますがここでの「返す」の意味がよくわかりません。 私の現状認識は以下のものです。どこか誤ってますか? Worksheetsはワークシートの集合体つまりコレクションであり、ワークシートオブジェクトでもある。オブジェクトであるので、性質を表わすプロパティではない。 VBAの構文で Workbook.Worksheet.Range のような表現はよく使いますが、ひょっとして後ろにくっつくのは全部プロパティなのですか?ちょっとよくわかりません。

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

  • ベストアンサー
回答No.4

#1の回答者です。 オブジェクトとプロパティというのは、プログラミングの基本的概念で、他の概念を同等に持ちだしてきたら、ワケが分からなくなります。 > worksheetをプロパティとして使うのはどのようにするのでしょうか? プロパティとは、操作してどうこうしようと思っているようですが、そういうことではありません。これは定議の話であって、個々の設定やら値の取得の話は別問題です。 Workbook.Worksheets(1).Range("A1") 少なくとも、Workbookの配下に、Worksheet はありません。Worksheets という入れ物が存在しているのです。その入れ物の中の個別に指定しないと、それを取り出すことはできません。 その入れ物を、あえて「Worksheetsコレクション」と称することは間違いありませんが、コレクション(Collection)というものは、複数のオブジェクトをひとまとめにしたもので、ここでは、単なる名称にしかすぎません。単に、そういう入れ物を作ったということでしょう。 私の記憶に間違いなければ、プログラミングの構造からすると、まず、クラスがあって、それを実体化させたものがインスタンスです。それをオブジェクトと呼びます。そして、その中で、いくつか必要な性質を持たせます。それをプロパティと呼びます。プロパティの本質は、あくまでも、オブジェクトの「性質・属性」を示すものです。そのプロパティが、どういうものかは、それぞれの個別の問題です。 ここで、メソッドを持ちだしてきて、「こうすれば、プロパテイは値を取り出せたり、値が変わります」という機能を言っても、それは個別の例であって、それはまったく別の話です。 前回と重複しますが、プロパティとは、クラスの中で設定されたものです。その値を変更したり、値を取るという機能自体は、制作者が、そう設定されたものだということです。絶対的なものとしては存在しているわけではありません。 私は、別に混乱させるために書いているわけではありませんが、#1の回答で満足しなくても、もうこれ以上書く必要はないと思います。 失礼かもしれませんが、今まで書いたものを見させていただいて、経験的に、そのレベルの人で、用語の定義にこだわる人が上達したという覚えがありません。あれこれ考えるよりも、上級レベルに達するまで、こういう話は保留にしておいたほうがよいのではないかとアドバイスいたします。 いつか、私の話が分かる日が来ると思います。 それでは、これで失礼いたします。„

over_the_galaxy
質問者

お礼

ありがとうございます。 AN1にて回答頂いた内容である程度理解したつもりでいましたが、階層構造がコレクションとの回答があったため、ではプロパティとしての使用例はどんなの?との疑問が生じました。クラスやインスタンスの用語が出て来た辺りで、これは理解を超えそうだと思いました。 >あれこれ考えるよりも、上級レベルに達するまで、こういう話は保留にしておいたほうがよいのではないか ありがとうございます。実務では保留して進めることにします。ただ、個人的興味の範疇ではもう少し調べてみたいと思います。

その他の回答 (3)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.3

> 階層構造がプロパティでなくオブジェクトならば、 > worksheetをプロパティとして使うのはどのようにするのでしょうか? .WorksheetsプロパティがWorksheetsコレクションを返し、 Worksheetsコレクションの.ItemプロパティがWorksheetオブジェクトを返します。 以下、abは同じ処理。  a) Worksheets("Sheet1").Range("A1") = 1  b) Worksheets.Item("Sheet1").Range("A1").Value = 1 オブジェクトには省略可能なプロパティもあります。Range.Valueが有名ですが、.Itemもそうです。 コレクションは、「同種のオブジェクトをまとめる オブジェクト」。 一般的に.Itemは省略し、コレクションと配下のオブジェクトはあまり区別(意識)しません。そのほーが扱いやすいですから。  Worksheets("Sheet1") ←ひとつに見える

over_the_galaxy
質問者

お礼

ありがとうございます。 Itemプロパティ、忘れてました。勉強し始める頃にちょっとやって、事実上省略出来るようなことを聞き無視してました。worksheetプロパティはもう少し勉強してみます。

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

オブジェクトは『機能をもった値(データ)』。コレクションもオブジェクト。 オブジェクトは、以下の機能を提供します。  ・プロパティ: オブジェクト内の『値』の取得/設定を行なう機能  ・メソッド: オブジェクトの操作や処理を行なう機能 -------------- プロパティが扱うのは「性質」に限りません。機能と考えれば、「返す」の表現になります。 SheetsコレクションもWorkbookオブジェクト内のオブジェクトにすぎず、プロパティを介してアクセスするワケです。 > Workbookのプロパティですか? Workbook か、Applicationです。 Applicationは、ショートカット的なプロパティを持ちます。bの正体がc。  a) Application.ActiveWorkbook.Worksheets(1).Select  b) Worksheets(1).Select  'Application.は省略可  c) Application.Worksheets(1).Select > Workbook.Worksheet.Range オブジェクトの階層構造を表すなら、「オブジェクト名」で書きます。 プロパティとオブジェクトがわりと同名なので、混同しますが。 > 他にはどんなプロパティがあるのですか? workbookのメンバ一覧はこちら↓ http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.workbook.aspx ローカルウィンドウでオブジェクトの中覗くこともできます。お試しあれ。 Sub hoge()  Set sh = ActiveSheet   Stop '←ココで止まったらshを覗く End Sub

over_the_galaxy
質問者

お礼

階層構造がプロパティでなくオブジェクトならば、worksheetをプロパティとして使うのはどのようにするのでしょうか?

回答No.1

こんにちは。 別の方の回答にも似たような内容を書いたのですが、あまりプロパテイだのメソッドなど、こだわらないほうが良いと思います。ご質問者さんは、どの程度のVBAのプログラミングの力があるかは分かりませんが、こういう事を考えていると、プログラミングの上達にはマイナスに働きます。 この問題は、基本的には、Class とInstanceの概念や実際のClassの組み立てを、ある程度知っておけば、分かる話なのです。簡単にいえば、究極的に、オブジェクトの性質を表すものは、すべてプロパティといえるからです。 食べ物--カレー--チキン        --ブタ        --ポーク        --野菜 カレー自体が、食べ物に対するプロパティでもあるからです。 プロパテイというのは、親オブジェクトに対するプロパティという意味ですから、親オブジェクトを念頭に置いておかないと、プロパティが成立しません。つまり、親オブジェクトからみたら、その性質を位置づけるものは、子オブジェクトもプロパテイだということです。 >Worksheetsは何のプロパティなのでしょうか? ご質問のプロパティの親オブジェクトは、Workbook かApplicationとなります。 コレクションというものは、互いに関連付けられた複数の要素を 1 つのオブジェクトとしてまとめられるものを指しますから、Worksheetsも、当然、コレクションだとは言えます。ここでは、まったく話が別というか、違う考え方なのです。 >プロパティはオブジェクトの性質を表わすもので、例えばCellのプロパティであればValue, Colour等です その通りですが、Cells もまた、Worksheet やApplication のプロパティとも言えます。 特に、Cellsが、Applicationのプロパテイというのは、実際にプログラミングしていると気がつくのですが、どうも、そういう造りにしてあるようです。確かに、その方が便利だからです。 ・ワークシートを参照するには「Worksheets」プロパティを使います。 ・「Worksheets」プロパティは、指定されたブックのすべてのワークシートを表す「Sheets」コレクションを返します。 >さらに上記引用で「返す」とありますが、返すってなんですか? これについては、ヘルプの表現だと思いますが、英文からの、そのままの機械翻訳でしょう。(この辺りは、Microsoft 系の翻訳者からは、事情は聞きましたが、きちんと決められた訳しか出来ません。) 日本語訳からは、いくら考えても、厳密な意味は取れないでしょうけれども、英語にしても、そのまま訳を当てはめれば、意味は大差はありません。 引用: http://msdn.microsoft.com/en-us/library/office/ff835542(v=office.15).aspx "Workbook.Worksheets Property" "Returns a Sheets collection that represents all the worksheets in the specified workbook." 「特定のブックの中ですべてのWorksheetsを表すものは、Sheets Collection に帰します。」 という具合に読み替えたら、少しは分かると思います。訳として正確とはいえませんが、そういうことだと思います。 ただ、最後に、あえて混乱させるようなことを言うのは問題があるかもしれませんが、例えば、End プロパティは、なぜ、メソッドではなく、プロパティだというのか、個人的には居心地の悪さを感じます。 最初に書いたClassのプログラミングで、実は、Class の中で、メソッドとプロパテイというものは、簡単にいうと、Sub プロシージャと Function プロシージャの違いのようなもので、作成上で、区分けされるものなのです。制作者側が、そう決めたから、そう呼ばれるものだと解釈したほうがよいのです。 少なくとも、私自身は、そう思っています。そうすれば、気が楽なのです。

over_the_galaxy
質問者

お礼

ありがとうございます。

関連するQ&A

  • Excel VBA オブジェクトの指定方法と速度

    Excel VBAについて質問です。 ワークシートを指定するときの書き方には色々ありますが、1~3の速度の順番はどうなりますか? オブジェクトは、変数に入れて使用したほうが速度が速くなるそうなので、 1より2のほうが速いと思いますが、3はどうでしょうか? 1.Worksheets("sheet1") 2.Dim ws As Worksheet   Set ws = Worksheets("sheet1") 3.Sheet1 (VBE画面で表示されるシートのプロパティのオブジェクト名) Excelのオブジェクトについて詳しいかたがいらっしゃいましたら教えてください。 よろしくお願いいたします。

  • Worksheet Worksheets オブジェ

    「Worksheetオブジェクト」と「Worksheetsオブジェクト」は何が違うのでしょうか? 使い方もいまいちわかりません。 この二つを使う時は、 Sub test1() Dim w As Worksheet For Each w In Worksheets Debug.Print w.Name Next End Sub とするときなのですが、 なぜ、変数の宣言をする時は、Worksheetを使い、 ワークシートの数を数える時は、Worksheetsを使うのでしょうか?

  • VBA オブジェクト型使用の利点は?

    例えばワークシートの表現を考えます。 自分は今まで以下のようにしてました。 Dim sheet1 As String sheet1=Worksheets(1).Name Worksheets(sheet1).Activate オブジェクト型宣言を用いて以下のように書き換えられます。 Dim sheet1 As object set sheet1=Worksheets(1) sheet1.Activate ソースコードとしてはスッキリしますが、見た目以外でどのようなメリットがあるのですか?

  • VBA初心者です。

    VBA初心者です。 Excel 2010のVBAで、 ワークシートのSheet1のオブジェクトモジュールに 他のシートから別のシートにコピー&ペーストをしたいと思い、 以下のプログラムの記述をすると、 アプリケーション定義またはオブジェクトの定義エラーとなってしまいます。 Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)).Copy Destination:=Worksheets("Sheet3").Cells(3, 1) (「d」は変数です。セルの範囲指定は、実際に記述するときは 範囲が広範になるので、行数列数で把握できるようにCellsを使っています) エラーになる理由と解決法をご教授いただければと思います。

  • VBAのクラスオブジェクト

    VBAのコレクションオブジェクトについての質問です。 一般的な説明では、 ・コレクション(Collection)とは、同じ種類のオブジェクトの集合体をいいます。 となっているのですが、  以下のような自分で作成するコレクションオブジェクトもあるみたいです。 この場合、同じ種類ではないオブジェクトでコレクションを作れるのでしょうか?それともこの場合も、同じ種類のオブジェクトでないといけないのでしょうか? ・Collectionオブジェクトを使うと、文字列、数値、オブジェクトを要素とする独自のオブジェクトを作成できます。   Dim colTest As New Collection 

  • ExcelVBAのオブジェクトとプロパティについて

    ネットだけで独学でVBAの勉強をしています。大雑把ですがオブジェクトとプロパティの認識はこんなものでよろしいのでしょうか。 オブジェクト=モノ(色々なものが集合して出来たモノ) プロパティ=モノが持っている動詞(例えば人間がオブジェクトとするなら、手を上げるなど、動作を言う)

  • エクセルVBA コントロールのプロパティの変更

    エクセル2003でシート上に割り付けたラベルコントロールをVBAでCaptionプロパティで 変更するプログラムを作ってみました。(同じ様にボタンコントロールのCaptionプロパティに ついても作りました。) ステップ実行(F8)では、思ったとおり変更されますが、普通の実行(F5)では思ったとおり 変更されず、遅れて最後のコマンド分しか変更されませんでした。 *条件ループでセルのテキストを順番に読みコントロールのCaptionとして変更するプログラム  です。  なぜ出来ないのか分かりません。  原因又は、方法を教えていただけないでしょうか?    VBAでは、オブジェクト名に配列を使えないらしかったのでOLEObjects(コントロール?、  コレクション?)でオブジェクト名の配列のように使っています。  あまり、詳しくないので用語が間違っていたらすいません。  後、途中にインターバルタイマー入れたりして、動作確認しましたがやはりダメでした。

  • オブジェクトのプロパティーをVBAで操作する方法

    今、Excel97とVBAを用いて、ツールを作成しています。 VBAでシートに貼り付けたボタンをEnabled=TrueにしているのをEnabled=Falseにしたいと思い、ヘルプを元に作成しました。しかし、「変数が定義されていません。」と表示されてしまいます。 Sheet オブジェクト名:CommandButton1 VBA sub 表示操作() CommandButton1.Enabled = True ← エラー箇所 end sub オブジェクトのプロパティーをVBAから操作する方法を教えて下さい。

  • Excel VBA 定数にオブジェクトを指定したい

    Excel VBA 定数にオブジェクトを指定したい いつもお世話になりますm(__)m Excel VBAで、定数としてオブジェクトの指定はできないのでしょうか? 例えば、WorkSheets("Sheet1")を定数「Srt1」として設定したいのですが、  Public Const Srt1 As Object = Worksheets("Sheet1") としても「定数のデータ型が不正です」とエラーがでます。 例えば、セルに値をセットする時に Worksheets("Sheet1").Range("A1").Value="あああ" Worksheets("Sheet1").Range("A2").Value="いいい" Worksheets("Sheet1").Range("A3").Value="ううう" と書きますが、これを Srt1.Range("A1").Value="あああ" Srt1.Range("A2").Value="いいい" Srt1.Range("A3").Value="ううう" と書ければプログラムも見やすく、書きやすくなると思いました。 プログラムの最初に Dim Srt1 As Object Set Srt1 = Worksheets("Sheet1") とすれば使えるのですが、複数のシート名をまずは定数として登録したいと思っていますが、オブジェクト(ワークシート名)は定数として登録することは出来ないのでしょうか? お詳しいかた、是非ともご教授お願い致しますm(__)m

  • VBA 印刷 画面

    エクセルVBAについて。 ワークシートの印刷をVBAで行っています。 worksheets("○○○").printout ワークシートを複数印刷する際に、逐一 そのワークシートに画面遷移しないようにするには、どうすればよいでしょうか? よろしくお願いします。 Excel2010以上

専門家に質問してみよう