プロが教える店舗&オフィスのセキュリティ対策術

作業ブックのシート名「1」に
Option Explicit

Private Sub Worksheet_Activate()
Dim Row As Long
For Row = 2 To 23
With Cells(Row, "M")
.ID = .Value
End With
Next Row
End Sub
Private Sub Worksheet_Calculate()
Dim Row As Long, Changed As Boolean
For Row = 2 To 23
With Cells(Row, "M")
If .ID <> .Value Then
.ID = .Value
Changed = True
End If
End With
Next Row
'
Application.ScreenUpdating = False
If Changed Then
Const Temp1 = "○○市建築基準法施行条例 第"
Const Temp2 = "条 適用"
Dim RM As Long, Temp As String
Temp = ""
For RM = 2 To 23
If Cells(RM, "M") = "●" Then
Temp = Temp & Cells(RM, "N") & "・"
End If
Next RM
Temp = Replace(Temp & "@@", "・@@", "")
Application.EnableEvents = False
If Temp = "@@" Then
Range("O24").ClearContents
Else
Range("O24") = Temp1 & Temp & Temp2
End If
Application.EnableEvents = True
End If
Sheets("細則").Visible = [AE4] = "有"
Sheets("角地").Visible = [I26] = "有"
Sheets("真北").Visible = [I30] = "有"
Sheets("自衛隊").Visible = [I23] = "有"
Application.ScreenUpdating = True
End Sub
のコードを設定しております。
最初のコードはセルM列に●が表示されるとN列の数字がセルO24に表示されるようになっており、
次のコード
Sheets("細則").Visible = [AE4] = "有"
Sheets("角地").Visible = [I26] = "有"
Sheets("真北").Visible = [I30] = "有"
Sheets("自衛隊").Visible = [I23] = "有"
が各セルの表示に合わせて非表示シートを表示させるように設定しておりますが、
Sheets("細則").Visible = [AE4] = "有"
Sheets("角地").Visible = [I26] = "有"
Sheets("真北").Visible = [I30] = "有"
Sheets("自衛隊").Visible = [I23] = "有"
このコードが上手く動作してくれません。
解決方法をよろしくお願いいたします。

質問者からの補足コメント

  • 回答ありがとうございました。
    実は以前
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Const Temp1 = "○○市建築基準法施行条例 第"
    Const Temp2 = "条 適用"
    Dim R, C, RM, Temp
    R = Target(1).Row
    C = Target(1).Column
    If (2 <= R And R <= 23) And C = 13 Then
    Temp = ""
    For RM = 2 To 23
    If Cells(RM, 13) = "●" Then
    Temp = Temp & Cells(RM, 14) & "・"
    End If

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/06/08 14:59
  • Next RM
    Temp = Replace(Temp & "@@", "・@@", "")
    Application.EnableEvents = False
    If Temp = "@@" Then
    Range("O24").ClearContents
    Else
    Range("O24") = Temp1 & Temp & Temp2
    End If
    Application.EnableEvents = True
    End If
    Sheets("細則").Visible = [AE4] = "有"
    Sheets("角地").Visible = [I26] = "有"
    Sheets("真北").Visible = [I30] = "有"
    Sheets("自衛隊").Visible = [I23] = "有"
    Application.ScreenUpdating = True
    End Sub

      補足日時:2022/06/08 14:59
  • うーん・・・

    のコードを設定しておりましたが、
    前半のコードがあるセルのコピーで「●」が表示され、上手く行かなかったので
    質問をさせていただき、今回、の質問のコードを設定しました、
    以前のコードでは各セル「例:AE4=有 I26=有等々をプルダウン選択で選択すると
    非表示シートが表示されました、
    しかし、今回の質問のコードを設定し、同じセル作業を行っても非表示シートが表示されなく
    なってしまいました。
    何度も申し訳ありません、解決方法を教えてください。

      補足日時:2022/06/08 15:03

A 回答 (6件)

処理を実行するタイミング(1行目のコード)をご理解下さい。


最初の質問にあったコードは
Private Sub Worksheet_Calculate()で
タイミングは再計算するときです。
補足にお書きになったコードは
Private Sub Worksheet_Change(ByVal Target As Range)で
セルを変更した時です。

>以前のコードでは各セル「例:AE4=有 I26=有等々をプルダウン選択で
>選択すると非表示シートが表示されました、
とのことですから、セルを変更したときに処理を実行していたわけで
Private Sub Worksheet_Change(ByVal Target As Range)
が正しいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
上手く行きました、

お礼日時:2022/06/08 15:34

No2です。



やはり、ご質問文が完全なミスディレクションになっているようですね。
他の方も、それに引っ張られているようです。

No4様の回答にあるように、まずはチェックをしてみるのが宜しいかと。
(想像するところ、セルに示される通りに動作しているものと思います)
    • good
    • 0

[AE4] は Range("AE4")と同じですね。


セルAE4のデータが「有」ならシート細則を再表示するというコードです。
なのでまずはセルAE4やセルI26のデータが「有」かどうかを確認するのが一番かと。
    • good
    • 0

直接の回答ではありません(削除されるかな)。



・最初の = は代入、次の = は比較演算子:比較した結果を代入している
・[AE4] は Range("AE4"):20年程前に見たので記憶に自信はないですが。
    • good
    • 0

こんにちは



>このコードが上手く動作してくれません。
「上手くいかない」という情報だけでは、勝手に妄想するしかありません。
どううまくいかないのかや、エラーが出るのかなどの情報が重大なヒントになります。
(当てずっぽうの回答が欲しいのなら、それでも良いですけれど・・)

ということで、当てずっぽうで・・
ブックが保護されている状態だと、シートの表示/非表示の変更はできないはずです。
(もしこれが原因なら、エラーになるはずと思います)
この回答への補足あり
    • good
    • 0

Sheets("細則").Visible = [AE4] = "有"


何故=が2個もあるのですか?
[AE4]って何ですか?

"細則"シートを表示にするのなら、Sheets("細則").Visible =1です。
    • good
    • 0

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