エクセルのマクロでシートを表示させる

解決済みの質問

エクセルのマクロでシートを表示させる

マクロ初心者です。
1つのブックに20シート入っているのですが、
チェックBOXにチェックを付け、該当するシートのみを表示させるマクロを教えてください。

sheet1以外の下記のシートA~Dは非表示になっており
sheet1にはシート名
A
B
C
D というチェックBOXがあり、
例えば、Bにチェックを入れるとBのシートが表示され、
AとDなど複数チェックが入るとチェックしたシートが表示される様な
マクロがありましたら、教えてください。
マクロの記録で読み込ませているのですが、複数シートの為、限界を感じております。
よろしくお願い致します。

投稿日時 - 2010-02-10 00:28:41

QNo.5663539

困ってます

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

>例えば、Bにチェックを入れるとBのシートが表示され、
>AとDなど複数チェックが入るとチェックしたシートが表示される様な

1)チェックボックスを1つクリックするだけでシートがON/OFFするようなら、表示メニューの
ツールバー⇒コントロールツールボックスの中のチェックボックス
v sheetB
v sheetC
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
Worksheets("Sheet2").Visible = True
Else
Worksheets("Sheet2").Visible = False
End If
End Sub
Private Sub CheckBox2_Click()
If CheckBox2.Value Then
Worksheets("Sheet3").Visible = True
Else
Worksheets("Sheet3").Visible = False
End If
End Sub


2)チェックボックスをいくつか用意した後にボタンで全部をON/FFするようなら、表示メニューの
ツールバー⇒フォームの中のチェックボックス
と、ツールバー⇒コントロールツールボックスの中のボタンの組合せ
v sheetB
v sheetC
[実行ボタン]
Private Sub CommandButton3_Click()
If Range("E13") = True Then
Worksheets("Sheet2").Visible = True
Else
Worksheets("Sheet2").Visible = False
End If
If Range("E17") = True Then
Worksheets("Sheet3").Visible = True
Else
Worksheets("Sheet3").Visible = False
End If
End Sub

後は努力しだい。

投稿日時 - 2010-02-10 01:48:36

お礼

お返事遅くなりました。
おかげさまでイメージ通りのものができました。
ありがとうございました。

投稿日時 - 2010-02-22 22:10:37

ANo.1

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.3

こんにちは。

最初、標準モジュールとクラスモジュールに貼りつけます。

このマクロの使い方は、最初に、SettingCheckBoxes で、CheckBoxにインスタンスを設けます。後は、自動的に組み込まれています。ただし、一旦設定されたCheckBox は、マクロを変更したりすると、設定が壊れることがあります。その場合は、再設定をしてください。シートの数が多くなっても、CheckBoxに組み込まれます。

Sheet1 もしくは、最初のシートに、CheckBox を置いてください。そのシート自体は、表示・非表示は出来ません。後は、CheckBoxの数とシートの数を合わせてください。そうしないと、エラー検出モードでは、設定は出来ません。

もし、シートの数とCheckBox の数を合わせないようでしたら、SettingCheckBoxes の ErrorFree のところに、True を入れてください。

 Const ErrorFree As Boolean = False 'エラー検出モード

一旦設定されたら、シート等を変更しない限りは、再設定は不要です。
'-------------------------------------------
'標準モジュール

Public myClass() As Class1
Sub Auto_Open()
  Call ShVisibleRetrieval
  Call CheckBoxesClsssSetting
End Sub
Sub CheckBoxesClsssSetting()
  'Class 設定
  Dim cnt As Variant
  Dim i As Long
  For Each cnt In ActiveSheet.OLEObjects
    On Error Resume Next
    If TypeOf cnt.Object Is MSForms.CheckBox Then
      ReDim Preserve myClass(i)
      Set myClass(i) = New Class1
      Set myClass(i).Chk = cnt.Object
      i = i + 1
    End If
  Next
  On Error GoTo 0
End Sub
Sub ShVisibleRetrieval()
  'シートの状態をチェックボックスに反映
  Dim i As Long
  Dim cnt As Variant
  Dim n As String
  i = 1
  On Error Resume Next
  For Each cnt In ActiveSheet.OLEObjects
    If TypeOf cnt.Object Is MSForms.CheckBox Then
      n = cnt.Object.Caption
      If Worksheets(n).Visible <> xlSheetVisible Then
        cnt.Object.Value = False
      Else
        cnt.Object.Value = True
      End If
    End If
    If Err.Number > 0 Then Exit Sub
  Next
  On Error GoTo 0
End Sub
'=========================================
Sub SettingCheckBoxes()
  'チェックボックスの設定
  'シート名をチェックボックス名に反映
  Dim i As Long
  Dim shCnt As Long
  Dim cnt As Variant
  Dim e As Integer
  Const ErrorFree As Boolean = False 'エラー検出モード
  'チェックボックスを置いたシートは連動しない
  shCnt = ThisWorkbook.Worksheets.Count
  i = 1
  On Error Resume Next
  For Each cnt In ActiveSheet.OLEObjects
    If TypeOf cnt.Object Is MSForms.CheckBox Then
      Do Until ActiveSheet.Index <> i: i = i + 1: Loop
        cnt.Object.Caption = Worksheets(i).Name
        i = i + 1
      End If
      If Err.Number > 0 Then e = Err.Number: GoTo EndLine
    Next
    On Error GoTo 0
EndLine:
    If ErrorFree = False Then
      If shCnt > (i - 1) Then
        MsgBox "コントロールの数が足りません。" & vbCrLf & _
        "コントロールを増やしてやり直したほうがよいです。", vbQuestion
      ElseIf shCnt < (i - 1) Then
        MsgBox "コントロールを残して、終了しました。" & vbCrLf & _
        "不要なコントロールを削除してください。", vbInformation
      Else
        Call Auto_Open
        MsgBox "設定が終わりましたので、使用できます。", vbInformation
      End If
    Else
      If e = 9 Then
        Call Auto_Open
        MsgBox "コントロールの数が多すぎますが、設定されました。", vbExclamation
      ElseIf e > 0 Then
        Call Auto_Open
        MsgBox "エラーが発生しているので、不具合があるかもしません。", vbExclamation
      Else
        Call Auto_Open
        MsgBox "設定が終わりました。", vbInformation
      End If
    End If
End Sub

'=========================================

'-------------------------------------------
'クラスモジュール

Public WithEvents Chk As MSForms.CheckBox

Private Sub Chk_Click()
  ThisWorkbook.Worksheets(Chk.Caption).Visible = IIf(Chk.Value, xlSheetVisible, xlSheetHidden)
End Sub

投稿日時 - 2010-02-10 11:23:35

ANo.2

シート上に置く事が出来るチェックボックにはコントロールボックスとフォームの2種類がありますがどちらでしょう?

とりあえず、コントロールボックスの方だと仮定して回答いたしますが、チェックボックのコメントがそのままシート名になっているのでしたら、↓こんな感じでどうでしょう。

Private Sub CheckBox1_Click()
 Sheets(CheckBox1.Caption).Visible = CheckBox1.Value
End Sub

「CheckBox1」の部分は適当に修正してください。

投稿日時 - 2010-02-10 10:49:10

あわせてチェックしたい
  • 複数のブックを新しいブックのSheet1にまとめたい ...
  • エクセルのマクロ記録について ...
  • エクセル記録マクロの作成の方法 ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら