dポイントプレゼントキャンペーン実施中!

Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As Variant
Dim i As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
tbl = Array("D10", "D11", "E10", "E11", "F10", "F11")
With Worksheets("審査")
For i = 0 To 5
.Range("C" & 26 + i).Value = Range(tbl(i)).Value
If Range(tbl(i)).Value = "" Then
.Range("F" & 26 + i).Value = ""
Else
.Range("F" & 26 + i).Value = "後日図書の提出をお願いいたします。"
End If
Next i
End With
On Error Resume Next
Sheets("消防添").Visible = [R37] = "消防添"
途中省略
Sheets("INDX").Visible = [D2] = "電子申請"
下記のコードもいくつか途中省略しております。
If Range("D2").Value = "紙申請" Then
Call 電図
Else
Call 紙図
End If
If Range("N41").Value = "■" Then
Call 注意1表示
End If
If Range("D7").Value = "計画変更" Then
Call 注意3表示
End If
If Range("N44").Value = "■" Then
Call 注意4表示
End If
If Range("D5").Value = "車庫等:単独" Then
Call 車庫単独
End If
If Range("R55").Value = "車庫注意" Then
Call 車庫単独
End If

If Range("D7").Value = "計画変更" Then
Call 計変画像表示
End If
If Range("Q27").Value = "■" Then
Call 区分図形表示
End If

If Range("D12").Value = "有" Then
Call 消防表示
End If

If Range("F13").Value = "有" Then
Call 浄化槽表示
End If


If Range("F8").Value >= 3 Then
Call 通路
End If

If Range("J16").Value = "消防同意必要" Then
Call 消防貼り付け
End If

If Range("Q2").Value = "■" Then
Call 市町村名コピー
End If

If Range("F3").Value = "旭川市" Then
Call 旭川市図形表示
End If

If Target.Address = "$C$20" Then
Call 審査担当コメント非表示
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
以上となります。

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

  • ごめんなさい
    質問の記載を忘れてました。
    質問は
    下記のコードをマクロ設定ブックの指定シート「受付」に設定しております。
    コードにはシート内のセル値に応じてシートが表示されたり、マクロが実行されたりしますが、
    Private Sub Worksheet_Change(ByVal Target As Range)
    を使用している為、コードの設定を実行できるセル値を変更するたびに
    常にシートイベントが走っており、
    セルを変更するたびに処理に時間がかかっております。
    この問題を解決できる方法を教えてください。
    となります。
    宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2024/05/29 17:14
  • うーん・・・

    回答ありがとうございます。
    マクロの場合は解決いたしました。
    シート表示の場合
    例えば
    Sheets("消防添").Visible = [R37] = "消防添"
    の場合はどのように設定すれば良いでしょうか。
    何度も申し訳ありません。
    宜しくお願い致します。

    No.3の回答に寄せられた補足コメントです。 補足日時:2024/05/30 14:27

A 回答 (5件)

この処理が動いて欲しいのは、どのセルを変更した場合なのか、そのセルは特定されていますか?


されているなら、そのアドレス以外の場合、Exitさせるようにすれば良いと思います。
たとえばSelect Caseを使った場合
Private Sub Worksheet_Change(ByVal Target As Range)
の次に

Select Case Target.Address
Case "$C$20", "$R$37", "$N$41",・・・・・
GoTo continue
Case Else
Exit Sub
End Select
continue:

というような感じになるかと。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
早速試してみます。

お礼日時:2024/05/30 16:24

補足です。


ここ↓も参考にして下さい
https://terakoya.sejuku.net/question/detail/32336
    • good
    • 0

最初の一行、つまり


Private Sub Worksheet_Change(ByVal Target As Range)
の次に
If Target.Address <> "$C$20" Then End Sub
を入れてみて下さい。
この回答への補足あり
    • good
    • 0

こんばんは



処理に時間がかかるのなら、対策としては、
 ・ 無駄な処理は行わないように制御する
 ・ 処理の効率を良くして高速化する
くらいでしょうか?

質問文に提示されていない部分が多々あるので内容が不明ですけれど、提示部分と同じような内容なら、シートに関数で設定しておく方がよさそうに思われます。
シート関数であれば、
 ・エクセルが無駄な処理は行わないように制御してくれる
 ・関数の方が下手なマクロよりもレスポンスが速い
可能性が高いので、処理効率が良くなることを期待できます。

『関数を使うとユーザの誤操作で上書きされる恐れがある』と言うのであれば、その部分に保護をかけておけば、壊されることもなくなります。
    • good
    • 2
この回答へのお礼

回答ありがとうございました
参考にさせて頂き、
早速試してみます^ ^

お礼日時:2024/05/29 20:14

質問は何でしょうか。

この回答への補足あり
    • good
    • 0

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

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


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