EXCEL VBA 指定したセル・指定したシートのみを再計算させる・特定のセルの計算(Calculateメゾット)
EXCEL VBA 指定したセル・指定したシートのみを再計算させる・特定のセルの計算(Calculateメゾット)
今回説明するのは、指定したセル・指定したシートのみを再計算する方法を説明いたします。ワークシートに大量の計算式が登録されていると全体的に処理が遅くなるので、指定したセルや特定のワークシートのみを再計算させる仕組みにする事により、処理全体を早める事ができます。ここでは、3つのパターンの再計算させる方法を順番に説明いたします。①指定のセルだけ再計算させる方法②指定したシートのみ再計算させる方法③EXCEL全体を再計算させる方法を説明いたします。
●【EXCEL VBA 高速化 描画・監視・自動計算停止・(画面・更新・停止)】については、下記を参照して下さい】
●【Worksheet.Calculate メソッド (Excel))、下記を参照して下さい】(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.calculate(method)
● Calculateメゾットを利用するには、下記の通りに設定を行います。
・Calculateメゾットは、再計算が手動の時に、セル範囲に登録されている数式を再計算させる時に使用したり、特定のシートに対して再計算を実行させる時に使用します。
【Calculateメゾットを利用手順として】
① 「Application.Calculation = xlCalculationManual」・・で【再計算を手動】にしてセルの数値等を変更しても計算しないように設定します。
② セル「C8:C9」に数値を代入します。①で再計算を止めているので、セル「D8:D9」に計算式が登録されていても計算されません。
セル「D8」に登録されている数式は「=B8*C8」
セル「D9」に登録されている数式は「=B9*C9」
③ Range(“D8:D9”).Calculate ‘セル(D8:D9)を再計算する。ここで指定したセルに対して再計算をを実行します。
セル「D8」が再計算され結果【280,000】が計算される 「単価140,000×2個数」
セル「D9」が再計算され結果【280,000】が計算される 「単価140,000×2個数」
④ 「Application.Calculation = xlCalculationAutomatic」・・で再計算を自動に戻します。最後に、この処理を登録しないと、計算方法が手動計算のままとなります。
●【Calculationプロパティ】の説明
Application.Calculation = xlCalculationManual ・・・・再計算を手動にする
Application.Calculation = xlCalculationAutomatic ・・・・再計算を自動にする
●【Calculateメゾット】の活用パターン
計算対象(設定) | 説明(内容) |
---|---|
Range.Calculate | 指定したセル・セル範囲のみ計算 |
Worksheet.Calculate | 指定したワークシートのみ計算 |
Application.Calculate | EXCEL全体のすべてのブックを計算 |
【使用例(プログラム)】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
' ' Sub Calculate00()’特定のセルを再計算させる Application.Calculation = xlCalculationManual '再計算を手動にする Cells(8, "C") = 2 'セルC8に個数を入力する。 Cells(9, "C") = 3 'セルC9に個数を入力する。 MsgBox "セル(D8:D9)のみ再計算させる" Range("D8:D9").Calculate 'セル(D8:D9)を再計算する。 MsgBox "再計算を自動に戻す" Application.Calculation = xlCalculationAutomatic '再計算を自動に戻す。 End Sub ' |
【実行結果】
【注意点】
【Calculateメゾットを使うにあたり、Calculationメゾットも同時に利用する必要があります。注意点として以下の2点です。
①「Application.Calculation = xlCalculationManual」をプログラムの冒頭に登録しないと、Calculateメゾットで個別再計算しても自動計算となるので、必ず登録する。
②「Application.Calculation = xlCalculationAutomatic」をプログラムの最後に登録しないと、Calculateメゾット再計算処理を行う必要があるので、最後は、再計算を自動に戻す。
※処理したい内容に応じて設定を行って下さい。
EXCEL VBA 指定したシートのみを再計算させる・特定シートを再計算(Calculateメゾット)
下記のサンプルプログラムは、指定シートのみを再計算させるサンプルプログラムです。EXCELファイルのブック全体に計算式が大量に設定されていると、全体的にEXCELの動作が遅くなります。処理に必要な、指定シートのみ実行する事で、処理の高速化を図ることも出来ます。処理条件により一部のシートのみを計算させたい時に利用すると良いと思います。それでは、サンプルプログラムを交えて順番に説明いたします。
●InputBoxが表示され、再計算するワークシートを選択します。今回は、3の埼玉支店のみが【再計算】されます。
1:は、「東京支店」2:は、「神奈川支店」3:は、「埼玉支店」
【プログラムの流れ】
※プログラムの実行前に、各ワークシートの個数を変更します。
① 再計算したいワークシートを選択します。(InputBoxにて数値を選択:1:東京支店・2:神奈川支店・3:埼玉支店)
② 再計算を手動に切り替えます。
③ ①のInputBoxにて入力した数値に応じて、選択したワークシートを再計算します。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● Calculate02(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
' ' Sub Calculate01() '指定したワークシートを再計算させる Dim ws01, ws02, ws03 As Worksheet Dim Ans, I As Long Set ws01 = Worksheets("東京支店") Set ws02 = Worksheets("神奈川支店") Set ws03 = Worksheets("埼玉支店") Ans = Application.InputBox(Prompt:="数値で入力", Title:="1~3の数値を入力してください", Default:=1, Left:=100, Top:=200, Type:=1) 'InputBoxメゾット設定します。(戻り値をType:=1 数値に設定 Application.Calculation = xlCalculationManual '再計算を手動にする Select Case Ans Case 1 ws01.Activate MsgBox "東京支店を再計算します。" ws01.Calculate Case 2 ws02.Activate MsgBox "神奈川支店を再計算します。" ws02.Calculate Case 3 ws03.Activate MsgBox "埼玉支店を再計算します。" ws03.Calculate End Select 'Application.Calculation = xlCalculationAutomatic '再計算を自動に戻す。 End Sub ' |
(画面クリックして拡大)
EXCEL VBA 指定したセル範囲のみ再計算させる・特定セルの再計算(Calculateメゾット)
下記のサンプルプログラムは、指定したセル範囲のみ再計算するサンプルプログラムです。1つのワークシートに3つの表があります。①~③の指定した表ごとに再計算を実行します。
※ プログラムを実行して、InputBoxが表示されるので、【1】は、東京支店を再計算・【2】は、神奈川支店を再計算・【3】は、埼玉支店を再計算します。
下図では、【1】東京支店を選択したので、東京支店の表のみ【単価】×【個数】の再計算を行ったので、E列(E4:E12)に計算結果が表示されました。
【プログラムの流れ】
① 再計算させる表を1~3の数値でInputBoxへ入力します。
② InputBoxで入力した数値に応じて表のセル番号を把握します。
③ 入力した値が1~3の範囲内か判定する。
④ 入力値が1~3の範囲の場合、メッセージ表示にて”●●支店を再計算します。”と表示します。
表の選択範囲を取得して、その範囲を再計算します。
⑤ 入力値が1~3以外の場合は、何もしない。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● Calculate03(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
' ' Sub Calculate02() '特定したセル範囲のみを再計算させる Dim Setrng As Range Dim Hani As String Dim Ans, I As Long Ans = Application.InputBox(Prompt:="数値で入力", Title:="1~3の数値を入力してください", Default:=0, Left:=100, Top:=200, Type:=1) 'InputBoxメゾット設定します。(戻り値をType:=1 数値に設定 Application.Calculation = xlCalculationManual '再計算を手動にする Select Case Ans Case 1 Hani = "A2" '東京支店の位置を指定(A2) Case 2 Hani = "A15" '神奈川支店の位置を指定(A15) Case 3 Hani = "G15" '埼玉支店の位置を指定(G15) End Select If Ans > 0 And Ans < 4 Then '入力値が1~3以内か判定する。 MsgBox Range(Hani) & "を再計算します。" Set Setrng = Range(Hani).CurrentRegion '表の選択範囲を取得します。 Setrng.Calculate '選択範囲を再計算する。 End If 'Application.Calculation = xlCalculationAutomatic '再計算を自動に戻す。 End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。