[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『式の意味が分からないので教えてください。』(はち)
ネット上で見つけたのですが数式の意味が理解できません。
すみませんがどなたか解説していただけないでしょうか。
=MATCH(0,INDEX(0/(A1:A10<>""),),0)
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1451826439
< 使用 Excel:Excel2010、使用 OS:Windows7 >
まず、空いた列に「=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
「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.