• ベストアンサー

visibleプロパティの使い方

matyuといいます、毎度の初歩的質問ですがよろしくお願い致します。 Sub HideRows() Worksheets("Sheet2").Rows("5:7").Visible = xlSheetHidden End Sub これが成立たない理由がわかりません。 「~Hidden = True」と同じ意味じゃないんでしょうか? こういった場合にできないことを裏付ける調べ方を教えていただけますでしょうか ※例えばBisial basic リファレンスでの調べ方など visible~は

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#2の回答者です。 >一応VBAの勉強の仕方を書いておきます。 プログラムは、コードの通るか通らないか、という結果を以て、一応の合っているかを判定します。エラーが出たら、間違えたということです。 >参考書籍を一通り読んで、各ステートメントに訳文を書きます。 今のようなやり方だと、習得は厳しい状態だと思います。こうしたら、こうなるのだ、ということだけでよいのです。入門レベルでは、「なぜ」は禁物です。ともかく、自分の手で、VBEに入力し続けます。ひとつのボーダーラインとして、500個を目指して、ひたすらコードを書き、コードを実行して通ることを目指してください。早い人なら、半年ぐらいで可能ですが、遅い人は、2年以上も掛かります。必要なら、書籍にメモを書いてもよいです。 私の書いているのは前回と同じ主旨です。個々のオブジェクトのプロパティやメソッドは、何年やったところで、個々に覚えているわけではありません。掲示板などで聞くと、さも、回答者は細かく知っているように書きますが、ほとんどの人は、経験的に、こうすれば、コードが通るはずだという見通しがあるだけです。 xlSheetVisible は、Sheet オブジェクトのVisible プロパティの組み込み定数で、それ以外に用いるわけがありません。Rangeオブジェクトなどに使っても、デタラメのコードを書いたら、仮にエラーを出さなくても、内容がめちゃくちゃになってしまいます。Range オブジェクトは、Visible プロパティがないということであって、それは、理屈ではありません。誰かは知りませんが、そういうように決めた設計者がいるだけです。 >この"該当のものを探す"という部分がどういうことなのかわかりません。「Hidden = True」は出てこないのですが・・・ 私の書いた内容は、ヘルプに基づいているものですが、それは、知っているから分かるということです。知らない人は見当がつきません。インテリセンスを使える場所なら出てくることはあっても、仮に使えても、分かるかどうかは分かりません。  オブジェクト-->プロパティ =組み込み定数 の組み合わせをバラバラに覚えようとしても、到底覚えられるものではないと思います。 オブジェクトがあって、プロパティが決まってくるのですが、プロパティとオブジェクトはバラバラのものではありません。 この時点で、あまりオブジェクトの説明は誤解される恐れがあるのですが、私は、テレビ受像機をたとえをしています。オブジェクトは、テレビと同じで、一般の私たちは、その仕組みは分かりません。しかし、ボリュームで音量を大きくしたり、チャンネルで局を変えたりすることができます。そのボリュームやチャンネルが、プロパティなのです。私たちは、テレビを、このプロパティによってのみ操作できます。ボタンを押したり回したりという行為自体は、別の機器であっても、そのオブジェクトのひとつの操作に対しては、概ね、ひとつのプロパティと組み込み定数や定数しかありません。(ただし、Rangeオブジェクトは、複合的な要素が強いです。) 前回、なぜ私が書いたかというと、覚えなくてもよいことで振り回される必要がないということです。Rows は、Range オブジェクトの一種だとしても、そのプロパティに何が来るかは、経験を積むか、テキストやメモを見るかしなければ分からないし、まして、標準モジュールでは、インテリセンスが出てきません。 それと、オブジェクトブラウザの話が出ていますが、それを使いこなすのは、少し難しいのではないでしょうか。中級レベル(オブジェクトを理解している)でないと、使いこなせないと思います。

matyu0531
質問者

お礼

Wendy02さん、回答ありがとうございます。 少々習得の仕方が違っているようですね^^; >500個を目指して、ひたすらコードを書き、コードを実行して通ることを目指してください よく逆引き辞典とかがあありますが、ああいったをひたすら書いて実行したほうがいいのでしょうか?

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。 >>500個を目指して、ひたすらコードを書き、コードを実行して通ることを目指してください >よく逆引き辞典とかがあありますが、ああいったをひたすら書いて実行したほうがいいのでしょうか? コードだけを写すというなら、意味がありません。「逆引き辞典」というのは、自分が必要になった時に調べるものであって、入門時には、ほとんど、その本で学習するだけの情報が足りません。それと、「逆引き辞典」は、あまりうまくないコードもあるような気がします。 学習用の教本の場合、UserForm や関数など、それぞれ章に分かれているはずです。そこで考えながら入力をしていくわけです。章の終わりには、チェックする質問が付いていたりします。ここが分からないなって思えば、その章をもう一度、チェックしなおします。 今、やっている本をともかく続けてください。本のページにこんなことが書かれてあったなって思い出せればよいです。 それから、入門時は、じっと我慢してください。私自身の経験で、入門時というのは、質問して解答を貰っても、本当には理解していないことが多いように思うのです。 なお、組み込み定数の中身は数値だからといって、組み込み定数の乱用はコードを読みにくくするだけです。可読性が落ちますし、思わぬ失敗をしますから、基本的にVBAでは数値に置き換えはしないほうがよいです。 Visible は、表示するということですが、それは、オブジェクトのプロパティにあって始めて、変更できるものだということをお忘れないようにしてください。 例外としては、MsgBox や SpecialCells の引数の組み込み定数は長いので、VBAでは、ベテランの人は、数値で書いてしまうことがあります。

matyu0531
質問者

お礼

Wendy02さん、回答ありがとうございます。 >入門時というのは、質問して解答を貰っても、本当には理解していないことが多いように思うのです。 おっしゃる通り、回答をいただいても半分も理解できていないように思います。もう一度基礎編を繰り返し読んでみます。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.4

#2へのお礼に関してです。 >「Visible = xlSheetHidden」と書きたくなる ここがmatyuさんが上手く理解できていない点だと思います。 #1で書きましたように、 xlSheetHidden = False xlSheetVisible = True です。 対象によって、Visibleを使ったりHiddenを使ったりしますが、 Visible(表示する)が True→表示する False→表示しない です。 Hidden(表示しない)の場合は True→表示しない False→表示する になります。 数学的に言うと「Hidden」は「Not(Visible)」なので「True」と「False」の結果が逆になります。 xlSheetHiddenやxlSheetVisibleは、プログラムを組むときに“分かりやすいように”と作られた定数ですが、実際に使うときは「中身」に注意してください。

matyu0531
質問者

お礼

rukukuさん回答ありがとうございました。 もう一度該当箇所を勉強しなおしてみます。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.3

>私なりの理解をかきますが… はい、その考え方であっています。

matyu0531
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 一応、今回は、あえて回答を書かせていただきます。 >「~Hidden = True」と同じ意味じゃないんでしょうか? >こういった場合にできないことを裏付ける調べ方を教えていただけますでしょうか Rows のところに、カーソルを持っていって、F1を押します。読んでみると、これはRangeオブジェクトだと分かります。Rangeオブジェクトと同じ扱いをして良いと考えます。ここら辺が、慣れていないとできません。 関連項目の中から、Range オブジェクトを探します。そこで、Rangeのプロパティの中から、該当のものを探す、ということですが……。 >Worksheets("Sheet2").Rows("5:7").Visible = xlSheetHidden まったくコードはありえないものですが、プログラミングを学ぶ、その学習方法に問題があるような気がします。入門レベルでは、あまり、細かい部分にこだわらないほうが良いと思います。出てきたものは、出てきたものだけを、そういうものだとして学んだほうがよいです。また、質問は、ある程度、コードを書けるようになってからのほうがよいです。 本来、このレベルの答えは、必ず、先にあると思って進むしかないのです。 前回、締め後に、あえて、以下にレスをつけておいたので読んでください。 http://oshiete1.goo.ne.jp/qa4768181.html

matyu0531
質問者

お礼

Wendy02さん、いつもありがとうございます。 前回分確認させていただきます。 >関連項目の中から、Range オブジェクトを探します。そこで、Rangeのプロパティの中から、該当のものを探す、ということですが……。 すいません、この"該当のものを探す"という部分がどういうことなのかわかりません。「Hidden = True」は出てこないのですが・・・ >入門レベルでは、あまり、細かい部分にこだわらないほうが良いと思います。 >本来、このレベルの答えは、必ず、先にあると思って進むしかないのです。 私の記憶はまだ定着していないものがほとんどで、「Visible = xlSheetHidden」と書きたくなる、というか以前の記憶が出てきてしまいどちらか判断しかねてしまうんですね。 1つ1つどうしてそうなるのか(なんで「.Visible = xlSheetHidden」ではないのか)、というのを納得しないと記憶にのこらない気がしまして確認をしたかったということですが、1+1がどうして2になるのか?的なレベルでしょうか。 だとしたら、ROWSが出てきたあとの非表示のコードは「Visible = xlSheetHidden」を使うんだ、という覚え方で先にに進みますが、こんな感じでいいのでしょうか? よろしくお願い致します。

matyu0531
質問者

補足

一応VBAの勉強の仕方を書いておきます。 あまりよくないようであればご指摘ください。 まず、参考書籍を一通り読んで、各ステートメントに訳文を書きます。 (あとでそれをみて、ステートメントをスラスラ書けるかチェックするために) 短いセンテンスに関しては別にノートに書き写して英語の構文を覚えるようにしています。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

はじめまして もしかしたらエクセルのバージョンによって多少違うかもしれませんが、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」に使えます。

matyu0531
質問者

お礼

rukukuさん、回答ありがとうございます。 ここでオブジェクトブラウザってのがでてくるんですね? いま使っている参考書「かんたんプログラミングExcelVBA2003基礎編」にもオブジェクトブラウザの解説があるんですが、どう活用していいものかさっぱりでした。 私なりの理解をかきますが、 1.オブジェクト/ライブラリのところをExcelにする。 2.検索文字列にHiddenといれて検索をおすとクラス=Range、メンバ=Hiddenと出てくる(Visibleはメンバにでてこない) よってHiddenが使える、という感じでしょうか?

関連するQ&A

  • ExcelVBAで行の非表示、表示をコード化したい

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • ExcelVBAで行の非表示、表示をコード化

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • Visibleは使えないのでしょうか?

    オフィス2010です。 アクセスvbaでエクセルのデータを操作したいので Sub test() Set cnEx = CreateObject("ADODB.Connection") With cnEx .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Properties("Data Source") = "C:\Users\test.xlsm" .Open .Visible = True 'エラーになる End With End Sub と言うコードを作ったのですが .Visible = Trueで 実行時エラー 446 オブジェクトは名前付き引数をサポートしていません。 と言うエラーが発生します。 Visibleは使えないのでしょうか?

  • VisibleとOpenFormは意味が同じ?

    データベースにフォームが1つあります。 標準モジュールに Sub Visible() Form_フォーム1.Visible = True End Sub Sub OpenForm() DoCmd.OpenForm "フォーム1" End Sub を作り、どちらも実行させても同じ動きをします。(フォームが開きます) この二つは同じ動きをすると思っていいのでしょうか?

  • この場合エクセルVBAでどう書けばいいでしょうか?

    あるシートのH列で、H21からH46のあいだで"False"がある行を非表示にしたいのです。 下記の冗長なマクロでもそうなりますが、For Nextというのを使うともっと簡潔に記述できると思うのですが、初心者のためよくわかりません。ご教示ください。 また、下記の式はシートが保護されていると働きませんが、保護したシートでも動く方法があればそれもあわせて教えていただけると幸いです。 エクセルは95です。 Sub 空白行非表示() G% = Sheets("見積書").Range("H48").Value With Sheets("見積書") Rows("19:47").RowHeight = G% If Range("H21") = False Then Rows("21").EntireRow.Hidden = True End If If Range("H22") = False Then Rows("22").EntireRow.Hidden = True End If If Range("H23") = False Then Rows("23").EntireRow.Hidden = True End If If Range("H24") = False Then Rows("24").EntireRow.Hidden = True End If 途中、繰り返しのため省略 If Range("H42") = False Then Rows("42").EntireRow.Hidden = True End If If Range("H43") = False Then Rows("43").EntireRow.Hidden = True End If If Range("H44") = False Then Rows("44").EntireRow.Hidden = True End If If Range("H45") = False Then Rows("45").EntireRow.Hidden = True End If If Range("H46") = False Then Rows("46").EntireRow.Hidden = True End If End With End Sub

  • エクセル・見積表の抽出印刷方法?その3

    先日(No.130709とNo.130958)、エクセルで作成した見積表の数量を入力した行のみを印刷したいとお聞きした者です。その際は、多くの方に回答を頂き、誠にありがとうございました。おかげさまで完成間近ですが、もう1つ問題が出てきてしまいました。宜しくお願いします。 商品によっては、行を追加し手で入力しなくてはならないものがあるので、あらかじめ空白行(金額列には0が入っています)を設けておきたいのですが、そうすると抽出した際、空白行も一緒に抽出されてしまいます。空白行がある場合は、下記の構文のやり方では無理なのでしょうか?空白行も非表示にしたいのです。 Private Sub CommandButton1_Click() Dim i As Integer i=2 Do Until i=-1 If Worksheets("Sheet1").Cells(i,1).Value=""Then i=-1 Else If Worksheets("Sheet1").Cells(i,6).Text=0Or_ Worksheets("Sheet1").Cells(i,6).Text=""Then Worksheets("Sheet1").Rows(i).Select Selection.EntireRow.Hidden=True End If i=i+1 End If Loop End Sub Private Sub CommandButton2_Click() Worksheets("Sheet1").Cells.Select Selection.Rows.Hidden=False End Sub 以上です。 宜しくお願いします。

  • エクセルVBA の変数を使うべきでしょうか?

    はじめまして。エクセル初心者です。 書籍やサイトで勉強させてもらっていますが、VBAがなかなか難しくてすぐに壁にぶつかってしまいます。少々困ってしまい、詳しい方のアドバイスを頂ければと質問を投稿させていただきました。 どうか宜しくお願い致します。質問ですが、 以下のようなコードで、sheet5のB列の任意のセルをダブルクリックした場合、sheet5のBCD列の同じ行のセル値がsheet1の指定した列に入力されるという処理を作りました。 これで一応目的の動作はするのですが、数が増えると「コンパイルエラー・プロシージャが大きすぎます」というメッセージがでてしまいます。列や行には規則性があるので、もしかしたら変数というものを使ってコードを書き直せばいいのかなと思いネットで調べてみたのですが、今のところさっぱり理解できません。 申し訳ありませんが、分かりやすくご教授いただけないでしょうか。バージョンは2003を使っています。 また、下のコードですと、sheet5のBCDいずれかのセルに空白があった場合、sheet1の列に入力されるときに入力される行がずれてしまいます。今は空白を何かで埋めて対処しているのですが、この問題の解決策も教えて頂けると助かります。どうか宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Target.Address = "$B$2" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B2") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C2") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D2") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$3" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B3") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C3") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D3") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$4" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B4") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C4") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D4") Worksheets("sheet1").Activate cancel = True End If   ・     ・   ・     ・   ・     ・ End Sub

  • visibleの機能について

    VBで「Label.visible」でFalseが非表示、Trueが表示だと思うのですが、Trueで非表示の場合があります。 プログラムではTrueにしたりFalseにしたりします。もしかしてvisibleの設定がおかしくなったのかなと思って実行中にvisibleの内容を表示してみてみましたが、Trueで非表示になる場合があります。必ず非表示になると言うわけではないので困っています。 原因がわかる方、もしかしてここでは?と言う方でも結構です。 宜しくお願い致します。

  • シートの保護を実行した時、マクロだけは作動させたい

    いつもお世話になります。 WINDOWS7 EXCELL2010です。 シートの保護を実行すると下記のマクロが作動しないのですが何かいい方法はないでしょうか。 もし可能ならばご教示いただければ幸いです。 このマクロは素人の私が作成したもので合計のある行だけを表示するものです。 参考 Sub 非表示() ' ' 非表示 Macro ' マクロ記録日 : 2013/4/25 ユーザー名 : YOKOHAMA '' Rows("72:87").Select Selection.EntireRow.Hidden = True Rows("89:95").Select Selection.EntireRow.Hidden = True Rows("97:105").Select Selection.EntireRow.Hidden = True Rows("107:112").Select Selection.EntireRow.Hidden = True Rows("114:121").Select Selection.EntireRow.Hidden = True Rows("123:131").Select Selection.EntireRow.Hidden = True Rows("133:145").Select Selection.EntireRow.Hidden = True Rows("147:152").Select Selection.EntireRow.Hidden = True Rows("154:159").Select Selection.EntireRow.Hidden = True Rows("161:169").Select Selection.EntireRow.Hidden = True Rows("171:179").Select Selection.EntireRow.Hidden = True Rows("181:187").Select Selection.EntireRow.Hidden = True Rows("189:195").Select Selection.EntireRow.Hidden = True Rows("197:205").Select Selection.EntireRow.Hidden = True Rows("207:214").Select Selection.EntireRow.Hidden = True Rows("216:223").Select Selection.EntireRow.Hidden = True Rows("225:229").Select Selection.EntireRow.Hidden = True Rows("231:238").Select Selection.EntireRow.Hidden = True Rows("240:243").Select Selection.EntireRow.Hidden = True Rows("245:250").Select Selection.EntireRow.Hidden = True Rows("252:259").Select Selection.EntireRow.Hidden = True Rows("261:266").Select Selection.EntireRow.Hidden = True Range("A1").Select End Sub

  • 以下のコードですと、アクティブシート以外全て隠してしまいますが、

    以下のコードですと、アクティブシート以外全て隠してしまいますが、 選択(複数)されているシート以外を非表示にするにはどのように書き換えたら良いでしょうか。 Sub Test() Dim mstr as String Dim i as Integer mstr = ActiveSheet.Name For i = 1 To Worksheets.Count If Worksheets(i).Visible = True And Worksheets(i).Name <> str(0) Then Worksheets(i).Visible = xlVeryHidden End If Next i End Sub よろしくお願いします。

専門家に質問してみよう