🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

2回答

1631閲覧

エクセルマクロで変更がない部分は再計算させない方法

RARUSAN

総合スコア8

VBA

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

0グッド

0クリップ

投稿2020/01/01 18:53

例えば、以下のようなユーザー定義関数があったとします。
引数のa00、a01、a02のいずれかに変更があった場合、普通はすべての計算を実行することになります。
ここで、例えば、a00、a01については変更がなく、a02にのみ変更が生じた場合に、a02の変更が影響する
数式のみを再計算させる方法はありますでしょうか。
if分を用いて、色々条件分岐を設定して、再計算をコントロールする方法ではなく、もっと抜本的に
変更がない場合は再計算をさせないといった方法があれば教えていただきたいです。
(以下のコードはサンプルで、実際にはより複雑なコードで再計算をコントロールしたいです。)

Function NormEx(a00 As Double, a01 As Double, a02 As Double)

AA = ave00
AB = ave01
AC = ave02

AD = AA * AB
AE = AA * AC
AF = AB * AC

End Function

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

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

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

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

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

guest

回答2

0

例えば、以下のようなユーザー定義関数があったとします。

その関数はワークシート上の数式で使いたいのですか?

引数のa00、a01、a02のいずれかに変更があった場合、普通はすべての計算を実行することになります。

提示のコードだけではそういうことは断言できません。
再計算を自動でしたくなければ、手動にすればいいだけの話です。

if分を用いて、色々条件分岐を設定して、再計算をコントロールする方法ではなく、もっと抜本的に
変更がない場合は再計算をさせないといった方法があれば教えていただきたいです。

なぜそうしたいのですか?
なぜ、状況に応じて処理を分岐しないで、
エクセルを制御したいのでしょうか?
シートのチェンジイベントをトリガーに計算したいのだと思いますが、
セルに同じ値を入れなおしても「変更があった」とイベントが発生しますので、
IF文等を使わずに制御できるとは考えにくいです。

(以下のコードはサンプルで、実際にはより複雑なコードで再計算をコントロールしたいです。)

なぜ、本物のコードを提示せず、
ピンポイントの情報提供をもとめるのですか?
たぶん、高速化を模索されておられると思いますが、
知識のない人(=アイデアの出ない人)に、
一般論の話で解決するとは思えません。

現状のシートのイメージと欲しい結果
現状のコードと不満な点や上手くいかない点あるいはもっとこうしたいという点

これらを提示し、広くアイデアをなり手法なり求めてみてはいかがですか?

それと、並行して、やりたいこと以外に基礎を固めることにも、
注力したほうがいいと思います。

投稿2020/01/02 00:06

mattuwan

総合スコア2163

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

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

0

mattuwanさんの回答と被るところが多いですが、
いろいろ不明確な部分が多いので、下記の点について明確にしてください。

以下のようなユーザー定義関数があったとします。

  • ユーザー定義関数はセルに数式として設定してあるのか。
  • ワークシートのチェンジイベントの中に記述してあるのか。

前者だとしたら提示のコードは戻り値を設定していないので矛盾する。
後者だとしたら、a00、a01、a02はなんなのか、AD、AE、AFは何なのか。
単なるコード内の変数なら、再計算とかの意味か不明。
シート上のセルなら、再計算はシートの計算方法の「自動計算」か「手動計算」のことなのか。

引数のa00、a01、a02のいずれかに変更があった場合、普通はすべての計算を実行することになります。

「a00、a01、a02 に変更があった」とは、どういう意味か。
セルの値なのか、セルの値なら何が原因で変更されるのか(ユーザーの入力なのか、VBAによる代入なのか)。
「すべての計算を実行」とは、どの計算のことなのか。シート上に設定してある数式の自動計算のことなのか。

a02にのみ変更が生じた場合に、a02の変更が影響する

数式のみを再計算させる方法はありますでしょうか。

上でも書きましたがa02が何なのか不明確、「a02の変更が影響する数式」というのが何なのか不明確、セル上の数式のこといっているのでしょうか。

サンプルのユーザー定義関数では結局、何が目的の関数なのか不明確すぎるので回答できないです。
そのまま提示できないにしても、もう少し実態に則したコードにして、どこに設定してあって、何がどのように変化して時に、何の計算をさせないようにしたいのか、具体的に説明してください。

投稿2020/01/02 03:45

hatena19

総合スコア34073

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問