各年ごとに 1 つのシートがあるワークブックがあり、そのシートの年内に経過したすべての月の平均を取得する必要があります。シートは年ごとに名前が付けられており、数式に という名前を付けましたMONTHS
。
=LET(year,VALUE(MID(CELL("filename"),SEARCH("]",CELL("filename"))+1,31)),IF(YEAR(TODAY())=year,MONTH(TODAY())-1,IF(year>YEAR(TODAY()),0,12)))
これを使って平均を求めます:
ほとんどの場合は動作しますが、他のセルやシートで何か操作を行うと、#計算空の配列はサポートされていないというエラー。シートを再計算すると自動的に修正されますが、毎回それを実行しなければならないのは非常に面倒です。これを防ぐ方法はありますか?
答え1
長年の APL 使用に基づく私の個人的な意見は、空の配列のサポートが不可欠であるということです。空の配列をサポートしないのは、Microsoft 側の失策です。
答え2
私にはそれがないTAKE()
ので、「これがあなたの問題です」と断言することはできません。2 つの側面について説明します。1 つは、MONTHS
名前付き範囲のスコープが WORKBOOK に設定されている可能性がありますが、各シートの特定のセルを指定できるように SHEET にスコープを設定する必要があること、もう1 つは、行パラメータを指定していることと、以下で最初に説明するように、場合によっては「0」が返されるため、列を返さずに空の配列を返すように指示されているTAKE()
ことの 2 つの潜在的な問題が原因である可能性があることです。,,
MONTHS
TAKE()
他のシートで作業して戻る状況でこの問題について言及しているという事実は、最初のカテゴリ、MONTHS
つまり のスコープに近く、CELL()
特定のセルを指定しない傾向があります。しかし、列を指定すると空の配列が生成される可能性があり、空の配列はサポートされていないと言われるという事実は、0
それが問題であることを示唆しています。ただし、その場合、問題はそれほど簡単に解決されないはずです。もちろん、「すべきではない」は「しない」と同じではありません。したがって、グレーゾーンです。
ただし、以下では簡単に確認できる 3 つの大きな点を示します。また、簡単にするために、名前付き範囲スコープの資料をテストしましたが、その通りです。(また、Excel が説明されているエラーを返さないように強制する標準的な方法もテストしましたが、問題は解決しませんでした。) ただし、それがどのように影響するかは、テストからはわかりません。ただし、これら 2 つの点を簡単にテストする方法はわかります。私の賭けは、説明されている問題TAKE()
に最も適したスコープです。したがって、最初に来るのは:MONTHS
数式には 3 つの結果が考えられます。そのうちの 1 つは です0
。
ここまでは順調です。ただし、関数ではTAKE()
、その結果を使用して、関数に送信する列の数を指定しますAVERAGE()
。
MONTHS
しかし、数式が返されるときに配列を形成する場合、その行の列を取得するように0
指示しています。columnsは空の配列を意味します。TAKE()
0
0
これを機能させるには、より複雑なアプローチが必要です。たとえば、次のようになります。
を使用しての結果IF()
をテストします。 の場合、セル O5 に $0.00 の結果を返します。 結果でない場合は、数式をそのまま使用します。MONTHS
0
0
AVERAGE()
または
計算が将来の場合は1
、 ではなく を返します。そのシートのすべての行が空であると考えられるため、ゼロ値を持つ 1 つのセルの平均を取得し、ゼロを返します。そうでない場合は、適用される同様のロジックが認識される可能性があります。0
year
直接関係はなく、現時点では問題も起こっていない別の考えとしては、あなたが書いCELL("filename")
ているようにすると、Excel が再計算するたびに、このシートだけでなくすべてのシートでその使用例をすべて再計算することになるのではないかということです。また、別のシートで作業していると、質問で説明されている問題があります。別のシートで作業しているときに、Excel が他のシートの 1 つを再計算すると、現在使用しているシートでCELL()
はなく、現在使用しているシートが結果を返します。現在使用しているシートは除きます。そのため、他のシートはすべて残念な結果になり、Excel はそれを認識し、すべてでエラーを返します。以下で述べるように、シートが行き止まりで、その結果が他のシートの先行セルではない場合 (年ごとの合計シートなど)、これはあなたにとってイライラするだけで、上司が文句を言うと恥ずかしいだけです。しかし、そうである場合、それらの先行使用にエラーが入り、エラーが返されます...
つまり、これについてですが、これは、現在のシートを編集するときではなく、基本的に別のシートで編集を行うために移動するときに問題を引き起こします。これを行うと、他のワークシート#VALUE!
で を使用するセルにエラーが表示されMONTHS
ます。各シートが自己完結的で、それ以上のシートにフィードされない限り、それほど問題ではないと言えます。シートに移動して作業を行うと、エラーの影響を見てイライラするでしょう (確かに「空の配列」の状況ですが、私はそれを持っていないのでTAKE()
正確な影響をテストすることはできません...平均を取るためのエラーの配列を返すため、エラーではなく独自のエラーAVERAGE()
が発生する可能性があります。いずれにせよ、それはあなたをイライラさせ、上司を困らせるだけですが、シートに最初に入力すると解決されます。#CALC!
#VALUE!
MONTHS
この問題は、 WORKBOOK スコープではなく SHEET スコープを作成することで解決できます。またCELL()
、その中の 2 つの関数のそれぞれにセル (任意のセル、ただしセル A1 は不可) を指定します。これを実行すると、問題は解消されます。
確かに、これは既存のシートごとに名前付き範囲を確立することを意味しますが、テンプレートがある場合、または現在のシートをコピーしてデータを削除して新しい年を追加する場合は、コピーして名前を変更するたびに、SHEET スコープの名前付き範囲が作成されます。したがって、将来的には問題になりません。その後、WORKBOOK スコープのMONTHS
名前付き範囲を削除します。
soパラメータTAKE()
が指定されておらず、列パラメータに が指定されている場合もあることが問題の原因ではない場合(私はそれほど可能性は高くないと考えていますが、MS が哲学的なアプローチ全体を変更した可能性があります。彼らはもはや で行っていたことを行わないようです)、使用法が問題である可能性が高いです。,,
rows
0
INDEX()
CELLS()
今のところ、この関数について私が見つけられるのは、彼らの宣伝文句をそのまま繰り返したか、または楽しい例、テキスト、ビデオでうまく繰り返しただけですが、実際の使用上の問題を調べている人は誰もいません。私はあなたの使用についてテストしたことを話していません。ここ数年の MS のアプローチは、古いものの,,)
INDEX()
使用を許可しないことでしたが、むしろ、行パラメータが必須であると言っている場合、彼らは古い「行または列のいずれかを指定する必要があります」という意味ではなく、列パラメータを提供するかどうかに関係なく、行パラメータを提供しなければならないという意味です。また、彼らがあなたのことを,,MONTHS)
「その行、これだけの列」という意味に解釈していることを期待することで、彼らが暗黙の交差を行っていることを期待しますが、実際にはそうではないかもしれません。実際、そして概念としても、彼らは明らかにそれから遠ざかっています。
問題は次のようになります:
MONTHS
(おそらく) WORKBOOK スコープのバージョンではなく、SHEET スコープの名前付き範囲を使用する必要があります。TAKE()
によって時々返される「0」を処理できないという問題ですMONTHS
。TAKE()
問題は、行パラメータの不在を処理できないことです。TAKE()
上記の 2 と 3 の両方に問題がある。
編集:あれだけ調べて何も役に立つものが見つからなかったので、これを投稿し、さらにもう 1 ページ検索してみました...すると、,,MONTHS)
上で何度も言及した部分を使った例が掲載されている Web サイトが見つかりましたTAKE()
。この例では、行に関する情報をすべて無視してすべての行を返すというアプローチが採用されており、これはINDEX()
would の単純なパラメータの使用法と同じです。
したがって、その側面は問題ではありません。申し訳ありませんが、基本的な回答を編集しすぎて、その部分を削除し、最終的に完全に書き直さなければなりませんでした。寝床が呼んでいる今、それは遅すぎます。しかし、その使用法は問題ではありません。彼の例は、その使用法の適切なリターンを示しているからです。それは次のとおりです。
https://www.get-digital-help.com/how-to-use-the-take-function/
パート 4. レイアウトでは、ページの約 20 ~ 25% の位置にあります。