質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

363閲覧

Application.CalculationおよびScreenUpdatingの挙動の安定性

neet_studier

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/05/24 15:36

よろしくお願いいたします。

質問の主旨は、Application.Calculation = xlCalculationManual や、ScreenUpdating=False とした場合の、挙動は常に同じなのか、あるいは、そのときのPCの調子やエクセルの気まぐれで不安定なのかどうか、ということです。

セルA1には、「あいうえお」 と入力されていて、
セルB1には、 =A1  となっていて、
セルC1には、 =IF (B1 ="あいうえお" ,"OK","NO")  となっているとします。

この状態で、以下の命令を実行した場合どうなるでしょう。

Public Sub test() Application.Calculation = xlCalculationManual Range("A1") = "かきくけこ" MsgBox Range("A1") & " / " & Range("B1") & " / " & Range("C1") & " / " & IIf(Range("B1") = "あいうえお", "OK", "NO") Application.Calculation = xlCalculationAutomatic MsgBox Range("A1") & " / " & Range("B1") & " / " & Range("C1") & " / " & IIf(Range("B1") = "あいうえお", "OK", "NO") Range("A1") = "あいうえお" End Sub

この場合、

1回目 = かきくけこ / あいうえお / OK / OK
2回目 = かきくけこ / かきくこけ / NO / NO

と、100回実行しても必ず同じ結果になるでしょうか?

また、

Public Sub test2() Application.ScreenUpdating = False Range("A1") = "かきくけこ" MsgBox Range("A1") & " / " & Range("B1") & " / " & Range("C1") & " / " & IIf(Range("B1") = "あいうえお", "OK", "NO") Application.ScreenUpdating = True MsgBox Range("A1") & " / " & Range("B1") & " / " & Range("C1") & " / " & IIf(Range("B1") = "あいうえお", "OK", "NO") Range("A1") = "あいうえお" End Sub

このプロシージャの場合は、
1回目2回目とも、 かきくけこ / かきくこけ / NO / NO と、
100回実行しても必ず同じ結果になるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Application.Calculation = xlCalculationManual、ScreenUpdating = False
で高速化できるということは、広く知られているので、それを使用した設計も多くあると思います。
しかし、そのために不安定になったという報告は、私は見たことがありません。

そのような質問をされるということは、
不安定になった経験があるのでしょうか。
それとも、そのような報告をどこかで見たのでしょうか。

投稿2019/05/24 20:48

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一つ気になるのが、
Calculation プロパティです。
もし、Falseになっているのであるれば、事例ののうな結果で出る可能性があります。
ScreenUpdating のプロパティが、Trueになっていていも、
Calculation プロパティが False では、表示は変化しないものです。

投稿2019/06/01 12:04

kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2019/06/01 12:19

高速化の手法として、重い処理の前に、 Application.Calculation = xlCalculationManual、ScreenUpdating = False を挿入、重い処理の最後に、 Application.Calculation = xlCalculationAutomatic、ScreenUpdating = True を挿入というのは、あちこちのWEBサイトや書籍で紹介されています。 このことを質問者さんは質問されていると思いますが、 これで想定外の動作になったということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問