http://support.microsoft.com/default.aspx?scid=k …
は、CELL、INDIRECT、INFO、NOW、OFFSET、RAND、TODAY関数が“揮発性”と言っています。
NOW、RAND、TODAY関数は、[再計算]する(TODAY関数の場合は日付が変わる)度にその返り値が変わるので“揮発性”であろうことは理解できます。
ところで、OFFSET関数の場合は[再計算]ではその返り値は変わらないけど、どのようにして当該関数が“揮発性”であることを納得できますか?
マクロは使わないことが前提として、ご回答ください。
ちなみに、
http://www.civil-design.net/free/data/excel/func …
は、AREAS、CELL、COLUMNS、INDEX、INDIRECT、NOW、OFFSET、RAND、ROWS、TODAY関数が“揮発性”と言っています。OFFSETに似た INDEX関数も!(コレ、正しいですか?)
No.3ベストアンサー
- 回答日時:
んーーー
もしかするとこういう言い方も出来ると思いますが,誤解から来た「納得」を納得して貰う方法は提示できません。
>関数の返り値が前と異なっているので、「なるほど揮発性だわい」と得心が行きます。
あなたが着目した,関数の「計算結果が変わる」のは,単に計算の結果に過ぎません。
たとえば「外部ブックを参照している数式」は,外部ブックの参照元データに応じて「ブックを開く都度,計算結果が変わります」が,別にだからといってこれが「揮発性だ」という事にはなりません。
「揮発関数か否か」は,当該の関数が「再計算の必要があってもなくてもいつも再計算される」か,「必要なときだけ再計算され,必要ないときは黙って以前の計算結果を保持している」かという,エクセルの内部事情(設計)の問題です。
ある関数がいま再計算されたのかされなかったかは,ワークシートを眺めているだけでは確認する手段はありません。マクロを使えばある程度可能ですが。
ただし,機能を考えて見ればINDIRECTやOFFSET関数が「揮発性である必然性」は,ある程度理解することはできます。
たとえば,不揮発性関数の例として
=INDEX(B:B,3)
について見てみると,この関数は関数が引数として受け取っている「B:B」のセル範囲に「変化が起きた」(B列のセルに記入・削除された,B列のセルにある数式に再計算が走った)ときに,それらをトリガーとして再計算されます。
B列に変化が無く,代わりに隣のC列で何かしても,この関数は再計算されません。自分の再計算チェーン(参照元)に連ならないセルが変化しても,何もする必要が無いので,何もしないということです。
一方揮発性関数である
A1セルにC2と記入しておいて =INDIRECT(A1)
とか
=OFFSET(A1,2,2)
は機能として,この式ではC2セルやC3セルの値を(再計算して)返す事が求められています。
しかし,これらの関数が調べて値を返すべきセルC2やC3は,引数として受け取っているセルとは全く無関係なセルです。(あるいはINDIRECT("C4")のように書かれたら,そもそもセルを引数で受け取っていません)
従ってこれらの関数は,通常の再計算チェーンによる再計算ルール(不揮発関数の再計算のシクミ)から離れ,とにかくブックの中で「再計算すべきトリガ」が発生したら念のため必ず再計算され,いつでも最新のC2やC3の値を表示します。これが「揮発性である」ということです。
No.4
- 回答日時:
新規ブックのシート見出しをクリックして コードの表示
Private Sub Worksheet_Calculate()
Cells(1, 10) = Cells(1, 10) + 1
End Sub
で 通常の計算が実行されると J1セルが+1される
揮発性は 一気に増える([F9]で再計算もしてみるとよいでしょう)
上記の場合はJ1セルは計算対象にしないような数式にしてください
VBAにあまり精通していないので、正解かどうかは判断できかねますm(_ _)m
No.2
- 回答日時:
Googleで「エクセル関数 揮発性」で照会。
沢山きじがあって、拾い読みすればおおよそのことは判るだろう。難しいことを聞いている割には質問の前に、WEB照会をしたのかな。
http://q.hatena.ne.jp/1137503207
http://www.relief.jp/itnote/archives/001519.php
http://www.civil-design.net/free/data/excel/func …
など。
上記3番目で>INDEX, AREAS, COLUMNS, ROWS関数について、訂正している。
ー
#1で回答されているように、テストとして、新しい白紙のブックに、その関数1種けを、1箇所(セル)だけ利用し、名前をつけて保存し、改めてそのブックを開き、何もせず(セル選択さえしてはダメ)、保存すると、「変更しますか」が出るか出ないいかで、確認できるでしょう。
(またVBAでユーザー定義関数など入れていないようにしないと(Volatileなど入れているとテストにならないおそれあり)
ーー
過去にここの質問に答えているレベルでは、TODAY、NOW、RAND(BETWEEN)ぐらいは、考えておく必要があるが、その他は、自動再計算しても、差し障るような場面は考えにくい(むしろありがたい)。神経質になる必要は無いのではと思う。揮発性の概念は、一般の他言語を含めて関数一般の考察のもので、エクセル関数には、それを当てはめたに過ぎないのではと想像する。
>変更してないのに保存確認メッセージが表示される」、などの解明・説明に役立つぐらいでは。
No.1
- 回答日時:
INDEX関数は揮発性関数ではありません。
>どのようにして当該関数が“揮発性”であることを納得できますか?
簡易な検査方法としては,
実施例:
新しいブックを用意する
A1セルに
=TODAY()
のように揮発性関数(若しくは調べたい関数)を記入する
ブックを保存し,閉じる
改めてブックを開き,何もせずただ閉じる
その際に「保存しますか」を聞いてくれば,それは揮発性関数です。
この回答への補足
》 改めてブックを開き,何もせずただ閉じる
》 その際に「保存しますか」を聞いてくれば,それは揮発性関数です。
その方法は承知していました。
=NOW() や =RAND() もそうですが、これらは「改めてブックを開」いたときには当該関数の返り値が前と異なっているので、「なるほど揮発性だわい」と得心が行きます。
しかし、OFFSET関数の場合は、「改めてブックを開」いても変化が見えないので「何処が揮発性なの?」と思うのです。
「MSが(説明や警告メッセージ等で)そう言っているから」でなく、「なるほど揮発性じゃわい」と“実感”できる方法をお尋ねした次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelでなぜこのような式をつかっているのでしょうか、行に1,2,3と連番を振るだけなのに 5 2023/04/08 20:00
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- Excel(エクセル) Excel 、この式はどのように解釈すればいいのでしょうか 4 2023/02/03 08:53
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- 発達障害・ダウン症・自閉症 発達障害の人はIT関係で才能を発揮するみたいなニュースをよく聞きますが、本当ですか?ASDやADHD 7 2022/09/20 13:33
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) AVERAGE関数とINDIRECT関数を使ってのオートフィル 3 2023/01/12 12:00
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヘッダー
-
IF関数で、時間を条件にしたい...
-
数式の計算結果により表示され...
-
エクセルの使い方 1日=7時間45...
-
エクセルで 足し算や割り算の...
-
エクセルで時間の差の出し方は?
-
エクセル・計算式をテキストデ...
-
Excel 関数? 文字列に...
-
エクセルでの時間計算(2時間30...
-
エクセルで、時間の計算をした...
-
TEXTCALCの使い方
-
エクセル 1万時間を越える際の...
-
エクセル 月数を0.5ヶ月単位で...
-
エクセルで比率を計算
-
計算結果が「0」のセルだけを「...
-
Excel2019 時間入力の際に「:...
-
Excelの計算式内の文字列の一括...
-
エクセルで時間帯を 深夜、日中...
-
エクセルで平均を出したいので...
-
エクセルでDeleteキーを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヘッダー
-
エクセルの使い方 1日=7時間45...
-
IF関数で、時間を条件にしたい...
-
EXCELの関数に関する質問です
-
エクセルで 足し算や割り算の...
-
エクセルで、時間の計算をした...
-
計算結果が「0」のセルだけを「...
-
TEXTCALCの使い方
-
エクセルでの時間計算(2時間30...
-
エクセル・計算式をテキストデ...
-
数式の計算結果により表示され...
-
Excelの計算式内の文字列の一括...
-
エクセルの計算結果が0になって...
-
多項式の計算
-
AかBに入力があった時Cに反映、...
-
エクセル 1万時間を越える際の...
-
Excel 関数? 文字列に...
-
エクセル 月数を0.5ヶ月単位で...
-
エクセルで足し算と掛算を混ぜ...
-
エクセルで数値を50単位で切...
おすすめ情報