• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル ユーザーフォーム ワークシート表示)

エクセルユーザーフォームでワークシートを表示する方法

このQ&Aのポイント
  • エクセルのユーザーフォームで特定のシートを表示する方法についてご教授ください。
  • 現在、エクセルのマクロを勉強中です。ユーザーフォームには3つのラベルがあり、それぞれをクリックすると特定のシートが表示されるようにしたいです。
  • 1つのラベルをクリックしたときに特定のシートが表示されるようにしたいのですが、うまくいきません。修正すべきコードがあれば教えてください。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.1

「初期設定」「4月」「5月」のシートを非表示にしているということでしょうか でしたら以下のようにしてください。 Private Sub Label1_Click() Sheets("初期設定").Visible = True Sheets("4月").Visible = False Sheets("5月").Visible = False Sheets("初期設定").Activate Unload Me End Sub ラベル2が4月のシートなら Private Sub Label2_Click() Sheets("初期設定").Visible = False Sheets("4月").Visible = True Sheets("5月").Visible = False Sheets("4月").Activate Unload Me End Sub .Visible = True が表示で .Visible = False で非表示です。

kumamon2013
質問者

お礼

なんとかできました。まだまだ勉強中ですので,ご迷惑おかけします。

その他の回答 (1)

回答No.2

こんにちは。 さしあたり、手元のExcel2010で説明されている限りのことを再現した場合は 問題なく正常に、「初期設定」シートが表示されます。 もしExcel2013以降に限定される問題であった場合については、 現在私からは確かなものを示すことが出来ませんが、 何が原因で求める結果が得られないのか、 問題点をハッキリさせる為のアドバイスだけ、書いてみます。 まず、この手の問題の解決策を検討する為には、 不足している情報が3つあります。 1)Excelのバージョン 2)UserFormの表示方法(モーダル?Or非モーダル?) 3)UserFormを表示させる側のマクロの記述 1)Excelのバージョン Excel 2013 から、ウィンドウの管理方法は SDI (Single Document Interface) に仕様変更されました。 どう変わったか簡単に説明すると、 以前はひとつのExcelウィンドウに複数のブックを並立させて表示可能でしたが、 2013以降はひとつのExcelウィンドウにひとつのブックのみ表示するようになりました。 このことに起因して、 UserFormからブック、ウィンドウ、シートを扱うやり方も大きく変化していて、 「昔の常識(非常識)、今の非常識(常識)」と喩えられるほど 互換性が保たれていませんので、 バージョンを超えた普遍的な解決策というのは存在しないケースが多いようです。 なので2013より前と以降とでバージョンをゴッチャにしてUserFormを覚えようとしても 役に立たないどころか混乱するだけで終ってしまう可能性もありますから、 書籍やWebサイトを参考にする時にも注意が必要です。 2)UserFormの表示方法(モーダル?Or非モーダル?) これはバージョンを問わず、必要な情報です。 どう違うか簡単に説明すると、 モーダル表示した場合には、 (メッセージボックスがそうであるように) 表示中のUserForm以外のもの-例えばシートやセル- を選択(操作)出来ない状態になります。 非モーダル(モードレス)表示した場合には、 (Excelの検索ダイアログがそうであるように) UserFormを表示させたまま、他の任意のオブジェクトを操作することが可能です。 表示方法(モーダル?Or非モーダル?)に依って、 UserForm表示中の処理(または終了処理)の仕方が変わる場合があります。 因みに、UserFormデザイナーでプロパティページの ShowModal(初期値はTrue)を変更せず。 UserForm1.Show で引数(vbModal / vbModeless)を省略した場合は、 モーダル表示になります。 3)UserFormを表示させる側のマクロの記述 仮に例えば、  Sub 表示UserForm() 1 UserForm1.Show 2 Sheets("Sheet1").Select  End Sub のようなマクロからUserFormを表示させていたとして、 UserForm側で、  Sub Label1_Click() 3 Sheets("初期設定").Activate 4 Unload Me  End Sub が実行されたとします。 処理される順番は、 1 UserForm1.Show 3 Sheets("初期設定").Activate 4 Unload Me 2 Sheets("Sheet1").Select の順です。 3 Sheets("初期設定").Activate が確かに実行されたとしても、その後に、 2 Sheets("Sheet1").Select が打消すようなタイミングで実行されますから、 最初に'表示UserForm'を実行した時点での 選択中のシートがSheet1だった場合は、結局元に戻ってしまいますから、 見かけ上、何も処理されていないことになってしまいます。 以上は、端的な例として挙げるもので、こうした状況に限らず、 UserFormを表示させる側のマクロの記述を知らずには、 確かな解決策を見出すことは出来ません。 次に、そちらで再度確認の上、補足が必要な点 > ユーザーフォームに,3つのラベルを設定し, ... > ... シート名は,「初期設定」「4月」「5月」です。 UserFormと3つのシートは同一のブックにあるのでしょうか? そうでない場合は、 それぞれ何という名前のブックの配下にあるのか、 それぞれのブックは開いているのか、、、 状況に依って対処が変わりますから、確認は必要です。 > Sheets("初期設定").Activate のように親オブジェクト(ブックへの参照)を省略して 直接ワークシートを参照しようとする場合は、注意が必要です。  Workbooks("hoge.xlsm").Activate  Sheets("初期設定").Activate のように先にブックを選択しておけば解決、という場合もあるのかも知れません。 > 何のシートも表示されません。 少し不思議なことになっています。もう少し具体的に説明した方が好いです。 「UserFormを表示させた時点で選択中のシート」  ですら表示されなくなる、という意味なのか、  元通り選択中のシートが表示されたまま、という意味なのか、 「そもそもUserFormを表示させた時点で最初からシート(Excel)を何も表示していない」  ということなのでしょうか? エラーなく終了しているのに正しい結果が得られないのか、 エラーが起きているなら、どの行でどんなエラーなのか、 という状況説明もあった方が好いです。 UserFormを設定しているブック(のVBProject)内の 標準モジュール(Modulle1などの名前のモジュール)に (標準モジュールが無ければ追加して) 以下の3行を貼り付けてください。 Sub 選択_sh初期設定()   Sheets("初期設定").Select End Sub その後、 > Sub Label1_Click() を実行させて、 > ユーザーフォームが消えるのですが,何のシートも表示されません。 という状況に陥ったその時に、 上記の '選択_sh初期設定' を実行してみて、 期待通りに「初期設定」シートが表示されるかどうか確認してください。 もしも、ブックを跨いで現在表示中のブック以外の(開いている)ブック のシートを選択したいのであれば、エラーになる筈です。 その場合は、  Workbooks("ブック名.拡張子").Activate のように正しいブック名(と拡張子)を指定した上で、 Sub 選択_sh初期設定()   Workbooks("hoge.xlsm").Activate   Sheets("初期設定").Select End Sub のように書換えて再度確認してみて下さい。 最後に、解決に繋がるかも知れない間接的な対処を紹介します。 喩えて言えば「元気がないから強壮剤を飲む」的な対応で 症状に適した薬であるかどうかは定かではありません。 ただ、こちらで想定している幾つかのケースでは効く可能性があるというものです。 Private Sub 選択_sh初期設定() 先ほど標準モジュールに加えたマクロの先頭に、 ■Private ■の8文字を書き加えて下さい。 UserFormモジュールの記述を以下に書換えて下さい。 Sub Label1_Click() Application.OnTime Now, "選択_sh初期設定" Unload Me End Sub その後、 > Sub Label1_Click() を実行させて、 どのような結果になるか確認してみて下さい。 この方法であれば、 例えば、3)で例示したケースでも期待通りに1,2,3,4の順に実行されますし、 Excel2013以降のバージョンで他のブックのシートを選択する場合等では 適した薬になる場合もあるかと思います。 こちらからは以上ですが、 想定の幅が広くて、全網羅的な解答は出来ません。 問題点の切り分けに向けた誘導を意図しての回答ですが、 解決に至らない場合は、申し上げ難いですが、 既述の注意点を参考に新たな質問スレッドとして建て直してみることを お勧めします。

kumamon2013
質問者

お礼

エクセルバージョンが2013でした。いろいろなアドバイスを丁寧にありがとうございました。

関連するQ&A

専門家に質問してみよう