プロが教えるわが家の防犯対策術!

VBAコードでのシート自動表示について教えてください。
Excelファイルのシート7のシート名が建築物(表面)5.3があります。
下記の条件でのシート表示を自動で行いたいです。
条件-1
セルAG1には「=受付シート!F3」に値が表示されるように設定しております。
セルAG1に「札〇市」と表示された場合のみシート22のシート名が「自〇隊」を表示
条件-2
セルE11には「=受付シート!J67」に値が表示されるように設定しております。
セルE11に「■」と表示された場合のみシート15のシート名が「消〇用添付用紙」を表示
条件-
セルQ50には「=受付シート!F196」に値が表示されるように設定しております。
セルQ50に「■」と表示された場合のみシート14のシート名が「消〇(事務用)」を表示
以上です。
以上の条件以外では「自〇隊」「消〇用添付用紙」「消〇(事務用)」のシート全て非表示にしたいです。
よろしくお願いいたします。

教えて!goo グレード

A 回答 (1件)

>シートの表示・非表示について


'非表示
SheetObject.Visible = False
'非表示(シートタグ右クリックにも非表示)
SheetObject.Visible = xlVeryHidden 
'表示
SheetObject.Visible = True

>シート表示を自動で行いたいです。
(計算結果で実行)
Worksheet_Calculateイベントを使用する方法

ThisWorkbook Module
Private Sub Workbook_Open()
Call make_Ary(Worksheets(7))
End Sub

標準Module
Option Explicit
Public Ary(2) As Variant
Sub make_Ary(Sh As Worksheet)
Ary(0) = Sh.Range("AG1")
Ary(1) = Sh.Range("E11")
Ary(2) = Sh.Range("Q50")
End Sub

Sub SH_Visible(Sh As Worksheet)
'基本的な条件分岐はご説明をコードに変えるだけです
'メイン処理は文頭を参考に、ご自身でお願いします。
End Sub

シート7 Module
Option Explicit
Private Sub Worksheet_Activate()
Call SH_Visible(ActiveSheet)
Call make_Ary(ActiveSheet)
End Sub
Private Sub Worksheet_Calculate()
Dim Rng As Range, r As Range
Dim n As Long
Set Rng = Range("AG1,E11,Q50")
For Each r In Rng
On Error Resume Next
If Ary(n) <> r Then
If Err.Number = 0 Then
Call SH_Visible(ActiveSheet)
Call make_Ary(ActiveSheet)
Exit For
End If
On Error GoTo 0
End If
On Error GoTo 0
n = n + 1
Next
End Sub

プロシージャ引数については多くマクロが登録されている可能性を考え
呼び出しが出来、ダイアログに表示させない為の処置です
各処理、ロジックの説明は不要と思われるので割愛します。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。
参考にさせて頂、頑張ります。

お礼日時:2022/01/22 10:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング