[[20120519093644]] 『式の意味を教えていただけませんでしょうか?』(ばなな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『式の意味を教えていただけませんでしょうか?』(ばなな)
[4月16日「やな」さんの質問(関数で範囲選択)に春日野馨さんからの解答を勉強させてもらっているのですが。
A列にランダムにある数字の空白行までの合計関数を教えてくださいとの問いに
   A
     1 関数
  2 6
  3 4
  4 7
  5 2
  6 3
  7
  8 2
  9 6

 

解答の式:SUM(OFFSET(A2,,,(1,INDEX((A2:A1000="")*1,0),0)))とあるのですが 
INDEX の式 INDEX(A2:A1000="")*1,0) のところ(範囲?)がどうしてもわかりません式の意味を教えていただけませんでしょうか?  ](ばなな)


[[20120416134159]] 『関数で範囲選択』(やな)

式は正確には、
=SUM(OFFSET(A2,,,MATCH(1,INDEX((A2:A1000="")*1,0),0)))

MATCH関数の検索範囲としてINDEX((A2:A1000="")*1,0)が与えられています。
1000行もあると検証しにくいので、範囲をA6ぐらいにしてみます。

=SUM(OFFSET(A2,,,MATCH(1,INDEX((A2:A6="")*1,0),0)))

INDEX関数は通常検索関数で、配列から特定の値を返しますが、
使い方によっては配列を計算結果として返すことも出来ます。
今回の使い方がそのようになっています。

A2:A6=""は {FALSE;FALSE;TRUE;FALSE;FALSE} のような論理値の配列を返します。
(A2:A6="")*1とすると、{0;0;1;0;0} とTRUEは1に、FALSEは0に変換された配列になります。

INDEX関数はこのような配列から「何列目の何行目の値を取り出しなさい」ということを
するのが普通ですが、「0行目を取り出しなさい」と指定してありますね?
すると、INDEX関数の返り値は「配列」になります。
[INDEX関数のヘルプより]
行番号または列番号を 0 に設定すると、それぞれ列全体または行全体の値の配列が返されます。

その結果が、{0;0;1;0;0} という配列だとすると、
MATCH(1,INDEX((A2:A6="")*1,0),0) の部分は
MATCH(1,{0;0;1;0;0},0) という式と同じになります。

{0;0;1;0;0}という配列から、1を完全一致で検索してその位置を求めなさい、という意味です。
 
(みやほりん)


(みやほりん)様
早速ご返事ありがとうございました。INDEX関数が配列から計算結果として使用するなんて夢にも想像できませんでした、式を動かしているとFALSEやTRUEなどとでるので入力ミスかと思ったこともあります。
私の頭ではすぐに理解できませんが、ご返事をいただいて理解できるメドがつきました。本当にありがとうございます。数日間考えつづけてギブアップ。おすがりした次第です、ありがとうございました。
                                  (ばなな)  拝

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.