• ベストアンサー

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

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

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

  • ベストアンサー
回答No.1

>例えば、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 後は努力しだい。

masapurin
質問者

お礼

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

シート上に置く事が出来るチェックボックにはコントロールボックスとフォームの2種類がありますがどちらでしょう? とりあえず、コントロールボックスの方だと仮定して回答いたしますが、チェックボックのコメントがそのままシート名になっているのでしたら、↓こんな感じでどうでしょう。 Private Sub CheckBox1_Click()  Sheets(CheckBox1.Caption).Visible = CheckBox1.Value End Sub 「CheckBox1」の部分は適当に修正してください。

関連するQ&A

  • エクセルのマクロを使ってシートごとに名前をつけて保存したい

    マクロ初心者です。宜しくお願いします。 1つのブックにシートが複数あります。 それぞれシートをコピーして新しいブックを作成し そのブックに名前をつけて保存したいです。 例えばブック名が「売上管理」でそのシートが「A店」「B店」「C店」と3シートあるとします。 シート名:A店を他のブックにコピーしてマイドキュメントに名前を付けて 保存する場合のマクロを教えてください。 ちなみにその際のブック名は「シート名+任意のセル(D2)」と できれば一番助かります。 ちなみにD2のセルにはToday関数が入ってます。

  • マクロ:他シート間のコピペについて

    管理表.xlsのブックにシートが1月~12月まで12枚あります。 2月シートに作成したマクロボタンで,1月シートの[A1:B30]をコピー → 2月シート[A1:B30]に貼り付けたいのですが、 「新しいマクロの記録」でそれを行うと、2月シートが開いている状態で 1月シートのコピー元を範囲指定するときに、1月シートが表示されてしまします。 これを1月シートを表示させずにコピペするにはどのようにすれば良いのでしょうか。 解りずらい説明で申し訳ありません。 「新しいマクロの記録」しか使ったことがなく、全くの初心者ですがよろしくお願いします。

  • エクセル マクロでsheet2に自動書き込み

    マクロで、グループボックス内でチェックボックスを作り、チェックされたらA列(A1~A10まで)に表示するように作りました。入力ボタンを作り、Sheet2(A列~J列)へ移すようにしました。しかし、2つの項目しかチェックされていなかった場合、空白が目立ち記録を見るととても見づらいです。そこで、空白がある場合は前に詰めるような記述はあるのでしょうか? (例)2つなら、C列とJ列に表示その他は、空白状態。→2つなら、A~B列に自動に詰める。 このようにしたいのですが、出来ますか?

  • Excel(エクセル)で非表示シートをVBAで計算するには?

    よろしくお願いします。 エクセルで1つのブックにAシート~Fシートまであるとします。 再計算させると、すべてのシートを再計算してしまうため時間がかかるので、マクロの自動記録を利用して「Aシート→Bシート→Cシート→Dシート→Eシート」と、必要なシートだけを順番に計算させる事で、処理時間短縮をさせる事をする事ができました。 EシートとFシートは表示させておいて、その他のA~Dシートは非表示にしました。 Eシートには、A~Dシートで計算した結果が表示されるようになっています。 ですが、A~Dシートを非表示にして作成したマクロを実行すると、エラーが出てしまい上手くできません。 A~Dシートを非表示にしていても、ブック全体を再計算させる事はできます。 非表示にしたシートをマクロで計算させるには、どのようにしたら良いでしょか? アドバイスをお願い致します。 登録したマクロは下記のようになっています。 Sub 計算() Sheets("Aシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Bシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Cシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Dシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select End Sub

  • EXCELでのシートの再表示(マクロ)

    あるエクセルのブックで、マクロを使い、複数のシートを非表示にしていました。 うっかり、そのマクロを削除してしまいました。 非表示にしたシートを、再表示する方法をお教えください。 なお、非表示にしたシートは、複数あり、シート名も不確かです。 よろしくお願いします。

  • エクセル 複数シート検索のマクロ

    マクロ初心者です。 エクセルの文字列検索で、複数シートにまたがった場合のマクロ記述を知りたいです。 シートaとシートbの選択は下記となると思いますが、 Sub Macro1() Sheets(Array("a", "b")).Select Sheets("a").Activate End Sub その後で、検索窓([ctrl]+[f])を表示させたいのですが・・・。 よろしくご教示願います。

  • 【Excel2002】表示シートのみを選択するマクロ

    複数シートがあります。(表示シート・非表示シート共に存在します) 表示シートのみを選択するにはどのようなマクロを組めばよいか教えてください。ネットでいくつか検索しましたがコレという物がヒットせず、ピンときません。初心者ですがよろしくお願いいたします。 【社内でデータを編集した後、表示シートのみを別ブック(新しいブック)にコピーして、お客様配布用データにするマクロを作りたいと思っています。】

  • エクセルマクロのことです

    通常使っていたマクロを間違えて消してしまい、その上再構築できなくて困っています。 こんなマクロだったですが。 ブック内に複数のシートが入っています。新しくSheetを追加してA2セル(他のセルの時もあります)をアクティブにします。 Alt+F8→実行でA2セルから下へ、そのブック内の全ての「シート名」が書き出されるというマクロだったのです。 マクロ初心者です、どなたかアドバイスをお願いします。

  • エクセル・マクロ

    (同じフォルダの)複数のブックの中に複数のシートがあり、シートの名前が(一部)共通しています(例:赤組のA、赤組のB・・・)。別のブックに、同じ名称(例:赤組)を含むシートをコピーしてまとめたい(シート1が赤組のA、シート2が赤組のB・・・)のですが、どのようなマクロを記すれば良いでしょうか。宜しくお願いいたします。

  • チェックボックスにマクロを入れて印刷する

    チェックボックスにマクロを入れて印刷するやり方について ご教授いただきたく、質問させていただきます。 シート1   A   B   C    D 1  あ  ●  TRUE  レ 2  い  ×  FALSE 3  う  ▲  TRUE  レ エクセルで上記のシートA1,B1にデータを入力し、 Dにあるチェックボックスにチェックを入れると A1の「あ」をコピーし、シート2のX1にペーストして VLOOKUPを使ってシート1のB1をA1に表示させ、 印刷したいと思っています。 (もちろん、「あ」と「●」の2項目しかないわけではなく、 1行に8項目あり、シート1では横一列に並んでいるものを、 シート2の見栄えのいいフォーマットで、印刷します。 行数は100行くらいあります。) シート2     A      X  1  ●         あ マクロの記録で、「チェックを入れる→コピー→ペースト→印刷→シート1に戻る」とし、   Application.Run "Book1.xls!印刷" Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("X1").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("元").Select となりましたが、チェックを入れても動作しなかったため、 「Application.Run "Book1.xls!印刷"」を削除したところ、 正常に動きました。 問題は・・・・    チェックを入れると動作する(^_^)    チェックを外す時も動作する(T_T)    1個のチェックボックスにマクロは設定できたけれど、    100行あったとしたら、100個のチェックボックスを作成し    1個1個マクロを記録させる?まとめてはできない?    チェックボックスをコピー&ペーストしたところ、    うまくいきませんでした。    (チェックを入れると印刷という動作でOKで、     チェックをあらかじめ入れておき、最後に印刷ボタンで     印刷するというやり方ではありません。     VLOOKUPを使っているので、無理ですよね(・_・;)) 初めてのチェックボックスですが、途中まで簡単にできた!と思ったけど、つまづいてしまいました。 色々調べたのですが、素人同然の私には難しくご質問させていただきました。 皆様お忙しいと思いますが、宜しくお願いいたします。                

専門家に質問してみよう