Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Microsoft 365)
コマンド ScreenUpdating = False の挙動について
投稿日時: 22/05/22 09:18:46
投稿者: はるき

マクロ内で首記のapplicationオブジェクトのプロパティscreenupdating=falseを実行すると
画面がちらつく状況となっています。いろいろ設定変更とかやっていますが、状況は変わりません。
改善方法をご存じの方がいらっしゃれば、ご教授お願いいたします。
下のマクロはテスト的に作成したものです。
ワークシートでセルを選択すると画面がちらつきます。
ちなみに、このファイルを会社のパソコンで開いて同様な操作してもちらつきはありません。
この状況は、ある日突然に発生しました。それまでは会社のPCと同様にちらつきはありませんでした。
Debugモードで1行ずつチェックするとscreenupdating=falseの次行から各行のdebugで画面のちらつきがワークシートで確認できます。繰り返し回数が数回ですと画面のちらつきは目立ちませんが、下の設定のように回数が増えるとscreenupdatingがfalseからfreeに至るまでのコードの回数分ちらつくので視覚的にはちらつきが大きくなります。
ちなみに会社のPCで同様にdebugしてもちらつきはありません。
Excelは何度か再インストールしてみましたが状況は変わりません。
Windowsの再インストールは厄介なので、まだトライはしていません。
 
以下、コードです。
 
Option Explicit
 
Private Sub Worksheet_Activate()
 Application.Calculation = xlCalculationManual '手動計算
End Sub
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim i As Integer, RW0 As Long, CL0 As Long
  RW0 = Selection.Row
  CL0 = Selection.Column
 Application.ScreenUpdating = False '・・・・・画面fix この行を過ぎるとシートがちらつく
 Application.EnableEvents = False '・・・・・・・イベントOFF
 
   For i = 3 To 100
      Cells(i, CL0).Select
   Next i
  
 Cells(RW0, CL0).Select
 Application.EnableEvents = True '・・・・・・・・イベントON
 Application.ScreenUpdating = True '・・・・・・画面free
End Sub

回答
投稿日時: 22/05/22 12:50:06
投稿者: taitani

ちらつくというのがどのようなものかはわかりませんが、、、
論点は"Application.ScreenUpdating = False"の動作が正常に行われているかどうか。かと。
 
あと、別の PC では正常に動作する (同じファイルということが前提ですが) ということであれば、
すでに切り分けはできているのかな。と思われます。

投稿日時: 22/05/22 17:19:03
投稿者: はるき

taitaniさん、コメントありがとうございます。
 
>ちらつくというのがどのようなものかはわかりませんが、、、
 
  画面全体が瞬時に背景が真っ白になって元に戻るといった具合ですか。。
  画面全体がブリンクする感じです。
 
>論点は"Application.ScreenUpdating = False"の動作が正常に行われているかどうか。かと。
 あと、別の PC では正常に動作する (同じファイルということが前提ですが) ということであれば、
 
    別のPCでチェックしたのも同じファイルです。
 
>すでに切り分けはできているのかな。と思われます。
 
  といいますと、パソコンのハード的な問題?
    それとも、Windows10のシステム上で何らかのファイルの破損とか発生によるもの?
  Windows10の再インストールの実施は修復に関して価値がありそうでしょうか?

回答
投稿日時: 22/05/22 17:55:55
投稿者: taitani

引用:
画面全体が瞬時に背景が真っ白になって元に戻るといった具合ですか。。
  画面全体がブリンクする感じです。

 
私の Mictosoft 365 では再現できなかったですが、以下の URL の内容で "軽減" できるのかもしれません。
https://support.microsoft.com/ja-jp/topic/excel-2013-%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E9%96%8B%E3%81%8D-appliction-screenupdating-%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E4%BD%BF%E7%94%A8%E4%B8%AD%E3%81%AB%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96-%E3%83%96%E3%83%83%E3%82%AF%E3%81%8C%E5%88%87%E3%82%8A%E6%9B%BF%E3%82%8F%E3%82%8B%E3%81%A8%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%8C%E7%82%B9%E6%BB%85%E3%81%97%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%81%8C%E8%A6%8B%E3%81%88%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8B-8bec3fe8-3ad1-a2bd-897a-fd02a2abc3e5
 
引用:
Windows10の再インストールの実施は修復に関して価値がありそうでしょうか?

 
うーん、あるかどうかは正直わかりませんが、問題の切り分けにはあると思います。
※ すみませんが、責任はとれません。。。

投稿日時: 22/05/22 19:45:11
投稿者: はるき

taitaniさん、ありがとうございます。
実は、紹介していただいたMicrosoftサポートのトラブル回避策は、今回の問題発生時にネット検索して読んでおります。この例はブックを複数開いたときの画面のちらつき防止なので、ブックのvisibleプロパティーで対応してあります。今回の場合は単一ブックなので応用できそうにないと判断しました。
 
もう少し、回答受付状態にさせていただき、最終的にはうまくいくかどうかわかりませんが、
面倒くさいですが、Windows10の再インストールに踏み切るかどうか判断したいと思っています。
 
taitaniさん、有難うございました。

回答
投稿日時: 22/05/23 10:23:19
投稿者: Suzu

テストコードとの事ですが、何のテストでしょうか。
 
 
手動計算に変更
 
選択列の 3行目から 100行目 のセルを選択後
最終的に 選択セルを選択
 
の流れから察するに、選択列の 3行目から 100行目 を再計算させたい?
 
であれば
 
 
Cells(3, Target.Row).Resize(98).Calculate
 
セルを選択するから、ちらつきます。
 
これでも ちらつく のであれば、数式処理に時間が掛かるのでしょう。
・ネットワーク上のブックのセルを参照している
・VLOOKUP等のLOOKUP系や、FIND系
・揮発関数
を使用していませんか?
 
VBAを使用せず、
まずは 当該列 の 3〜100行目を選択し、「F9」で再計算をさせてみて
どれくらい時間が掛かるか確認してみては?

投稿日時: 22/05/23 18:46:45
投稿者: はるき

Suzuさん、コメントありがとうございます。
ここに掲載したコードは、あくまでScreenupdating=falseの実行結果を見るためだけのマクロです。
実際には実務で使用しているマクロはScreenupdating=falseとtrue間での記述内容がこのテストマクロとは全く違っています。
ここでは、画面のちらつきの原因を探ることを目的に記述内容をシンプルにしたテストマクロを作成しました。
For〜nextの処理間で、セルをセレクトさせたのは意図的に時間をかけようと思ったからです。
時間をかけた時の画面のちらつきが私のPCと他のPCでどれくらい差が出るのか見たいと思いました。
このテストマクロを使用して他のPC(会社のPC3台)と比較した結果、セルを選択してからイベントが終了するまで会社のPCは3台ともまったく画面のちらつきがなく、自宅のPCはおおきなちらつきがあるという結果でした。
会社のPCも自宅のPCもOS、エクセルバージョンともに全く同じ仕様でエクセルについてはオプションの設定など同じになっています。
前述しましたように、エクセルの再インストールでもちらつきが改善できなかったので、残るはWindowsかパソコンのハード的な問題かなと思っています。

回答
投稿日時: 22/05/24 11:40:49
投稿者: Suzu

引用:
ここに掲載したコードは、あくまでScreenupdating=falseの実行結果を見るためだけのマクロです。
実際には実務で使用しているマクロはScreenupdating=falseとtrue間での記述内容がこのテストマクロとは全く違っています。
ここでは、画面のちらつきの原因を探ることを目的に記述内容をシンプルにしたテストマクロを作成しました。

 
テストとしては、負荷が足りない気はしますが。。
まっさらなブックにおいて、ご提示のコードを実行した場合の処理時間はどのくらいですか?
当方だと、1秒も掛からずに終わります。カーソルが点滅しているな〜程度です。
 
 ScreenUpDation = Treu のままだと、アクティブセルの移動に伴い
画面スクロールが行われているのが確認できますが、それでも1秒も掛からずに終わります。
 
 
引用:
このテストマクロを使用して他のPC(会社のPC3台)と比較した結果、セルを選択してからイベントが終了するまで会社のPCは3台ともまったく画面のちらつきがなく、自宅のPCはおおきなちらつきがあるという結果でした。

引用:
会社のPCも自宅のPCもOS、エクセルバージョンともに全く同じ仕様でエクセルについてはオプションの設定など同じになっています。

 
ハードウェアについては同じではありませんよね?
CPU、メモリ、HDD/SSD、GPU(グラフィックボードが搭載されているのかCPU内蔵なのか)
 
当方のリッチではない環境でも 1秒で終わり、カーソルのブリンク程度で終わる処理
多分、あなたの会社のPCでも、同程度なんだと思います。
それなのに「画面全体」に対しブリンクする事から考えれば マシンが非力なのではないかと思います。
 
 
Excel終了状態から、容量の大きなExcelのファイルをダブルクリックで開き
開き終わるまでの時間を比べてみてください。大きな時間差が出ませんか?
 
Windowsタスクマネージャー のパフォーマンス の各項目について
自宅/会社 PC において
・開こうとする時
・VBAを実行した時
それぞれ、どのリソースが 高負荷になっているのかによって、ボトルネックとなるパーツが判りますので
その更新を検討してはどうでしょう。
 
Windowsの再インストールで軽快にはなるかも知れませんが、期待薄と思います。
 
 
パーツの更新ほどではありませんが、
Excel の設定で 軽快になる事もありますので、設定をしていないのであれば下記を実施してみてください。
 
1:開発タブ - アドイン - Excelアドイン で、「アドイン」が表示されます。
  有効なアドイン のうち、使わないアドインのチェックを外す
   (開発タブが非表示の場合は、表示にするか
   ファイル - オプション - アドイン アクティブなアプリケーションアドインに項目があれば
   その項目を選択し、「設定」)
 
2:オプション - 詳細設定 - 表示 - ハードウェアグラフィックアクセラレーターを無効にする
 にチェックを入れる
  (Office365の場合、Excelに設定が無い場合がある様です。
   Word の設定を行うと、Excelの設定も変わる様ですので、Wordで設定ください)
 
3:オプション - アクセスビリティー(または簡単操作)の
   操作をアニメーションで表示する チェックを外す
 
4:C:\Users\(ユーザ名)\AppData\Roaming\Microsoft\Excel にある Excel15.xlb
  ファイルの削除 −−− 起動時に再作成されます
 
特に「2」は グラフィックボードがないマシンでは チェックを入れておいた方が良い項目です

投稿日時: 22/05/24 23:23:37
投稿者: はるき

Suzuさん、コメントありがとうございます。
 
最初の投稿に記載してありますが、
 
  >この状況は、ある日突然に発生しました。それまでは会社のPCと同様にちらつきはありませんでした。
 
ということです。
突然に発生したので、はじめはWindowsの更新かExcelの更新による弊害かなと思ったくらいです。
しかしながら、その直前に更新された履歴はないようです。
特にメモリーやCPUに負担をかける操作(アプリのインストールなど)も行っていませんし。
 
会社のPCとのハードスペックの差はほとんどありません。中には私のPCよりスペック低いものもあります。
 
紹介していただいた、Excel側の設定で1〜3項までは、既に設定済みです。
 
動画をアップできると一目瞭然で違いが判るのですが.....
 
しかしながら、見る人によっては大した違いないよ、これくらいなら気にならないと思う方もいらっしゃるでしょうが今まで使用してきてなんともなかったものが突如として様変わりする不可解さがなんとも癪ですね。
原因がわかって対応ができないのならあきらめもつきますが。
 
ひょっとすると、放っておけばある日突然元に戻るかもしれません。
この件を除けば、今のところ異常は無いので様子を見ながら使いたいと思いますが、ご指摘いただいた
ハード的なスペックの更新もできるのならやりたいと思います。
 
ちなみにメモリーの増設は実施してあり12GBとなっていますが、CPUは購入時のままですので、
マザーボードの交換ですね。
 
OS 名    Microsoft Windows 10 Home
バージョン    10.0.19044 ビルド 19044
システム製造元    LENOVO
システムモデル    10093
システムの種類    x64-ベース PC
システム SKU    LENOVO_MT_1009
プロセッサ    Intel(R) Pentium(R) CPU G2020 @ 2.90GHz、2900 Mhz、2 個のコア、2 個のロジカル プロセッサ
BIOS バージョン/日付    LENOVO ESKT24A, 2013/05/24
SMBIOS バージョン    2.7
インストール済みの物理メモリ (RAM)    12.0 GB
合計物理メモリ    11.9 GB
利用可能な物理メモリ    8.14 GB
合計仮想メモリ    13.7 GB
利用可能な仮想メモリ    8.98 GB
ページ ファイルの空き容量    1.81 GB
ページ ファイル    C:\pagefile.sys

投稿日時: 22/05/25 05:50:14
投稿者: はるき

皆さま、有難うございました。
 
解決したわけではありませんが、少し様子を見てから、ご指導いただいた件を変更してみるなり
してみようと思います。
 
元の状態に戻すことができた場合には、原因と対策についてこの場で再度報告します。