[[20110215004747]] 『関数を使って2つの条件に合致する数字の位置(行』(O.K.) ページの最後に飛ぶ

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

 

『関数を使って2つの条件に合致する数字の位置(行数/1番目、2番目)を知りたい』(O.K.)

   みなさんこんにちは。

 例えば下のような表があり、2つの条件「データ1、所属A」に合致する

1番目と2番目と3番目の数字の位置(行数)を関数で表したいと考えています。

    A  B

1  データ 所属     

2  0   B

3  1   A

4  1   B

5  0   A

6  1   A

7  1   A


9 2つの条件「データ1、所属A」

10 1番目 2 (←上から2番目)

11 2番目 5 (←上から5番目)

12 3番目 6 (←上から6番目)

 ※2/5/6の部分を、B10/B11/B12の位置で関数で表示

 MATCH関数を使えば、1つの条件の場合には1番目の位置だけは表せるのですが、2番目、3番目の位置を表せません。さらにもう1つ条件を加えた場合にはMATCH関数ではエラーが出てしまいます。データは並び替えをせず位置を表したいと考えています。配列は使い方がいまいちわからないため出来れば普通の関数(出来なければ配列を使ってでも)を希望しています。

 インターネットで色々と検索しましたが、同じような使い方が見つかりませんでした。Excelの関数を使ってこのような表し方が出来るかご存知の方がいらっしゃいましたら、どうぞ宜しくお願いいたします。

※ ちなみにopenofficeを使用していますが、Excelでの関数の使い方がわかれば応用出来るかと思いますので、openoffice,Excelのどちらでもご回答頂ければ有り難いです。


 配列を使わないなら、作業列は使って良いですか?
 
C列を作業列とします。
C2
=IF(AND(A2=1,B2="A"),ROW(),"")
 
B10
=IF(COUNT($C:$C)<ROW(A1),"",SMALL($C:$C,ROW(A1)))-1
 
下へフィルコピー
 
 
配列数式なら
B10
=SMALL(IF(($A$2:$A$7=1)*($B$2:$B$7="A"),ROW($A$1:$A$6),""),ROW(A1))
Ctrl + Shift + Enter で確定
 
(すずめ)9:40 式間違ったので修正

さっそくのご教示ありがとうございます。

説明不足ですみません。実はデータは複数40ありまして、所属もAからIまで複数あります。

この為、Aに固定せず、位置を求める関数があれば、その関数をコピーすればそれぞれのデータ列の中から
条件に合致する位置を表せればと思うのですが。

作業列を使わずこの様なことは可能でしょうか?

データ1 データ2 データ3 ...

1 0 1

0 1 0

1 0 0


 >Aに固定せず、位置を求める関数があれば

 ??
 B2="A"の"A"をどこかのセルに入力しておけば、その条件でいけますけど。
 (例:A100に条件「A」を入れておけるならば、B2=A100とする)
 実際のセル範囲がわかりませんので、これ以上具体的にかけません。

 あと列が40で、行はいくつあるのでしょう?
 あまりたくさんあると配列数式では重いですよ。
 
(すずめ)

すずめさま、またまたコメントありがとうございます。

正確には列は43で、行は150位を想定しています。いわゆる宝くじの過去データの分析を行いたくて、横は該当する1〜43の数字、縦は抽選回次としており、所属はA~Iがあります。例えば1と5が当選している場合は、1列と5列のデータは『1』となり、それ以外の列のデータは『0』になります。

表現しづらいのですが、イメージとしては下記のようになります。所属がAの場合の他に、所属がBやその他の場合でもコピー&ペーストするだけで位置が掴めるような関数があれば幸いです。よろしくお願いします。

  A   B  C  D ...

1  @  A  B  C   所属     

2  0  0  1  0    B

3  1  1  0  0    A

4  1  0  0  1    D

5  0  0  1  0    E

6  1  0  1  0    A

7  1  1  0  0    A


9 2つの条件「それぞれの列で当選『1』、且つ所属Aに合致するもの」

10 2 2  0  0   (←上から2番目)

11 5 0  5  0   (←上から5番目)

12 6 6  0  0   (←上から6番目)

13 2つの条件「それぞれの列で当選『1』、且つ所属Bに合致するもの」

14 0 0  1  0   (←上から1番目)※ここを関数で表したいです。

15             (←上から8番目以降)

16             (←上から8番目以降)

17 2つの条件「それぞれの列で当選『1』、且つ所属Dに合致するもの」

18 3 0  0  3    (←上から3番目)

19              (←上から8番目以降)

20              (←上から8番目以降)


 >所属がBやその他の場合でもコピー&ペーストするだけで位置が掴めるような関数
 
これは上の例ですと、A10からD12をA14からD16にコピーしたら条件がBに変わる、という意味でしょうか?
もしそうなら関数では無理です、とお答えします。
関数をお使いになるなら、絶対に参照先の変更(条件がAなのかBなのかDなのか入力する先)が必要になります。
(あ、あとROW関数の中身をA1に戻し、配列を再確定する必要がありますね)
 
常時計算結果が必要であるなら、各条件に合わせて参照先の変更をしてください。
そうでないなら、コピーして値だけペーストすれば、計算するのは1箇所だけ、結果は好きなだけつくれます。
 
一応関数で。
 
	A	B	C	D	E	F
1	@	A	B	C	所属	
2	0	0	1	0	B	1
3	1	1	0	0	A	1
4	1	0	1	1	D	1
5	0	0	1	0	E	1
6	1	0	1	0	A	1
7	1	1	0	0	A	1
8						
9					A	
10	2	2	0	0	3	
11	5	0	5	0	6	
12	6	6	0	0	7	
 
E10に所属条件を入れます。
F列を作業列とします。検索条件が当選(1)である限り、所属がなんであろうと、この作業列をこのまま使います。
F2
=IF(SUM(A2:D2)>0,1,0)
E10
=IF(ISERROR(SMALL(IF(($F$2:$F$7=1)*($E$2:$E$7=$E$9),ROW($A$2:$A$7),""),ROW(A1))),"",SMALL(IF(($F$2:$F$7=1)*($E$2:$E$7=$E$9),ROW($A$2:$A$7),""),ROW(A1)))
配列数式なので Ctrl + Shift + Enter で確定
 
A10
=IF(COUNT($E$10:$E$12)<ROW(A1),"",INDEX(A:A,SMALL($E$10:$E$12,ROW(A1)))*($E10-1))
右と下にフィルコピー。
 
 
どうしても式の変更無く結果を出したいのでしたら、マクロになります。
その際は実際のセル配置が必要になると思います。
私には提示できませんので、マクロにしたい旨をお書きの上、他の識者をお待ちください。
(すずめ)

すずめさま

いただいたアドバイスを参考に作業列を作ると、

理想のシートが出来上がりました♫

本当にありがとうございました。


コメント返信:

[ 一覧(最新更新順) ]


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