• ベストアンサー

配列数式の答を計算式入力セルに出す方法は?

 FREQUENCYなど配列数式の答は、式入力セルを選択した状態でF2を押した後F9を押すと数式バーに表示されますが、他の計算式のように式を入力したセルに直接答を出す方法はないのでしょうか。  答もまた配列で返され、場合によっては無数に続くからでしょうか、それとも私のやり方が間違っているのでしょうか、式入力セルには必ず「0」が返されてしまいます。  ご存知の方お教えください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 私用で、返事が遅くなりすみませんでした。 時々、同じような話にぶつかるのですが、方法論を問い始めると、求める解が出ないまま、いつまで経っても、同じような解の出てこない思考の無限ループに陥ってしまいます。そういう場合は、スッパリと、同じ思考法はやめたほうが、無駄が少ないように思います。 この関数は、特殊な関数のひとつで、そういう仕様に決めた人間の問題かもしれません。そういう関数は、いくつかあります。MS社とは書きましたが、実際は、MS社オリジナルとそうでない関数が入り混じっています。例えば、CELL関数やINFO関数、またDATEDIF関数は、MS社の関数のスタイルには馴染みません。SMALL/LARGE関数とRANK関数の仕様の整合性が悪いのも、何かの問題が潜んでいるようです。 私が、申している「MS社の仕様の否定」とは、こういう背景を意味しています。だから、究極的には、問題があれば、自分で作っていくしかない、そういう考えは、私自身のものです。そういう方法があるということで、反意語ではありません。 本題に入ります。 > 次に試したのはB2~C6に下記のように入力し、D2の式を >{=FREQUENCY($A$2:$A$8,$B2:$C2)} >と区分配列を変更し、行相対にして下方にコピーしてみましたがこれもやっぱり失敗でした。 なぜ、失敗したかというと、これは、FREQUENCY関数の解が、配列だからです。 たぶん、この問題は、配列のこと自体をご存知ないからなんだと思います。 配列数式で返るデータというのは、メモリ空間に、ワークシートと同じ構造を持ったデータのマトリックス(格子状)のデータ群なのです。 このFREQUENCY関数の戻り値は「配列を返す」、つまり、メモリ上に縦に、複数の戻り値を持ったデータの塊なのです。なぜ、範囲を選択して、Ctrl+Shift →Enter とするかというと、そのメモリ上の縦のデータの塊を、その場所に貼り付けるということであって、ひとつひとつの戻り値を出すわけではありません。 簡単な例を示します。 例えば、A1 ~A10 にデータを入れ、 D2に (わざとずらしました) =$A$1:$A$10 としても、 セルの行と同じひとつしかでません。フィルダウンで下にコピーしても、同じ行の値しか出てきません。 そこで、D2に、=A1:A10 の式を入れた後に、D2~D11 までの範囲を選択し、Ctrl+Shift → Enter としてみると、不思議と、A1:A10までが出てきます。配列で、A1:A10 を表示するためには、それと同じ構造(縦=高さ10セル分)の範囲が必要になります。これは、数式が配列式で、配列を返したことになります。 これが、一般式と配列式との違いです。 FREQUENCY関数の場合、 {=FREQUENCY($A$2:$A$8,$B$2:$B$6)}                ↑注意                これは範囲が増えて、$B$7 になります。 ですから、一般的な回答としては、 B9 に出すのでしたら、  =FREQUENCY(A2:A8,B2:B7) に式を入れ、B14まで範囲を選択して、Ctrl+ Shift → Enter とします。 >この答え「={0;1;2;3;1;0}」を、F2→F9を押さなくても最初からB9に出す方法はないか、というのが質問の趣旨です。 ここが私には、良くわかっていないのですが、これは、ユーザーサービスで単に見えているだけであって、ある意味別世界(=メモリ空間上)にあるデータ群です。データ構造が違います。そのままでは取り出せません。これを取り出すのは、ワークシート上では用意されませんが、VBAで作ることは出来ます。 もし、そのまま、配列確定をしないで出すのであったら、以下のような式が必要です。(ただし、これは裏技です) B9:~ (エラーが出るまでフィルダウンでコピーします。) =INDEX(FREQUENCY($A$2:$A$8,$B$2:$B$7),ROW(A1),1) .

doubt34
質問者

お礼

懇切丁寧かつ含蓄に富んだ詳細なご回答誠にありがとうございました。 >この問題は、配列のこと自体をご存知ないからなんだと思います。 全くそのとおりです。そもそも私のパソコンのレベルは基礎知識ゼロのまま、実務上の必要に迫られて、何とか日常の作業には事欠かない程度までスキルだけを積み上げてきただけのもので、配列式の構造など私の理解能力の限界を遙かに超えている事柄でした。 しかしご教示のおかげで、全体像や核心はともかく、漠然とその片鱗には触れることが出来たような気がしております。 最後にとっておきの裏技、なぜそうなるのか、式の構造や組立は今のところ分からないながらも、なーんだ、やっぱり方法があるじゃないかと正に驚嘆を通り越して一瞬虚脱感すら覚えるほどでした。 このような秘伝虎の巻をタダで伝授いただき、ほんとにいいんですか?といいたいような感謝の念で一杯です。 それにしてもこのたびのQ&Aは正に序の口と横綱ほどのレベル差を痛感させられる数日でした。今後またご指導を仰ぐことがあるかも知れませんがよろしくお願いします。 最後にご指導を心から感謝申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >お尋ねしたのは例えばSUM関数や単純な加減乗除の答のように、数式バーじゃなく計算式を入力したセルに直接答が表示出来ないかという意味だったんですが おっしゃっていることが、良く理解できませんが、MS社が、ある関数に関して、ある設計の元に作られたものの仕様を否定することは出来ません。それが使いにくいのなら、一般関数で代用すればよいだけだと思います。 >答の文字列が無数に並ぶ可能性がある配列数式 どんなにデータ個数は多くても、配列数式は、区間に対して、ひとつ足すだけですし、また、基本的には、数字のデータのみです。 >式入力セルにはやはり「0」しか出ないのです もし、0と出るなら、その区間に数字がないのでしょう。 具体例がないので、こちらか出しますが、例えば、以下のように試してみればよいでしょう。ただし、区間を最後に、ひとつ付け足す必要があります。 C1:~ =SUMPRODUCT(($A$1:$A$30>=B1)*($A$1:$A$30<B2)) ただし、区間が、1~10 までなら、最後に、11 を足します。 A     B   C  15   1   式   5   2   1   3  20   4  14   5  15   6   4   7  20   8  15   9  11   10  16   11 ←付け足す。  ・  ・  ・

doubt34
質問者

補足

 再度のご回答、ありがとうございます。  やはり私の説明というか表現が素人っぽかったんでしょうね。すれ違いの理由がおぼろげながら分かりました。  例示いただいた、SUMPRODUKT関数の場合の答と、(例えばつきでしたけど)私が最初取り上げたFREQUENCY関数の場合の答とでは、前者は答の数値が1個だけなのに対し、後者の場合は{}の中に区間配列中の数値の個数分だけ並ぶので、式が入力されたセルの列幅の関係等でそもそも表示できないようになっているのか、あるいは何らかの方法を加えれば出来るのか、それだけを知りたかたのであって、別にMS社の仕様を否定しようなんて爪の垢ほども思っておりません。 もしできないのなら、一言そう仰って頂ければ氷解するんです。  具体例をあげて説明させていただきます。    A     B     C     D 1  得点 成績区分(以下)該当数  該当データ 2  25    20       0 2  60    40       2   25,33 3  52    60       3   52,58,60 4  58    80       1   69 5  33    100       1   94 6  94 7  69          8         9       0         ↑             CD列は手入力した答の人数と該当者の点数  これはあるグループの得点配分(20点以下は何人かなど)を調べるための表です。  セルB9に次の式を入れます。(なぜC2でなくB9かは後で説明します。) {=FREQUENCY($A$2:$A$8,$B$2:$B$6)}  するとB9にはA列の点数中、B2(20)を下回る人数「0」が返されます。  しかし求めたい答は、F2→F9と押して数式バーに現れる「={0;2;2;2;1;0}」です。この答は同時にB9に(=を除いて)反転表示で現れます。  この答え「={0;1;2;3;1;0}」を、F2→F9を押さなくても最初からB9に出す方法はないか、というのが質問の趣旨です。  最初の希望は、C2に前記の計算式を入力するとB2に対応する答「0」が返ってくるので、C2の計算式をC3以下にコピーすることにより、C3~C6に「2,3,1,1」と答が現れる方法(Wendy02さんが例題のSUMPRODUCT関数で示されたような方法)がないかいろいろチエを絞ったのですが、どうしてもその方法が見付からず、仕方がないからどこでもよい適当なセルに直接「={0;2;2;2;1;0}」が現れればよいと考えた訳です。    絞ったチエというのは、計算式 {=FREQUENCY($A$2:$A$8,$B$2:$B$6)} の「$B$2」を行相対の「$B2」にし、下方にコピーしたらと考えやってみましたがもちろん失敗でした。(C2以下、「0,2,5,6,7」となる)  次に試したのはB2~C6に下記のように入力し、D2の式を {=FREQUENCY($A$2:$A$8,$B2:$C2)} と区分配列を変更し、行相対にして下方にコピーしてみましたがこれもやっぱり失敗でした。   A   B     C     D        E 1 得点 成績区分(以下) セルに出た数 F2F9押した答                     2  25  0.00    20    0        0,0,7 3  60  20.01   40    0        0,2,5 4  52  40.01   60    4        2,3,2 5  58  60.01   80    10        5,1,1 6  33  80.01   100   13        6,1,0 7  94 8  69  と、こんな調子で何度も試行錯誤を繰り返し、結局お手上げとなって最初のような質問になったというのが事の真相です。  最初からこのように詳細に経緯を説明すれば私の言いたい内容をご理解いただけたのではないかと思いますが、要はC2~C6にB列の区分配列に応じた答(0,2,3,1,1)が返ってくる方法はないかということなんです。  多分私の考えには何か幼稚というか根本的な発想のミスがあるのでしょう。  であるとすればこういう場合、B列の区分配列をどのように入力するのか、そして計算式はどこにどのように設定するのか、そこのところを教えていただければ幸いです。  よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 FREQUENCY(データ配列,区間配列) データがあって、区間配列を別に入力したら、 式の引数に、データ配列と区間配列の範囲を入れ、一旦、その先頭に式を入れ、その区間配列より1つ分範囲を多くして、セル範囲を決めます。(縦のみです) そして、Ctrl+Shift + Enter で、配列確定すれば、式がコピーされて、その全てが出てきます。外すときは、配列数式の範囲を選択して、Ctrl+ Enterで外れます。

doubt34
質問者

お礼

 ご回答ありがとうございました。  私の質問内容が不十分だったのでしょうか。お尋ねしたのは例えばSUM関数や単純な加減乗除の答のように、数式バーじゃなく計算式を入力したセルに直接答が表示出来ないかという意味だったんですが………  仰るように試させていただきましたところ、確かに区間配列が縦の場合は(F2やF9を押さなくても)直接数式バーに答が現れるので大変便利ではありますが、式入力セルにはやはり「0」しか出ないのです。ご回答内容を何度も読み直していろいろと試してみましたが結果は同じで、やり方のどこが間違っているのかどうしても分かりません。  単純乗算、例えば1000×1000の場合でも、式入力セルの幅が狭いと「1E+06」のような答が出るので、答の文字列が無数に並ぶ可能性がある配列数式ではセル表示が無理なので数式バーにしか出ないようにしてあるのでしょうか。  ともあれ仮にそうだとしてもF2やF9を押さなくて答が見れるという点では希望の半分以上は達成されましたので、ご教示厚くお礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel2000で数式を配列にしてセルに放り込むと計算されない

    一定の法則で作成されて数式をセルに放り込む場合、 (1)のようにループさせると非常に時間がかかりま した。(実際の数式セルはもっとたくさんあります。) それで数式を一度、(2)のように配列に入れて放り 込んだところ約1/10の時間で処理はすみました。 ただ、放り込まれた数式が計算されずに式のまま表 示されてしまいます。 セルをダブルクリックして、その後、リターンを押すと計算され ます。 これを自動的に計算させることはできないのでしょうか? (1)    For i = 1 To 3      For j = 1 To 10        Cells(i, j).Formula = "数式"      Next j    Next i (2)    myFomula(3, 10) = "数式" '← この中に数式を入れる。    Range(Cells(1, 1), Cells(3, 10)).Formula = myFomula

  • セルに入力した数式が数式バーに表示されない

    Windows8.1でエクセルを使用し表計算をしています。今までセルに入力した内容が数式バーに表示されていましたが表示されなくなりました。「表示」の「数式バー」にはレ点が入って《エクセルの基本オプションー詳細設定ー表示にもレ点あり》います。しかし数式バーに表示されないのですがこの解決策を教えてください。

  • 一つのセルに数値入力し計算し答えも同じセルに表示

    一つのセルに数値入力し計算し答えも同じセルに表示 例)A1セルに100と入力したら同じA1せるの答えが98になる計算、入力値を変えても答えが-2 された答えを同じセルに表示。

  • Excelのセルが計算結果ではなく数式になってしまいます。

    Excelでワークシートを作って計算させているのですが、突然、数式を入力しているセルが、その計算結果ではなく、数式そのものが表示されてしまうのです。 例:セルを参照しようとして、「=H5」と入力すると、本当なら、H5のセルにある数字、文字が表示されるわけですよね。しかし、突然そのセルが「=H5」という計算式そのものの表示になってしまいました。 F2を押して、Enterするとまた参照してきたりするのですが、原因が分かりません。ずっと=H5のままということもあります。 原因と対処方法を教えてください。よろしくお願いします。

  • エクセルで一つのセルに数式を二つ以上入力する方法はありますか?

    エクセルで一つのセルに数式を二つ以上入力する方法はありますか? 昨晩から プルダウンメニューで ある文字列を選び、その文字列により、違った計算をさせて、その答えをセルに表示させようとしていますが、全く上手くいきません・・・。 Sheet1の任意のセルに ABC, DEF, GHI, JKL と言う文字列を作り、プルダウンメニューで選べる様にしました。 そして、選んだ文字列により、下記の通り 切捨ての簡単な計算をさせて、その答えを Sheet2 の任意のセルに表示させたいと思ってます。 Sheet2の任意のセルにこの様な数式を教えて頂きまして入力しましたが、上手く行きませんでした。 =IF(F3="ABC", ROUNDDOWN(H3,2)*0.976),"DEF",ROUNDDOWN(H3,2)*0.976),"GHI", ROUNDDOWN(H3,2)*0.975), "JKL", ROUNDDOWN(H3,2)*0.978) 何かと試行錯誤してますが、全く分りません・・・(>_<)。 どなたか助けて下さい(/_;)

  • EXEL:入力中のセルの数式を非表示(あるいは表示位置を変える)には

    EXELで、数式を入力中に、数式が長くなってくると隣接しているセルが数式で隠れてしまい、そのセルを選択できなくなってしまうので、入力中の数式を数式バーでのみ表示したい(入力中のセルには表示しない、あるいは表示される位置をそのセルの右側、左側、など邪魔にならない位置に変更したい)のですが、可能でしょうか? ちなみに例えばですが(文章で書くと伝わりにくいと思うのですが、、) セルC3内に「=A3+B3+D3」という数式をA3、B3、D3というセルを選択して数式に入れていく場合、D3を選択しようとすると、それまでの数式「=A3+B3+」にD3が隠れてしまい、選択できない、という状況になります。 数式を直接入力すれば問題ない話ではあるんですが・・・ けっこうまわりでも困っている人が多かったので。 いい方法があれば教えてください。

  • エクセルの配列数式、配列定数について教えてください

    エクセルに配列数式、配列定数というものがあることを最近知りました。 エクセルのA1セルに={1,3,3}と入力し、A2セルに=COUNTIF(A1,{1,2,3})と入力すると、 A2セルに1と表示されます。A2には1以外の数字が含まれることは何となく理解できるのですが、どのような計算結果が算出されるのかが理解できません。また、A2の1以外の計算結果を表示させる方法がわかりません。 同様に、A1セルに={1,2,2,3}と入力し、A2セルに=COUNTIF(A1,{1,2,3})と入力した場合(これもA2セルに1と表示されます)のA2の計算結果と表示方法がわかりません。 ご教示をよろしくお願いいたします。

  • Excelセル内に数式が入らない

    sheet1のB2に数式バーの内容で入力したのですが入りませんシートFまでの数式は入力できるのですが(B1セル数式)実はシートOまでの同数式を入力したいのですが数式が多すぎて入力できないエラーの場合はどうすればよいのか皆目解りませんどなたか解る方宜しくお願いします。 VBAコード入力でも結構です。

  • Excel - 数式で引っ張った数式を有効にする方法

    お世話になります。 ちょっと説明が難しいのですが・・・ 数式で引っ張ってきた数式を、値として貼り付けると、最初に【=】が付いていても即座に数式として認識してくれません。 まぁ値で貼り付けてあるので当然と言えば当然なんですが。 これらはF2で数式バーに一旦移行し、その後ENTERで確定すると、その時点で初めて数式として認識します。 このようなセルを一括で、数式にする方法はないでしょうか。ひとつずつF2→ENTER→F2→ENTERとやっていくのは非常に面倒でして。 再計算、置換等、色々試してみましたが、どうも効果がないようです。 何かお知恵のある方、どうぞご協力宜しくお願いします。 【例】 A1に【=】 A2に【C3】 C3に【10】と入っているとします。 任意のセルに【=CONCATENATE($A$1,$A$2)】と入力しますと、そのセルには【=C3】と表示されます。 このセルをコピーし、別のセルに値貼り付けします。 するとコピー先のセルには【=C3】と表示されます。 本来は【10】と表示させたいので、F2で一旦編集に入り、ENTERで確定すると、ここで初めて【=C3】が【10】に変わります。 これを一括でやる方法、ということです。

  • 数式の計算結果により表示されたセルを数える関数を教えてください

    Excel2003です。 「=COUNTA(範囲)」で文字や数値、式などのデータが入力されているセルを数えることができますが 数式の計算結果により表示された文字や数値の入ったセル(数式の計算結果で空白のセルを数えない)を数える関数を教えてください  

専門家に質問してみよう