- ベストアンサー
エクセルで複数のシートをフォルダ化したい
現在、仕事の売上げ表を作っているのですが、シートが増えましたので、シートをフォルダ化できないか質問です。 現状「売上げ1月」「支出1月」「人件費1月」……と12ヶ月分のシート36枚あります。これを「売上げ」「支出」「人件費」の三つのメインシートに対して、そのシートをクリックすると、「1月」「2月」……と12ヶ月分のシートが表示されればと思います。 少々わかりにく文章ではありますが、上記のように表示できる方法はありませんか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 やりたい方法と違いますが、こんな方法は同でしょうか? 現状のシートにメインシートを追加し、メインシートをクリックすると そのシートに関連したシートのみ表示します。 (「売上げ」をクリックすると「売上げ1月」「売上げ2月」…を表示) ※メインシートと表示シートの関連は、"売上げ"がシート名に含まれるか否かで表示/非表示を識別します。 (ついでに、シート名に色付けもしています。) 「売上げ1月」「支出1月」「人件費1月」……と12ヶ月分のシート36枚のブックに「売上げ」「支出」「人件費」のシートを追加します。 「ツール」-「マクロ」-「Visual Basic Editor」を選択し、 「売上げ」、「支出」、「人件費」の各シートのマクロとして Private Sub Worksheet_Activate() Call ActiveSheet(Me.Name) End Sub を記入します。 Visual Basic Editor の「挿入」-「標準モジュール」を選択します。 Module1が追加されるので、Module1に以下を記入します。 Sub ActiveSheet(ByVal sheetName As String) Dim st As Worksheet For Each st In ActiveWorkbook.Sheets If st.Name = "売上げ" Or _ st.Name = "支出" Or _ st.Name = "人件費" Then st.Visible = True Else If InStr(st.Name, sheetName) >= 1 Then 'sheetName を含むWorksheetを表示する st.Visible = True st.Tab.ColorIndex = 38 '色付け Else '上記以外は非表示 st.Visible = False End If End If Next End Sub
その他の回答 (2)
- x0000x
- ベストアンサー率52% (67/127)
#No2です。 質問の回答です。 ご指摘の通りで問題ないです。 メインシートと表示シートは、メインシートのシート名を 含んでいる事で関連付けしています。 ================================ If st.Name = "売上げ" Or _ st.Name = "支出" Or _ st.Name = "新規メインシート" Or _ st.Name = "人件費" Then st.Visible = True ================================ "新規メインシート"のマクロ(Worksheet_Activateイベント)記述もお忘れなく。
お礼
ご丁寧にありがとうございました。 また何かありましたら、よろしくお願い致します。
フォルダ化ではないのですが、 目次シートを作ってハイパーリンクを使うのはどうでしょう。
お礼
とても参考になりました。 応用してみます。 ありがとうございました。
お礼
ご回答ありがとうございます。 上記を試してみたところ、とても便利ですね。 上記の内容を参考に表作りを進めていきたいです。 質問なのですが、メインシート(表示シートも12ヶ月分)を一つ増やす場合、Module1に加えるコードを教えてほしいです。 ================================ If st.Name = "売上げ" Or _ st.Name = "支出" Or _ st.Name = "人件費" Then st.Visible = True ================================ に対して、 ================================ If st.Name = "売上げ" Or _ st.Name = "支出" Or _ st.Name = "新規メインシート" Or _ st.Name = "人件費" Then st.Visible = True ================================ でよろしいのでしょうか? お手数ですが、お時間がある時にでもご回答頂けたらと思います。 今回はありがとうございました。