[[20201117173847]] 『コピーしたグラフのリンク不良』(ATSさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コピーしたグラフのリンク不良』(ATSさん)

Excel2010からExcel2019への移行時に問題が発生しました。
Sheet2の収斂計算グラフをSheet1へコピーしています。
この場合Sheet1のグラフで収斂計算状況(曲線の変化)を監視しています。
Excel2010では収斂計算の途中経過が見えていました。
Excel2019ではそれが消えていて見えません。
しかし,計算終了時には正常な結果グラフが表示されます。
要するに収斂計算の途中経過がリンクしていません。
だから結果として2010から2019への移行は性能低下になっています。
この問題を解決するヒントを下さい。
なお,私のPC性能は以下の通りです。
Windows10使用
core i 5-4440
64Bit
8GBメモリ
500GBHDD

< 使用 Excel:Excel2019、使用 OS:Windows10 >


収斂計算の仕組みを説明してもらえませんか?
他人には全然分かりません。
マクロか何かで逐次計算をしているのですか?

(γ) 2020/11/17(火) 21:23


早速お返事をいただき感謝をいたします。
問題のグラフは,レトルト食品の殺菌中の中心部温度をATS法で推算するものです。
早く云えば,有限物体の非定常伝熱問題を解いています。
この中心部の温度履歴から食品の殺菌値を計算します。
VBAを用いて収斂目的の逐次計算のプログラムを組んでいます。
Sheet2で,非定常の雰囲気温度カーブから,複数回収斂計算をし,その都度,中心部温度カーブを描いています。
そのグラフはSheet1へコピーしているので収斂計算状況がそこで監視できる状態にしています。
Excel2010では,収斂回数毎の推算カーブが監視できていました。
しかし,Excel2019ではその収斂回数毎の計算状況が表示されなくなったのです。

Excel2010の経験から通常Excelでは,グラフを他所へコピーした時に連動してくれると思っていました。
この辺のところを是非教えて下さい。
もし,例題プログラムが必要なら提供させていただきます。
あらためてご請求下さい。

(ATSさん) 2020/11/17(火) 23:19


まず、収斂計算そのものは確実に実行されているんですか?

それは出来ていて、グラフへの反映だけができない、ということですか?

まず、
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
といったコードが入っていることはないですね。

計算結果がシート上のセルに反映され、
なおかつそれがグラフに反映される仕組みなら、
グラフが変わっていいはずです。
ステップ実行とか、要所にブレークポイントを置いて、
その時にグラフが更新されていることを確認してはどうですか?

(γ) 2020/11/17(火) 23:24


所々に DoEventsを入れるなどとすると事態が好転することはないでしょうか。

(γ) 2020/11/17(火) 23:59


https://tonari-it.com/excel-vba-chart-setsourcedata/
DoEventsは2回必要なようです。
(kazuo) 2020/11/18(水) 00:04

ありがとうございました。
3回4回と繰り返す事も割と多いですが、
それが原因との確信がないと、
1回で諦めてしまうこともありえたので、
防止できてよかったです。
(γ) 2020/11/18(水) 18:44

いろいろトライしましたが,現在,事態は好転していません。
ブレークポイントを置いて確認したところ,停止時にSheet2の元グラフは正常に描かれていました。
計算結果がシート上のセルに反映され,それが,グラフに描かれています。
その場合,Sheet1のコピーしたグラフもブレークポイント時点のグラフが正常に描かれています。
なお,収斂計算終了時も正常に描かれていることは最初に述べています。
したがって,収斂計算そのものは確実に実行されていると考えます。
下記のコードはいずれも入っていません。
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
所々に DoEventsを入れましたが事態は好転しませんでした。
Excel2019にはExcel2010のようなコピーグラフの連動機能が無いのではと思われます。
正確には途中の収斂経過におけるグラフが描けないということです。
この件,これ以上進展が望めないようでしたら断念するつもりです。
どうも有難うございました。

(ATSさん) 2020/11/19(木) 14:08


検証結果を詳細に記載いただき、ありがとうございました。
 
kazuoさんから紹介のありました記事はご覧頂いたでしょうか。
グラフのrefreshメソッドを発行し、その後に、
DoEventsを2回挿入してWindowsがレンダリングする余裕を与えるというものです。
2回でダメなら回数を増やしてみてください。
それでうまくいくと思うんですがねえ。

(γ) 2020/11/19(木) 15:02


問題が解決しました。
いろいろ助言いただきたいへん感謝しています。
最初の収斂計算のNext nの前にDoEventsを1つ入れただけですべて解決しました。
現在,Excel2010時と同じように感動的な収斂計算状況が見れて十分満足しています。
今後ともよろしくご教示お願いします。
 
(ATSさん) 2020/11/23(月) 10:53

ご指摘のようにDoEventsを2つにするとさらに改善されました。
この場合,当初のNext nの前をやめ,後に1つ挿入しました。
残り1つは最初の必要データ呼び出しの最後に挿入しました。
その結果,収斂時間が半分以下になり,Excel2010の性能が再現されました。
したがって,今回の問題はDoEventsを2つの挿入で完全解決です。

(ATSさん) 2020/11/27(金) 10:24


DoEvents
DoEvents
と二回続けたものを挿入するという意味でした。
それでもまだ足りない場合は、3回連続、4回連続、・・・とかしてみてください、
という意味でした。日本語はむずかしい。
少しでもお役に立てたのであれば幸いです。
(γ) 2020/11/27(金) 12:47

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.