- ベストアンサー
visibleプロパティの使い方
matyuといいます、毎度の初歩的質問ですがよろしくお願い致します。 Sub HideRows() Worksheets("Sheet2").Rows("5:7").Visible = xlSheetHidden End Sub これが成立たない理由がわかりません。 「~Hidden = True」と同じ意味じゃないんでしょうか? こういった場合にできないことを裏付ける調べ方を教えていただけますでしょうか ※例えばBisial basic リファレンスでの調べ方など visible~は
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2の回答者です。 >一応VBAの勉強の仕方を書いておきます。 プログラムは、コードの通るか通らないか、という結果を以て、一応の合っているかを判定します。エラーが出たら、間違えたということです。 >参考書籍を一通り読んで、各ステートメントに訳文を書きます。 今のようなやり方だと、習得は厳しい状態だと思います。こうしたら、こうなるのだ、ということだけでよいのです。入門レベルでは、「なぜ」は禁物です。ともかく、自分の手で、VBEに入力し続けます。ひとつのボーダーラインとして、500個を目指して、ひたすらコードを書き、コードを実行して通ることを目指してください。早い人なら、半年ぐらいで可能ですが、遅い人は、2年以上も掛かります。必要なら、書籍にメモを書いてもよいです。 私の書いているのは前回と同じ主旨です。個々のオブジェクトのプロパティやメソッドは、何年やったところで、個々に覚えているわけではありません。掲示板などで聞くと、さも、回答者は細かく知っているように書きますが、ほとんどの人は、経験的に、こうすれば、コードが通るはずだという見通しがあるだけです。 xlSheetVisible は、Sheet オブジェクトのVisible プロパティの組み込み定数で、それ以外に用いるわけがありません。Rangeオブジェクトなどに使っても、デタラメのコードを書いたら、仮にエラーを出さなくても、内容がめちゃくちゃになってしまいます。Range オブジェクトは、Visible プロパティがないということであって、それは、理屈ではありません。誰かは知りませんが、そういうように決めた設計者がいるだけです。 >この"該当のものを探す"という部分がどういうことなのかわかりません。「Hidden = True」は出てこないのですが・・・ 私の書いた内容は、ヘルプに基づいているものですが、それは、知っているから分かるということです。知らない人は見当がつきません。インテリセンスを使える場所なら出てくることはあっても、仮に使えても、分かるかどうかは分かりません。 オブジェクト-->プロパティ =組み込み定数 の組み合わせをバラバラに覚えようとしても、到底覚えられるものではないと思います。 オブジェクトがあって、プロパティが決まってくるのですが、プロパティとオブジェクトはバラバラのものではありません。 この時点で、あまりオブジェクトの説明は誤解される恐れがあるのですが、私は、テレビ受像機をたとえをしています。オブジェクトは、テレビと同じで、一般の私たちは、その仕組みは分かりません。しかし、ボリュームで音量を大きくしたり、チャンネルで局を変えたりすることができます。そのボリュームやチャンネルが、プロパティなのです。私たちは、テレビを、このプロパティによってのみ操作できます。ボタンを押したり回したりという行為自体は、別の機器であっても、そのオブジェクトのひとつの操作に対しては、概ね、ひとつのプロパティと組み込み定数や定数しかありません。(ただし、Rangeオブジェクトは、複合的な要素が強いです。) 前回、なぜ私が書いたかというと、覚えなくてもよいことで振り回される必要がないということです。Rows は、Range オブジェクトの一種だとしても、そのプロパティに何が来るかは、経験を積むか、テキストやメモを見るかしなければ分からないし、まして、標準モジュールでは、インテリセンスが出てきません。 それと、オブジェクトブラウザの話が出ていますが、それを使いこなすのは、少し難しいのではないでしょうか。中級レベル(オブジェクトを理解している)でないと、使いこなせないと思います。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >>500個を目指して、ひたすらコードを書き、コードを実行して通ることを目指してください >よく逆引き辞典とかがあありますが、ああいったをひたすら書いて実行したほうがいいのでしょうか? コードだけを写すというなら、意味がありません。「逆引き辞典」というのは、自分が必要になった時に調べるものであって、入門時には、ほとんど、その本で学習するだけの情報が足りません。それと、「逆引き辞典」は、あまりうまくないコードもあるような気がします。 学習用の教本の場合、UserForm や関数など、それぞれ章に分かれているはずです。そこで考えながら入力をしていくわけです。章の終わりには、チェックする質問が付いていたりします。ここが分からないなって思えば、その章をもう一度、チェックしなおします。 今、やっている本をともかく続けてください。本のページにこんなことが書かれてあったなって思い出せればよいです。 それから、入門時は、じっと我慢してください。私自身の経験で、入門時というのは、質問して解答を貰っても、本当には理解していないことが多いように思うのです。 なお、組み込み定数の中身は数値だからといって、組み込み定数の乱用はコードを読みにくくするだけです。可読性が落ちますし、思わぬ失敗をしますから、基本的にVBAでは数値に置き換えはしないほうがよいです。 Visible は、表示するということですが、それは、オブジェクトのプロパティにあって始めて、変更できるものだということをお忘れないようにしてください。 例外としては、MsgBox や SpecialCells の引数の組み込み定数は長いので、VBAでは、ベテランの人は、数値で書いてしまうことがあります。
お礼
Wendy02さん、回答ありがとうございます。 >入門時というのは、質問して解答を貰っても、本当には理解していないことが多いように思うのです。 おっしゃる通り、回答をいただいても半分も理解できていないように思います。もう一度基礎編を繰り返し読んでみます。
- rukuku
- ベストアンサー率42% (401/933)
#2へのお礼に関してです。 >「Visible = xlSheetHidden」と書きたくなる ここがmatyuさんが上手く理解できていない点だと思います。 #1で書きましたように、 xlSheetHidden = False xlSheetVisible = True です。 対象によって、Visibleを使ったりHiddenを使ったりしますが、 Visible(表示する)が True→表示する False→表示しない です。 Hidden(表示しない)の場合は True→表示しない False→表示する になります。 数学的に言うと「Hidden」は「Not(Visible)」なので「True」と「False」の結果が逆になります。 xlSheetHiddenやxlSheetVisibleは、プログラムを組むときに“分かりやすいように”と作られた定数ですが、実際に使うときは「中身」に注意してください。
お礼
rukukuさん回答ありがとうございました。 もう一度該当箇所を勉強しなおしてみます。
- rukuku
- ベストアンサー率42% (401/933)
>私なりの理解をかきますが… はい、その考え方であっています。
お礼
ありがとうございました。 参考になりました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 一応、今回は、あえて回答を書かせていただきます。 >「~Hidden = True」と同じ意味じゃないんでしょうか? >こういった場合にできないことを裏付ける調べ方を教えていただけますでしょうか Rows のところに、カーソルを持っていって、F1を押します。読んでみると、これはRangeオブジェクトだと分かります。Rangeオブジェクトと同じ扱いをして良いと考えます。ここら辺が、慣れていないとできません。 関連項目の中から、Range オブジェクトを探します。そこで、Rangeのプロパティの中から、該当のものを探す、ということですが……。 >Worksheets("Sheet2").Rows("5:7").Visible = xlSheetHidden まったくコードはありえないものですが、プログラミングを学ぶ、その学習方法に問題があるような気がします。入門レベルでは、あまり、細かい部分にこだわらないほうが良いと思います。出てきたものは、出てきたものだけを、そういうものだとして学んだほうがよいです。また、質問は、ある程度、コードを書けるようになってからのほうがよいです。 本来、このレベルの答えは、必ず、先にあると思って進むしかないのです。 前回、締め後に、あえて、以下にレスをつけておいたので読んでください。 http://oshiete1.goo.ne.jp/qa4768181.html
お礼
Wendy02さん、いつもありがとうございます。 前回分確認させていただきます。 >関連項目の中から、Range オブジェクトを探します。そこで、Rangeのプロパティの中から、該当のものを探す、ということですが……。 すいません、この"該当のものを探す"という部分がどういうことなのかわかりません。「Hidden = True」は出てこないのですが・・・ >入門レベルでは、あまり、細かい部分にこだわらないほうが良いと思います。 >本来、このレベルの答えは、必ず、先にあると思って進むしかないのです。 私の記憶はまだ定着していないものがほとんどで、「Visible = xlSheetHidden」と書きたくなる、というか以前の記憶が出てきてしまいどちらか判断しかねてしまうんですね。 1つ1つどうしてそうなるのか(なんで「.Visible = xlSheetHidden」ではないのか)、というのを納得しないと記憶にのこらない気がしまして確認をしたかったということですが、1+1がどうして2になるのか?的なレベルでしょうか。 だとしたら、ROWSが出てきたあとの非表示のコードは「Visible = xlSheetHidden」を使うんだ、という覚え方で先にに進みますが、こんな感じでいいのでしょうか? よろしくお願い致します。
補足
一応VBAの勉強の仕方を書いておきます。 あまりよくないようであればご指摘ください。 まず、参考書籍を一通り読んで、各ステートメントに訳文を書きます。 (あとでそれをみて、ステートメントをスラスラ書けるかチェックするために) 短いセンテンスに関しては別にノートに書き写して英語の構文を覚えるようにしています。
- rukuku
- ベストアンサー率42% (401/933)
はじめまして もしかしたらエクセルのバージョンによって多少違うかもしれませんが、Excel2000でチェックしてみた感じでは以下の通りです。 「visibleは”Range(セル範囲)”に対してはは使われない」というのが原因のようです。 Worksheets("Sheet2").Rows("5:7").Hidden = xlSheetHidden は有効でした。ただし、この命令では、指定された行は「表示」になります。 非表示にするには Worksheets("Sheet2").Rows("5:7").Hidden = xlSheetVisible とする必要があります。 なんかややこしく思えるかもしれませんが、 xlSheetHiddenやxlSheetVisibleというのは真の姿でなくて、 xlSheetHidden = 0 xlSheetVisible = -1 です。 従って、 xlSheetHidden → False xlSheetVisible → True として扱われます。 >こういった場合にできないことを裏付ける調べ方 「Visual Basic Editor」の「オブジェクトブラウザ」で検索してみましたが、「visible」は「Range」に対しては使われないようです。 「Hidden」ならば「Range」に使えます。
お礼
rukukuさん、回答ありがとうございます。 ここでオブジェクトブラウザってのがでてくるんですね? いま使っている参考書「かんたんプログラミングExcelVBA2003基礎編」にもオブジェクトブラウザの解説があるんですが、どう活用していいものかさっぱりでした。 私なりの理解をかきますが、 1.オブジェクト/ライブラリのところをExcelにする。 2.検索文字列にHiddenといれて検索をおすとクラス=Range、メンバ=Hiddenと出てくる(Visibleはメンバにでてこない) よってHiddenが使える、という感じでしょうか?
お礼
Wendy02さん、回答ありがとうございます。 少々習得の仕方が違っているようですね^^; >500個を目指して、ひたすらコードを書き、コードを実行して通ることを目指してください よく逆引き辞典とかがあありますが、ああいったをひたすら書いて実行したほうがいいのでしょうか?