ちょっと前から勉強しはじめた超超初心者なんですが、オブジェクトやプロパティといった概念がちょっと理解できないでくるしんでいます
1、
Sub 図形非表示()
ActiveSheet.Shapes("図形").Visible=False
End Sub
これは本にのっていた例文でアクテブシートの「図形」という名前のオートシェイプを非表示にする文なのですが本には「Visible プロパティ」
「Shapes プロパティ オートシェイプを返します」とありますがこれはつまり「Shapesプロパティ自体がオブジェクトになっている」ということなのでしょうか?「Shapes プロパティ」とかいてあるのでただのプロパティなのではないか???とおもってしまうのですが・・・
2、
1と同じ感じなのですが
Sub ワークシートに色を設定()
Worksheets("メニュー").Cells.Interior.ColorIndex=11
End Sub
もInteriorプロパティ自体がオブジェクトになっているのでしょうか??
だとしたら全てのプロパティもオブジェクトになれるのでしょうか?
是非どなたか教えてください、よろしくお願いします
No.6ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。VBAは独学なので自己流解釈です。以下の内容に間違いがあれば指摘願います。
VBA は基本的には [オブジェクト].[プロパティー] という文法で成り立って
います(メソッドが来ることもありますが)。
プロパティーの機能は次の2点。
・オブジェクトの属性値を【取得】する ex) A = ActiveSheet.Name
・オブジェクトの属性値を【設定】する ex) ActiveSheet.Name = "TEST"
プロパティーはあくまで、オブジェクトの属性値の取得・設定しかできません。
したがって、プロパティーがオブジェクト自体にはなり得ません。
ご質問の例では、下記の様に分割して考えると理解し易いかもしれません。
(注)あくまで説明のためで、本来のVBAの文法とは違います。
※{ActiveSheet.Shapes("図形")}.Visible = False
まず{}内から見てみます。
Shapes プロパティーはオブジェクト(ここでは ActiveSheet )内の
「Shapes コレクション(=Shapeオブジェクトの集合)への参照」という値
(=リンクと考えて下さい)を返します。
・ Shapes プロパティーは()で Shape オブジェクトの集合から「どの
Shape か」を指定することができます。
したがって、{ActiveSheet.Shapes("図形")}で「図形という名を持つ
シェープオブジェクトへの参照」という値を返し、プロパティーはあくまで
値しか返していませんが、結果として、シェープオブジェクトを構成しています。
基本文法どおり [オブジェクト].[プロパティー] という構文になっています。
この様に読み解けば、※ を次の様に解釈することができます。
{ActiveSheet.Shapes("図形")}=シェープオブジェクトへの参照=シェープオブジェクト
{シェープオブジェクト}.Visible = False
同様に、Worksheets("メニュー").Cells.Interior.ColorIndex=11 は
{Worksheets("メニュー").Cells}=Range オブジェクトへの参照=Rangeオブジェクト
{(Rangeオブジェクト).Interior}=Interior オブジェクトへの参照=Interiorオブジェクト
{Interiorオブジェクト}.ColorIndex = 11
と解釈すれば全ての構文は [オブジェクト].[プロパティー] という基本文法
どおりです。
つまり、[オブジェクト].[オブジェクトへの参照を返すプロパティー]となって
初めて[オブジェクト]を構成します。
No.5
- 回答日時:
超超初心者と言うことで、Shapesがプロパティかオブジェクトかよりも「プロパティって何?プロパティとオブジェクトって正確にはどう違うの?」ってところで引っ掛かってる、と解釈してみます。
自分も始めた頃、そこで引っ掛かったんで・・。 (^_^;
私の場合、はじめは数学の公式や英語の文法の様ようなとらえ方でやってました。
英語で言えばオブジェクトが主語(目的語)でプロパティやメソッドが述語って感じです。
でも、主語+主語+述語や 主語+述語+述語 みたいなのが出てくる。
で、真ん中のを調べると ある本にはオブジェクトまたある本にはプロパティと表記してあり、訳が分からなくなる。
後で思ったのは、オブジェクトとかプロパティとかははっきりとその性質を持ったモノが有るんではなく、マクロを作る人が操作しやすい様に便宜的に分類してるに過ぎないってことです。
だから、オブジェクトとして覚えてたのにプロパティとして捉えないとスッキリしないって事も出てくるんではないでしょうか。
例えばWorksheets(1)さえ、PC内にそういう1つの物体がある訳じゃなく、HDD内にバラバラに書き込まれたセルなどのデータの1つの属性というか名札の様なもんですから、プロパティと捉える場合も出てくるかも知れません。
たぶんVBAも徹底的に奥まで行って機械言語や0と1の2進法の処まで勉強すれば完全に理屈は通るんでしょうけど。
日本語で書くと
ワークブックA . ワークシート1 . レンジA2 . フォント . 色番号3
という記述も有ります。
1つのオブジェクト+1つのプロパティ(又はメソッド) の型じゃないです。
次第に絞り込んでいって結果的に文字に色が付く感じです。
VBAを進めると、「一部を除いて」とか「基本的には」とか「例外はありますが」とかが頻繁に出てきます。
だから「どちらかハッキリさせる」より、「こちらから見ればオブジェクトで反対側から見ればプロパティ」くらいに考えて、後はたくさんの例文を覚えていくしかない思います。
はずしてたらゴメンなさい。 (^_^;
No.4
- 回答日時:
ご質問の例では、図形」という名前のオートシェイプがオブジェクトです。
プロパティはこのオブジェクトの設定内容と思っていただければよいでしょう。
例えば、タテ/ヨコのサイズ、表示する位置、表示するかしないか等です。
「Shapes プロパティ オートシェイプを返します」というのは、ShapeでなくShapesであることに注目してください。
これはひとつのSheetにShapesというプロパティがあり、そのSheet中にどんなシェイプが入っているかのリスト(コレクションと言います)です。
そのリスト中のどのシェイプの設定をするかを指定するわけです。
No.3
- 回答日時:
こんばんは。
Wendy02です。私は、あまり説明ができないのですが、プロパティのコーディングというのは、最終的なプロパティの特定化に過ぎないのではないでしょうか?(同じこどを書くようですが)
例えば、地図で、東京の秋葉原の何とかというお店で、ある部品を手に入れるっていうのは、意外に大変なことなんですね。ある部品を手に入れるために、どこそこのお店にあるというので、それが秋葉原のどこそこにあるから、そこで手に入れるというほうが楽なんです。
実は、私は、『VBA辞典』(秀和システム)は買ったのですが、なかなか使いこなせないというか、上で書いてあるとおりで、秋葉原のいろんなお店があって、いろんなものはあるようなんですが、いざ、自分の欲しいものを探すと、見つからないっていうことが良くあるのですね。
ローカルウィンドウとかあるので、それを探して決めることもありますが、ローカルウィンドウには出てこないものや、ローカルウィルンドウには見えていても、プロパティを指定できないものがあります。結局は、知らないと出来ないわけで、多くのお手本となるコードを読んで、個々のオブジェクトのプロパティやメソッドではなく、最終的な目的のステートメントとして、使い方を覚えていくほうが良いような気がしています。
No.2
- 回答日時:
こんばんは。
基本的には、
オブジェクト.プロパティ
と考えて間違いないと思います。
オブジェクトのプロパティを指定して、オブジェクトを返すということだってありえますよね。
プロパティというのは、オブジェクトの属性・特徴を取るためのものであって、それが、構造的な構成要素を持っていれば、オブジェクトであると考えてよいと思います。例外はあるけれど、一応、そうすれば割り振りは利きます。
>「Shapesプロパティ自体がオブジェクトになっている」ということなのでしょうか?
>「Shapes プロパティ」とかいてあるのでただのプロパティなのではないか???
最終のプロパティまでは、戻り値はオブジェクトということはありえますね。つまり、上位オブジェクトのプロパティが、必ずしも Value ということはありませんね。
私は、あまり自信もって説明できませんが、通常使うときは、ステートメントのその途中の過程で、プロパティなのか、オブジェクトなのかは、その値や設定をする最終目的まではあまり考えたことがありませんね。
逆に、その上位概念のRangeオブジェクトやShapeオブジェクトのプロパティの種類から枝分かれして、覚えていくとしたら、とても覚えられません。
俗に、『下部構造が上部構造を決定する』とかいいますでしょう。(^^;
最終的な目的から、上部を決定していく考え方になるのではないかと思います。
ご回答ありがとうございます
ちょっとまだ初心者なものでぼんやりとしかwendyさんのいっていることは
わからないのですが、要するにその文の最後のう方をみて最初の方がオブジェクトなのかどうかを判断するくらいでよいということでしょうか??
確かにそのほうがちょっと気楽ですね、ありがとうございます^^
No.1
- 回答日時:
>「Shapesプロパティ自体がオブジェクトになっている」ということなのでしょうか?
プロパティはオブジェクトに関する各種の「値」を返す機構ですが、その「値」はオブジェクト(への参照)である場合も、文字列・数値である場合もあります。
>「Shapes プロパティ」とかいてあるのでただのプロパティなのではないか
「ただのプロパティ」とは文字列や数値を返すプロパティのことだと思いますが、オブジェクトを返すプロパティになにか特別の名前をつけて区別してあるわけではないので、「プロパティ」と書いてあったら、どんな型の値を返すのか確認する必要があります。
>Interiorプロパティ自体がオブジェクトになっているのでしょうか??
InteriorプロパティはInteriorオブジェクトを返します。
>全てのプロパティもオブジェクトになれるのでしょうか?
上にも書きましたが、プロパティごとに、何を返すのかを確認してください。
ご回答ありがとうございます
なるほどいろいろプロパティにも様々な分類分けがあるようなのですね
今手元にそういう辞典はないのですが買ったらちょくちょくしらべてみよ
うとおもいます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) クラス デフォルトプロパティの作り方 1 2022/10/23 11:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) Csvファイルの最終行を取得する構文はこれであっていますか?オブジェクトは、このプロパティまたはメソ 3 2022/12/26 14:38
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBAで既に開いている別アプリケ...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
エクセルマクロエラー「'Cells'...
-
エクセルのVBAの標準モジュール...
-
VBAについてです。 初心者です...
-
EXCEL VBA オートシェイプナン...
-
UserForm1.Showでエラーになり...
-
テキストボックス中の文字列の...
-
ある文字列が全て数字であるか...
-
エクセルVBAでFor each文
-
横軸ラベルの追加に関するエラ...
-
メモリ解放について(ASP)
-
VBA (Row とRowsの違いについて)
-
VBで引数にDictionaryオブジェ...
-
PowerPointVBAでスライドマスタ...
-
EDINETの情報をEXCELにダウンロ...
-
VBScriptでExcelのグラフを貼り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
テキストボックス中の文字列の...
-
PowerPointVBAでスライドマスタ...
-
エクセルマクロエラー「'Cells'...
-
VBAからPDFファイルにパスワー...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBAについてです。 初心者です...
-
VBA:オートシェイプの線の長...
-
VBで引数にDictionaryオブジェ...
-
AccessVBAで「dim dbs as datab...
おすすめ情報