人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルで左から始めて、最初にゼロ以上の値になるセルの位置の値を表示したいです

エクセルで左から始めて、最初にゼロ以上の値になるセルの位置を出すには、どんな関数がありますでしょうか?ご教授願えませんでしょうか

a,b,c,d,e,f ,g,h,i, j
---------------
0,0,0,1,0,0,5,2,1,0 - この場合、D1の"1"を表示させたい
0,1,2,1,3,4,1,0,0,1 - この場合、B2の"1"を表示させたい
0,0,0,0,1,2,4,5,1,2 - この場合、E3の"1"を表示させたい

急ぎでよろしくお願いいたします。

エクセル2010
です。


●質問者: megamax1010
●カテゴリ:ビジネス・経営 科学・統計資料
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● うぃんど
●67ポイント ベストアンサー

結果を格納したい列に以下の式を入れて下方向にコピー。

=INDIRECT(CHAR(SUMPRODUCT(LARGE((A1:J1>0)*COLUMN(A1:J1),COUNTIF(A1:J1,">0")))+64)&ROW())

元ネタは下記で、私がINDIRECT関数を付け加えました。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1114542331


megamax1010さんのコメント
ご回答、誠にありがとうございます。 もう少し教えていただけませんでしょうか? 記載不足で申し訳ございません。 a,b,c,d,e,f ,g,h,i, j --------------- 0,0,0,1,0,0,5,2,1,0 - この場合、D1の"1"を表示させたい ⇒この場合は、上記の関数で1番目に出てくる、"D1"の値「1」が 表示されます。 a,b,c,d,e,f ,g,h,i, j --------------- 0,0,0,1,0,0,0,0,0,0 - この場合、D1の"1"を表示させたい の場合、 「#Ref!」となってしまいます。 これを回避する方法はございませんでしょうか? 何卒、よろしくお願いいたします。

うぃんどさんのコメント
回答した式は一行目で用います。 一行目に回答したコードを書いて、二行目、三行目にコピーすると、 下記のように式の中身が変わっていきます。 >|| 二行目 =INDIRECT(CHAR(SUMPRODUCT(LARGE((A2:J2>0)*COLUMN(A2:J2),COUNTIF(A2:J2,">0")))+64)&ROW()) ||< >|| 三行目 =INDIRECT(CHAR(SUMPRODUCT(LARGE((A3:J3>0)*COLUMN(A3:J3),COUNTIF(A3:J3,">0")))+64)&ROW()) ||< 以下同様にA1:J1の部分が変化していきます。 たとえば、 一行目がタイトル行などで実際のデータが二行目から入っているということであれば、 上記「二行目」に照らしてA1:J1の部分をA2:J2にします。 十行目であるならA1:J1の部分をA10:J10という具合にします。

megamax1010さんのコメント
度々、誠にありがとうございます。上記のように出来るように、 関数つきのセルをした方向にドラックしていきます。 概ね、大丈夫なのですが、 a,b,c,d,e,f ,g,h,i, j --------------- 0,0,0,1,0,0,0,0,0,0 - この場合、D1の"1"を表示させたい の場合のように、 参照する値?が、「D1の"1"」のように、dを除くa?jがすべて「0」の 場合、 「#Ref!」となってしまいます。 度々で恐縮ですが、何卒、よろしくお願いいたします。

うぃんどさんのコメント
#Ref!は参照先不明というエラーなので、 D1 以外の何を返すかを調べたほうが良さそうです。 下記の様な具合に外側のINDIRECT関数を取り除いて、 D1 以外の何を返しているか探ってみてください。 >|| =CHAR(SUMPRODUCT(LARGE((A1:J1>0)*COLUMN(A1:J1),COUNTIF(A1:J1,">0")))+64)&ROW() ||<

megamax1010さんのコメント
度々誠にありがとうございます。 =CHAR(SUMPRODUCT(LARGE((A1:J1>0)*COLUMN(A1:J1),COUNTIF(A1:J1,">0")))+64)&ROW() で、 a,b,c,d,e,f ,g,h,i, j --------------- 0,0,0,1,0,0,0,0,0,0 を表示すると、 "]1" 「]」記号がついてしまいます..... となります。 a,b,c,d,e,f ,g,h,i, j --------------- 0,0,0,1,0,0,1,0,0,0 参照する値?が、「D1の"1"」のように、a?jがすべて「1」が二つ以上ある場合は、 "D1" と表示されます。 ご指示いただいた数式の前に「INDIRECT」をつけると、 正しい値、"1"(セルD1)が表示されます。 お忙しいところ恐縮ですが、何卒よろしくお願い申し上げます。

うぃんどさんのコメント
65がAで66がB…、Zの90まで続き、そのあと91が[、92が\、93が]…。 もう気づいているかもしれませんが、式の中の +64 は答えが1列目ならば65、 2列目ならば66という具合に数値からアルファベットを取得するためのものです。 答えが実際よりも3多い数値になってしまった原因は…、 思い浮かぶまでまだまだ時間がかかりそうです…。

うぃんどさんのコメント
一日置いてみたのですが、申し訳ない。ギブアップです。

megamax1010さんのコメント
お忙しいところ、ご検討いただき誠にありがとうございました。 機会がありましたら、今後ともよろしくお願いいたします。

2 ● mon634
●67ポイント

回答になっていないので書くのが憚られたのですが何か解決の役に立てばと書き込みをさせて頂きます。
=IF(A1=0,IF(B1=0,IF(C1=0,IF(D1=0,IF(E1=0,IF(F1=0,IF(G1=0,H1,G1),F1),E1),D1),C1),B1),A1)
例えば1列目なら表示させたいセルに上記のようにA1が0ならB1が0ならというようにIF関数を重ねて組み合わせてみてはいかがでしょうか?
上記ではH1までしかやっていませんが上手くいじくれば応用できるような気がします。


megamax1010さんのコメント
誠にありがとうございます。参考にさせていただきます。

3 ● きゃづみぃ
●66ポイント
Function GetPoint(a As Range)
 Dim c As Range
 
 For Each c In a
 If c.Row = a.Row Then
 If Cells(c.Row, c.Column) <> "" Then
 If Cells(c.Row, c.Column) > 0 Then
 GetPoint = Cells(c.Row, c.Column)
 Exit Function
 End If
 End If
 End If
 Next c
 
End Function


ユーザー関数を作ってみました。
標準モジュールに ソースを入れてください。

使い方は セルに
=GetPoint(A1:E1)
というように 入れてください。

なお Rangeで範囲指定しますが、最初の行のみチェックします。

つまり
A1:E2と入れても A1:E1と同様のチェックのみしか 行わないということです。


megamax1010さんのコメント
誠にありがとうございます。参考にさせていただきます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ