[[20181009085815]] 『式の意味が分からないので教えてください。』(はち) ページの最後に飛ぶ

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

 

『式の意味が分からないので教えてください。』(はち)

ネット上で見つけたのですが数式の意味が理解できません。
すみませんがどなたか解説していただけないでしょうか。
=MATCH(0,INDEX(0/(A1:A10<>""),),0)

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1451826439

< 使用 Excel:Excel2010、使用 OS:Windows7 >


他所のコードは、その掲示板で尋ねるのがマナーですよ。(その回答者や掲示板を信用していない、と受け取られます) または、理解するまで式を分解して試行錯誤して理解するか、です。 とはいえ、古いQAですし、尋ねても答えが返るか判らないので、解説しておきます。

まず、空いた列に「=A1<>""」という式を書いて、10行分コピーしてみてください。 「A1が空欄以外か?」という意味なので、空欄ならFALSE、空欄以外はTRUEになりますよね。 VBAのTRUEは-1、FALSEは0なので、更に「=0/(A1<>"")」という式にすると、空欄なら0割エラーになり、空欄以外ならば「0/-1」という事なので、0になります。 空欄以外を全て同じ0という値にしている訳ですね。

そして、A1:A10と、10個の値を対象として式を書いているので、答えは10個の配列になります。空いた列に「=INDEX(0/(A$1:A$10<>""),ROW())」という式を書いて、これも10行分コピーしてみてください。

最後に、この答えの配列からMATCH関数で0を探し、見つけた位置を返しています。 結果として、空欄以外の最初の行が得られる、という事ですね。
(???) 2018/10/09(火) 10:52


 VBAではTRUEが-1でFALSEが0だがワークシート上ではTRUEが1でFALSEが0となる。
 (計算結果は同じだが)
(ねむねむ) 2018/10/09(火) 10:58

 数値の場合、最初の値は何行目か、ということですね。
 ~~~~~~~~~~
 文字列なら ↓ でできます。
 =MATCH("?*",A1:A10,0)

 数値なら ↓ でも同じ結果になると思います。

 =MATCH(1,INDEX((A1:A10<>"")*1,0),0)
 =MATCH(TRUE,INDEX(A1:A10<>"",0),0)
 =MATCH("?*",INDEX(A1:A10&"",0),0)

 以上、参考まで
(笑) 2018/10/09(火) 11:02

ご丁寧な解説ありがとうございます。
また、マナー違反失礼いたしました。(以後気を付けます)
だんだんわかってきました。

INDEX関数の部分なのですが、
INDEX(0/(A1:A10<>""),)
となっていますが、最後の「,」は何を示しているのですか?
(はち) 2018/10/09(火) 11:18


そうか、数式でしたね。 幾つだったっけ?、と、VBA上で確認してしまいました。 ねむねむさんありがとうございます。

「INDEX(0/(A1:A10<>""),)」の最後のカンマは、第2引数が必須だから付けた、というだけでしょうね。式の答えもまだ配列として使っているので、行番号の特定は不要。 だけど省略してはいけないのでカンマだけ付けたのでしょう。
(???) 2018/10/09(火) 11:23


 >最後の「,」は何を示しているのですか?

 INDEX関数の行番号を「0」にすると配列が返ります。

 =MATCH(0,INDEX(0/(A1:A10<>""),0),0)
                               ↑                           
 この「0」を省略したということ

 だったら、MATCH関数の「0」も省略して
 =MATCH(0,INDEX(0/(A1:A10<>""),),)
 とすれば統一がとれるのに、なぜかそうはしないところが不思議です。

 以上
(笑) 2018/10/09(火) 11:36

ご回答ありがとうございます。

なるほど。
第2引数が省略不可であるために「,」のみ書いている、ということなんですね。
仮にA1:A10の範囲の中でA2とA4のみデータがある場合、

INDEX(0/(A1:A10<>""),)の値は配列で
{#DIV/0!,0,#DIV/0!,0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!}
となり、
MATCH関数で「0」を完全一致で検索すると最初に見つかった
インデックス値の「2」が返るということなんですね。

ワークシートの数式の配列のインデックス値は0からではなく1からなんですね。

(はち) 2018/10/09(火) 12:44


コメント返信:

[ 一覧(最新更新順) ]


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