シート名:受付のVBAコードを設定しております。
シート内のセルを変更するたびにシート全体が更新?されるようで、
セルに対してのマクロを実行した場合でも、かなりの時間がかかります。
解決方法があれば教えてください。
コード
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As Variant
Dim i As Integer
tbl = Array("D10", "D11", "E10", "E11", "F10", "F11")
With Worksheets("審査")
For i = 0 To 5
.Range("B" & 26 + i).Value = Range(tbl(i)).Value
If Range(tbl(i)).Value = "" Then
.Range("E" & 26 + i).Value = ""
Else
.Range("E" & 26 + i).Value = "後日図書の提出をお願いいたします。"
End If
Next i
End With
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
Sheets("消防添").Visible = [R37] = "消防添"
Sheets("F審査").Visible = [F14] = "フラット35(設計)"
Application.ScreenUpdating = True
Application.EnableEvents = True
If Range("D2").Value = "紙申請" Then
Call 電図
Else
Call 紙図
End If
If Range("N41").Value = "■" Then
Call 注意1表示
End If
If Range("F3").Value = "札幌市" Then
Call 注意2表示
End If
If Range("D7").Value = "計画変更" Then
Call 注意3表示
End If
If Range("N44").Value = "■" Then
Call 注意4表示
End If
If Range("N45").Value = "■" Then
Call 注意5表示
End If
If Range("D7").Value = "計画変更" Then
Call 注意6表示
End If
If Range("D7").Value = "計画変更" Then
Call 注意7表示
End If
If Range("N46").Value = "■" Then
Call 棟数表示
End If
If Range("L67").Value = "■" Then
Call 印刷表示
End If
If Range("G205").Value = "■" Then
Call 構造
End If
If Range("R66").Value = "■" Then
Call 車庫増築
End If
If Range("D5").Value = "車庫等:単独" Then
Call 車庫単独
End If
If Range("R55").Value = "車庫注意" Then
Call 車庫単独
End If
If Range("W85").Value = "F電子" Then
Call フラット紙非
End If
If Range("W86").Value = "F紙" Then
Call フラット電非表示
End If
If Range("W85").Value = "F電子" Then
Call 電子フラット保存
End If
If Range("W86").Value = "F紙" Then
Call 紙F保存
End If
If Range("D7").Value = "計画変更" Then
Call 計変画像表示
End If
If Range("F8").Value >= 3 Then
Call 通路
End If
End Sub
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As Variant
Dim i As Integer
Application.ScreenUpdating = False '★ ここへ異動
Application.EnableEvents = False '★ 〃
tbl = Array("D10", "D11", "E10", "E11", "F10", "F11")
With Worksheets("審査")
For i = 0 To 5
.Range("B" & 26 + i).Value = Range(tbl(i)).Value
If Range(tbl(i)).Value = "" Then
.Range("E" & 26 + i).Value = ""
Else
.Range("E" & 26 + i).Value = "後日図書の提出をお願いいたします。"
End If
Next i
End With
On Error Resume Next
Sheets("消防添").Visible = [R37] = "消防添"
Sheets("F審査").Visible = [F14] = "フラット35(設計)"
'~略~
Application.ScreenUpdating = True '☆ これらも後ろにしてみて様子見?
Application.EnableEvents = True '☆ これらも後ろにしてみて様子見?
End Sub
No.4
- 回答日時:
こんにちは
解決はしたのかも知れませんが
>かなりの時間がかかります。解決方法があれば教えてください。
イベント抑止命令の外でイベント発生トリガーが実行されている可能性がありますが情報不足の為、的確な回答ができません
例えばEnableEventsプロパティはApplicationに対してなので他のプロシージャでTrue処理をされると別シートなどであってもTrue処理された事になります
また、Targetを制限する条件分岐などが無くスタックする可能性もありますね
(シートの何処のセルを手作業などを含め変更するともれなく実行されるって怖いですね)
以下余談
良くここまでQAサイトを駆使して色々な方が書いた実行プロシージャを集め
処理業務をしているものと感心します
プロセス、処理、ソースコードが分からず組み合わせで処理を行っていくのは、複数ブックなどを扱っているようですしそろそろ限界ですかね
業務フローに合わせ処理フローを書き出し 各プロシージャを整理するのが良いと思います
特に制御系(Applicationオブジェクト)メソッド、プロパティやイベント、ファンクション、Call などは 使用方法や呼び出しトリガーを考察して改修する必要があると思います
また、(抑止系は必要ですが)抑止系プロパティ例えばCalculationやEnableEventsなどなどに頼らない(言葉の綾)条件分岐(If Intersect)などの細分化や配列作業などでの高速化なども必要かもしれませんね
いずれに致しましても個々のプロシージャを掲示されても 的確な回答をすることは難しく、検証する事も難しいのではないかと思います
つまりは、QAサイトでの回答をそのまま分からず実施する事は難しい事になるので、、そろそろ限界なので自身で理解して整理、改修する必要があると思いますよ
(私的に)コードの提示は現用語より分かり易いので良いですが、
挿入位置やプロシージャ名の指定など かなり重症だと思いますので
いきなりは無理かもしれませんが自身で考え行う事を優先、努力されてはいかがでしょう
勿論、拝見すれば出来る協力は惜しみません
回答ありがとうございます。
いつも助けて頂きましてありがとうございます。
おっしゃる通りです。
少しづつ、理解を深めていき、自分自身で出来るように努力いたします。
今後も、よろしくお願いします。
No.2
- 回答日時:
こんにちは
ご提示のプロシージャからCallされる可能性のあるプロシージャがたくさんありますが、それらがどうなっているのかによります。
ご提示のコードは
>Sub Worksheet_Change
ですけれど、どこかのセルに入力すれば、該当していれば、同じプロシージャがその度に呼び出されることになるので、かなり効率の悪い処理になっているのではと推測されます。
(処理の内容が不明なので、よくわかりませんけれど・・)
それぞれ呼び出されるプロシージャでも同じように効率の悪い処理を行っていれば、それなりの時間が掛かることでしょう。
>解決方法があれば教えてください。
ご提示の範囲内で言うならば、変更セルと処理の関係を整理して、不要な処理を行わないようにすることでしょう。
例えばA1セルの値を変更しただけでも、ご提示のコードの場合は、該当すれば全部の別プロシージャを呼び出すことになります。
実際は、A1セルの値の変更では「何もしない」で良いはずです。
この処理が、関係のないセルに入力するたびに発生するので、重く感じられるのではないでしょうか?
具体的な解決法として考えられるのは、上記の整理を行った上で、
・変更されたセル位置をチェックして、関係する処理だけを行う
ように変更することで、それなりに改善するのではないかと推測されます。
呼び出されるプロシージャの内容が不明ですが、そちらでも同じようにたくさんのプロシージャを呼び出すような仕組みになっているとするなら、ご提示のコードだけではなく、全体的に見直す必要がありそうな気もしますけれど・・・
No.1
- 回答日時:
更新などの停止と再開は、その範囲を広げると問題ありなのですか?
例えば変数宣言の後・End Subの手前にしてみるとか。
Callで呼び出されるものが影響しないのなら、今のままでも良いのかもですが・・・
せめて停止は変数宣言の後に持ってきても良いような。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで計算すると2.43E-19...
-
家電に着信履歴が表示されない。
-
FALSE を 空欄(または表示さ...
-
psdファイルのサムネイル表示に...
-
Access での 「年」 のみの和...
-
vaSpreadのセルの右寄せ表示
-
PCに取り込んだ写真の順番が変わる
-
Outlook Express の時間表示に...
-
EXCELで2つの数値のうち絶対値...
-
オーバレイ表示とは?
-
EMBED PBrushって何ですか?
-
エクセル VBA コンボボックス...
-
windows mailのアドレス帳を、...
-
エクセル2003 IF+COUNT+AV...
-
SATA SSD のTLCとQLCの判別
-
ワイド液晶モニタ(DELL製)での...
-
マイクの音量がかなり小さいで...
-
Chromeをデフォルトとして設定...
-
【GIMP】選択範囲を透明にする。
-
ディーゼル腕時計の時刻設定の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで計算すると2.43E-19...
-
SATA SSD のTLCとQLCの判別
-
FALSE を 空欄(または表示さ...
-
psdファイルのサムネイル表示に...
-
PCに取り込んだ写真の順番が変わる
-
NIKE RUN CLUB アプリについて...
-
Access での 「年」 のみの和...
-
家電に着信履歴が表示されない。
-
アクセサリの電卓機能
-
Twitterの「返信をさらに表示」...
-
EXCELで2つの数値のうち絶対値...
-
Outlook Express の時間表示に...
-
EMBED PBrushって何ですか?
-
スプレッドシートの指定したセ...
-
FirefoxでPDF印刷
-
PCを開くと以前とことなり図の...
-
エクセル VBA コンボボックス...
-
Outlook2010の日付表示に関して
-
エクセルで百万円単位+少数第一...
-
エクセルの数式について教えて...
おすすめ情報
回答ありがとうございました。
おっしゃっていただいた、
せめて停止は変数宣言の後に持ってきても良いような。
はコードをどのように変更すればよろしいでしょうか。
よろしくお願いします。