- 締切済み
エクセル マクロでシート表示・非表示切替
初めまして、会社の上司より分からなければOKWEVEで質問してみなさいといわれて書いています。 今回ご質問したいのは、エクセルのマクロでシートの表示・非表示の切替が可能なのか? 可能であれば、どんなマクロを組めばいいのか? の2点になります。 具体的には、 (1)エクセルに以下のようなシートを用意します。 目次シート 犬に関するシート(1) 猫に関するシート(1) 馬に関するシート(1) 犬に関するシート(2) 馬に関するシート(2) 犬と猫に関するシート (2)目次シートには、犬・猫・馬といったボタンを用意します。 (3)目次シートの犬のボタンを押すと 目次シート 犬に関するシート(1) 犬に関するシート(2) 犬と猫に関するシート 上記のように目次と犬に関するシートのみ残して表示されるによにしたいです。 拙い説明となりましたが、分かる方いらっしゃいましたら、ご回答をお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
まず、Microsoft Visual Basic for Applicationsのウインドウを開いて、標準モジュールに以下の様なVBAの構文を記述して下さい。 Sub QNo9095713_エクセル_マクロでシート表示_非表示切替() Dim sn As String, ws As Worksheet, Key As String, myBoolean As Boolean Key = ActiveSheet.Buttons(Application.Caller).Text Application.ScreenUpdating = False For Each ws In ThisWorkbook.Worksheets If ws.Name <> "目次シート" Then ws.Visible = ws.Name Like "*" & Key & "*" If ws.Visible Then myBoolean = True End If Next ws If Not myBoolean Then Call 全シート表示 MsgBox """" & Key & """ に関するシートは見つかりませんでした", vbInformation, "該当シート無し" End If Application.ScreenUpdating = True End Sub Sub 全シート表示() Application.ScreenUpdating = False For Each ws In ThisWorkbook.Worksheets ws.Visible = True Next ws Application.ScreenUpdating = True End Sub 次に、目次シートの適当な位置にボタン(フォーム コントロールボタン)を用意し、そのボタンに「QNo9095713_エクセル_マクロでシート表示_非表示切替」というマクロを登録して下さい。 そしてそのボタンに表示されているテキストの文字列を、 犬 などといったキーワードとなる文字列のみの文字列に変更して下さい。 これで上記のボタンを押しますと、目次と犬に関するシートのみ残して表示される様になります。 尚、猫や馬などのボタンを作る際には、上記のボタンをコピーして、そのコピーボタンのテキストの内容を、猫や馬などに変更するだけでOKです。 それから、非表示を解除するボタンも必要になるかと思われますので、ボタン(フォーム コントロールボタン)をもう一つ用意し、そのボタンに「全シート表示」というマクロを登録して下さい。(こちらはテキストの内容を変更せずとも動作します)
- keithin
- ベストアンサー率66% (5278/7941)
ご利用のエクセルのバージョンも不明のご相談ですが,まず,Excelには「フォーム」と「アクティブXコントロール(エクセルのバージョンによってはコントロールツールボックス)」の2種類の「ボタン」を利用する事ができます。 具体的にどのボタンをアナタのところでご利用なのか,あるいは各回答者がどちらを前提に回答マクロを回答しているのか,間違ったボタンに間違ったマクロをつけないよう,よく確認しながら間違えないように作業しなければいけません。 【準備】 目次シートに「オートシェイプの図形」等を利用して犬、猫,馬の各ボタン絵柄を作成する 【手順】 ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub 犬() dim w as worksheet for each w in worksheets w.visible = w.name = "目次シート" or w.name like "*犬*" next end sub sub 猫() dim w as worksheet for each w in worksheets w.visible = w.name = "目次シート" or w.name like "*猫*" next end sub sub 馬() dim w as worksheet for each w in worksheets w.visible = w.name = "目次シート" or w.name like "*馬*" next end sub sub 全てを表示() dim w as worksheet for each w in worksheets w.visible = true next end sub 終了してエクセルに戻る 犬ボタンを右クリックしてマクロの登録を開始,犬マクロを登録する 同様に猫マクロ,馬マクロをそれぞれ登録する。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 色々な方法が有りますけど、それぞれのボタンに Sub 犬() Dim s As Worksheet For Each s In ThisWorkbook.Worksheets If Not s.Name Like "*犬*" And s.Name <> "目次シート" Then s.Visible = xlSheetHidden Else s.Visible = xlSheetVisible End If Next End Sub Sub 猫() Dim s As Worksheet For Each s In ThisWorkbook.Worksheets If Not s.Name Like "*猫*" And s.Name <> "目次シート" Then s.Visible = xlSheetHidden Else s.Visible = xlSheetVisible End If Next End Sub Sub 馬() Dim s As Worksheet For Each s In ThisWorkbook.Worksheets If Not s.Name Like "*馬*" And s.Name <> "目次シート" Then s.Visible = xlSheetHidden Else s.Visible = xlSheetVisible End If Next End Sub を登録するとかどうでしょうか?