2018年12月22日土曜日

MATCH? INDEX? Excel難しい(´・ω・`)


こんにちは、ふじかーです。

またExcelネタなんですが・・・だれか詳しい方教えてください。


自分もExcelを業務で日常的に使っており、
先日の記事に書いたような便利カスタマイズもして、

セル内の関数は調べればまぁ大体なんとかなるし、関数で出来ないことはVBAでまぁ大体なんとかなるし
ある程度Excelくわしい方だと、自分では思っていました。

周りで「あれ、これどうやるんだっけ?」みたいな声があると
「え、なになに?」と聞きにいって解決してあげる側だと、自分では思っていました。

あの日までは。


問題発生


ある日、集計表をつくる際に
「列内で、値が入り始めたセルの 行番号 が知りたい」
というケースがありました。




ふむ。まぁパッとは思いつかないのですが

だいたい同じような問題を抱えた先人たちが
Yahoo知恵袋あたりで質問・解決しているもんです。

お知恵を拝借して今後の糧とすべく、
ググってみるとこれも全く同じのがありました。

エクセルで各列における最初の空白以外の最初のセルの行番号を取得する方法 ...


そこで出てきたベストアンサー

◆これでいかがでしょう
 =MATCH(0,INDEX(0/(B2:B12<>""),),0)


おーすばらしい。試してみると確かに意図通り値が取れました。
さすがベストアンサー、私も いいね しときました。



が・・この式、何しているのか解ります?

 =MATCH(0,INDEX(0/(B2:B12<>""),),0)

私にはピンときませんでした。
気にせず使えば問題も解決しますが、今後の糧になりません(´・ω・`)


分解

良く判らないときは、バラして考えるもんです。
とりあえず MATCH関数 と INDEX関数 が使われていますね。
どっちも普段つかいません。それぞれの意味を確認しましょう。

  • MATCH関数
指定範囲の中から、指定された検索値と一致するセルの 位置
取得する関数だそうです。

書式
MATCH(検索値, 検索範囲, 照合の型:0=完全一致 )




ではベストアンサーのMATCH部分を見てみましょう。
 =MATCH(0, INDEX(0/(B2:B12<>""),), 0)
の赤字部分。

「INDEX関数の結果」が 検索範囲となって、
その内から「0」の位置を探しているようです。ふむふむ。


  • INDEX関数
指定範囲の中から、指定された行にある セルの参照
取得する関数だそうです。

書式
INDEX( 対象範囲 ,  行番号 ,  列番号 )

・行番号:必須。対象範囲が 1行 のときのみ省略可。0 指定すると行全体を取得。
・列番号:必須。対象範囲が 1列 のときのみ省略可。0 指定すると行全体を取得。





ではベストアンサーのINDEX部分を見てみましょう。
 =MATCH(0, INDEX(0/(B2:B12<>""),), 0)
の赤字部分。。。

書式と並べてみると
   INDEX( 対象範囲           , 行番号 )
   INDEX( 0/(B2:B12<>"") ,           )

あぁ、なるほどわからん。

・0/(B2:B12<>"") って何? これが対象範囲?
・行番号、指定されてませんけど?
・この INDEX関数 の結果が、MATCH関数に指定する「検索範囲」??

多分、B列が「""かどうか」を true=1 or false=0 でみて
0かErrかの配列としてMATCH式に突っ込んでるのかなーと思うんですが

ググってすぐ出てくるようなExcel入門ページには
こんなINDEX関数の使い方載ってませんし、思いつきません。

うーん、奥深すぎ・・・orz

0 件のコメント:

コメントを投稿