こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

【関数の解説求む】空白を無視して一番左のセルを参照

こちらに↓私の求める答えがあったのですが、
http://okwave.jp/qa/q4071300.html

どなたかこの関数の解説をお願いします!
特に後半が→(0/B1:G1,),))意味わかりません(;_;)

私は2007を使っています。
また、違う解決法もある場合教えて下さい!
よろしくお願いします。

投稿日時 - 2015-07-24 14:23:12

QNo.9017965

困ってます

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

次の数式について解説が必要と言うことですね。
=INDEX(B1:G1,MATCH(0,INDEX(0/B1:G1,),))
内側のINDEX関数の引数はエラーと0の配列をMATCH関数へ渡すためのものです。
0/nの値はnが0の場合#DIV/0!と言うエラーになり、nが文字列の場合は#VALUE!と言うエラーになりますが、nが0以外の数値の場合は0になります。
nの代わりにB1:G1と言う1行の配列を使うとINDEX関数の引数は配列値から指定の行番号で1つの値を返すことになるのですが、行番号を無指定または0にすると配列値のまま返されます。
提起の数式を括弧の内側から順次処理過程を示すと次のようになります。
=INDEX(0/{8,8,,10,5,3,2},) → {0,0,#DIV/0!,0,0,0,0}
=MATCH(0,{0,0,#DIV/0!,0,0,0,0}) → 1
=INDEX({8,8,,10,5,3,2},1) → 8
B1セルからG1セルの配列値は質問文の中にあるURLから読み取りました。
尚、未入力のセルは計算時の値は0になります。

投稿日時 - 2015-07-24 19:45:15

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(5)

ANo.5

#3です。下記の説明も参考になればと思います。
ーー
データ例
B2:G2(横1行の6セルで)にセルの値が
ーーーー 21
とする(F2のみ21が、入っていて、B2:E2はスペースとする。)
ーー
まず確認しておきたいこと。
ゼロに関連した割り算はどうなるか。
B2:G2の各セルで考えるが
どこかの空きセルで下記をテストでやってみる。
下記で、1番左が結果、2番目が式、3番目が文章解説です
0=0/210を0でない数で割ると0
#DIV/0!=0/0 0を0で割ると#DIV/0!
この2点は納得しましたか。
ーーー
だから、別のセル範囲B10:G10でおいて
B2:G2のセルの値で、0を割る(分子0。質問の式の1部の「0/」から)と、各セルの結果は
#DIV/0!#DIV/0!#DIV/0!#DIV/0!0
ーーー
0の位置(=列)に注目して探すと
結果 式
5=MATCH(0,B10:F10,0)0の位置はB2から考えて何列目かーー>5-->F列に見つかる
ーーー
そのセルの値は
結果  式
21=INDEX(B2:G2,0,5)第2行目のF列の値はINDEX関数で採れる
ーーー
21=INDEX(B2:G2,,5)
21=INDEX(B2:G2,5)
ーー
すなわち
(第2行目で)左から非空白で初出のセルの値は21。

投稿日時 - 2015-07-25 19:02:20

ANo.3

INDEX関数を他と組み合わせて、回答されている関数式」は、意味がわかりにくいものが多い。しかしまたそれが挑戦意欲をそそられて勉強する人もいるでしょう。(条件でデータ抜出しに使われるものなどもっと式が長い)
 つまるところ、どこかに誰かが、載せていた式を丸写したか、上達して改良したものでしょう。また関数式の意味を解説しない回答が多い。それでよいなら、後続の回答が出るでしょう。
鶴亀算的解法と、方程式で説く方法のような違いを感じる。
出来れば後者がよい。しかしエクセル関数信奉者が初心者を中心に多くて、下記などは関心ないかもと思うが、挙げてみる。
ーー
VBAでやると、ユーザー定義関数
Function Tomigi2(A As Range)
If A <> "" Then
Tomigi2 = A.Value
Else
Tomigi2 = A.End(xlToRight).Value
End If
End Function
のように比較的考え付きやすい。
これもVBAをやらない人にはむつかしいといえるかもしれないが。
ほかにも左列のセルから判別していって、空白でないセルを見つける方法は、初歩的な手法です。VBAでは、いろいろ解決法がある。
しかし、上記を書いたのは、なぜならばENDキーを押して矢印キーを押す(この場合は→キー)という、便利な操作が、エクセルにあるからです。
ーーー
例データ
A2:D5
(ーは空白セルの目印を示す。この回答の場合のみの便法)
452223245
---2
56-55
212-65
F2に=tomigi2(A2)
下方向に式を複写。
結果 F列
45
2
56
2
こういう方法もあるということを紹介します。
====
>空白を無視して一番左のセルを参照
の意味がよくとらえられなかった。前の参照質問を見ても。
「一番左のセルから始まる続きの塊を合計とかになると」上記は役に立つかどうか
自信ない。それで質問の意図を読み違えていたら後免。
==
もう少し、複数行・列の例でも挙げて、質問では、丁寧に説明すべきではと思う。
質問のことが実現したら、その後何をしたいのか?

投稿日時 - 2015-07-24 17:58:51

ANo.2

たとえばB1からG1に記入されたり無かったりして、その先頭のデータをA1に表示するとして。
A1にたとえば
=INDEX(B1:G1,INDEX(MATCH(TRUE(),B1:G1<>"",0),0))
と記入すると、先頭の値が表れます。

エクセル2007にもありますが、数式タブの「数式の検証」という機能を使って、計算の途中経過を確認してみます。
添付図に従って作成し、あなたも実際にご自分の手を動かして確認して下さい。
検証ボタンをクリッククリックしていくと、ステップごとに計算が進んでいく様子を見ることができます。

途中「B1:G1<>""」の部分が
{FALSE,TRUE,FALSE,TRUE,FALSE,TRUE}
という具合に計算されている様子が表示されます。このような計算を配列計算と言います。
実際のデータに当てはめてみると、C1,E1,G1は空白(””)ではないのでTRUEに、それ以外は空白なのでFALSEになっています。

内側のINDEX(…,0)は、エクセルにこの配列計算を行わせるための呪文です。これはエクセルのどの参考書にも書いてない、魔法の呪文と思ってください。



この配列({FALSE,TRUE,FALSE,TRUE,FALSE,TRUE})から、MATCH関数の0を使ってTRUEを探すと、最初に出てくるTRUEの位置、つまりB1:G1の「2番目」にTRUEがある、つまりその2番目が空白じゃない事が判ります。

あとはINDEX関数を使い、
=INDEX(B1:G1,2)
のようにしてB1から見て2番目の8が得られます。

投稿日時 - 2015-07-24 17:23:32

ANo.1

》 (0/B1:G1,),))意味わかりません
作者がどの程度親切に解説されるか興味のあるところだけど、貴方自身は“配列数式”という数式を理解できますか?(作成したことがありますか?)

投稿日時 - 2015-07-24 17:01:39

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-