[[20070625115531]] 『データの種類を取り出したいのですが』(ぷしん) ページの最後に飛ぶ

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

 

『データの種類を取り出したいのですが』(ぷしん)

ある範囲に何種類かのデータが入っていまして、
それを関数で取り出したいのです。

オートフィルタみいたいな感じで、種類だけとることはできますでしょうか?

たとえますと、

ある列に、

りんご、みかん、パイナップル、ぶどう、みかん、りんご、

パイナップル、いちご、バナナ、みかん、・・・とデータがありまして、

それを関数で、

りんご、みかん、パイナップル、ぶどう、いちご、バナナ、と

データの種類だけを取って、ある範囲に関数で出力したいのです。

よろしくお願いいたします。


 「関数で出力」とおっしゃられていますが、関数で無いとダメですか?
 「フィルタオプションの設定」で、出来ますよ?

 (Ohagi)

はい、フィルタではなく関数で行いたいのです。

お願いします。


 こんにちは〜♪

 >はい、フィルタではなく関数で行いたいのです。 

 こんな表の場合です。。。

	A	    B   C
[1]	りんご     1  りんご
[2]	みかん	    2  みかん
[3]	パイナップル  3  パイナップル
[4]	ぶどう	    4  ぶどう
[5]	みかん	       いちご
[6]	りんご	       バナナ
[7]	パイナップル		
[8]	いちご	    8	
[9]	バナナ	    9	
[10]	みかん		

 ★B列の数字は、作業列の案の場合の行番号になってます。

 C1セルへ
 =IF(COUNT(INDEX(1/(MATCH($A$1:$A$10,$A$1:$A$10,)=ROW($1:$10)),))<
ROW(A1),"",INDEX(A:A,INDEX(1/LARGE((INDEX(MATCH($A$1:$A$10,$A$1:$A$10,0),)=
ROW($1:$10))/ROW($1:$10),ROW(A1)),)))

 下にコピーします。

 ★データが10行以上、増えていくのでしたら

 C1セルへ
 =IF(COUNT(INDEX(1/(MATCH($A$1:$A$20,$A$1:$A$20,)=ROW($1:$20)),))<
ROW(A1),"",INDEX(A:A,SMALL(INDEX(SUBSTITUTE(ISNUMBER(1/
(MATCH($A$1:$A$20,$A$1:$A$20,)=ROW($1:$20)))*1,0,10^7)*ROW($1:$20),),ROW(A1))))

 下にコピーします。

 提示した2つの式は、データ行が多いと重くなりますので
 作業列を使う方法をお勧めします。。

 ★作業列の案です。。。

 B列に作業列をつくります。
 B1セルへ
 =IF(COUNTIF($A$1:A1,A1)=1,ROW(A1),"")
 下にコピーします。。。

 C1セルへ
 =IF(COUNT(B:B)<ROW(A1),"",INDEX(A:A,SMALL(B:B,ROW(A1))))
 下にコピーします。。。

 ご参考にどうぞ。。。

 。。。。Ms.Rin〜♪♪


すごいです!できました。ありがとうございます

しかし、任意の行や列からはじめたいのですが、うまくいきません

数式は難しすぎて理解不能です。

どうすればよいでしょうか?


 念のためですが…(^_^;)
 「フィルタオプションの設定」と「オートフィルタ」は違いますよ?

 フィルタオプションの設定(詳細な条件設定での抽出) 
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter.htm

 >任意の行や列からはじめたいのですが
 できたら、レイアウトをご提示いただけば
 レイアウトに沿った数式が提示されると思いますよ?

 (Ohagi)

 (ぷしん)

 すみません、オートフィルタのオプションと勘違いしてました。。
 データは随時変更されまして、リアルタイムで反映させたいので、関数が良いのですが。

 元のデータがA8からA25までに入力されてまして、
 抽出先をI8,I9,I10・・としたいのですが、
 Ms.Rinさんの数式で出力したいのですが、うまくいかないです。。


 >うまくいかないです
 Ms.Rinさんは、複数の方法をご提案をされています
 どの方法を選び、どうやったが どうダメだった というような
 結果を教えていただけますか?

 最後の方法で
 作業列(B列) → =IF(COUNTIF($A$8:A8,A8)=1,ROW(),"")
 抽出先(C列) → =IF(COUNT($B$8:$B$25)<ROW()-7,"",INDIRECT("A"&SMALL($B$8:$B$25,ROW()-7)))

 こんな感じで、いかがでしょうか?
 (Ohagi)

 Ohagiさん、Ms.Rinさん ありがとうございます。
 おかげさまでできました!

 数式はチンぷんカンプンですが
 ROW()のあとの-@がポイントのような気がしました。。

 たびたび、すみません。。

 また助けていただきたいのですが、
 取り出したデータの種類を任意に決めた順番でソートして表示させたいのですが、
 なにか方法はありませんでしょうか?

 あるいは出力したのち、ソートでもかまわないのですが、
 手動で並べ替えではなくリアルタイムにソートされるとありがたいです。

 	A	    B   C
 [1]	りんご     1  いちご
 [2]	みかん	    2  ぶどう
 [3]	パイナップル  3  みかん
 [4]	ぶどう	    4  パイナップル
 [5]	みかん	      りんご
 [6]	りんご	      バナナ 
 [7]	パイナップル		
 [8]	いちご	    8	
 [9]	バナナ	    9	
 [10]	みかん		

という感じです


 A列をソートしてはダメなのでしょうか?

 =IF(COUNTIF($A$8:A8,A8)=1,ROW(),"")
        ↑ ↑    ↑
       固定 可変   式の入っている行の「行番号」

 B列は、上記の式で数式の入っている行までで、同じ行のA列にある値を数え
 「個数が1」の場合はその「行番号」を、「個数が2個以上」の場合は「空白」を表示しています

 この行番号の小さい順にC列へ表示をさせていますので、最初からA列を並べておけば順番に抽出できませんか?

 >任意に決めた順番でソート
 「ツール」→「オプション」→「ユーザー設定リスト」に登録すれば出来ると思います

 (Ohagi)

 たびたび、ありがとうございます。

 >>A列をソートしてはダメなのでしょうか?
 A列はデータを計上した順番に入力しておきたいもので、
 出力時にソートしたいのです。。

 あるいは、出力後に
 ユーザー設定リストで指定した順で、
 リアルタイム(手動ではなく)で並べ替られたらと思います。


 「任意に決めた順番」の一覧表を作成、隣にその順番の連番を作成
 =IF(COUNTIF($A$8:A8,A8)=1,VLOOKUP(A8,一覧範囲,2,0),"")
 のような感じで連番から取り出させてはいかがでしょうか?
 一覧表にA列の値が必ずあると仮定してますので、エラー処理はしてません

 (e1tw)VLOOKUP
https://www.excel.studio-kazu.jp/func/vlookup.html

 (Ohagi)


>取り出したデータの種類を任意に決めた順番でソートして表示させたいのですが、

>ある範囲に何種類かのデータが入っていまして、それを関数で取り出したいのです。

>「任意に決めた順番」の一覧表を作成、
では 何種類かのデータ(が固定されているならそれを関数で取り出す必要性もないと思いますし)

規則性がなければ無理でしょう。(新しい商品が出るたびに並び替える条件では)

できる方法としては別列に番号を振り並び替える
(rrr)


 アドバイスを参考に自分でできるところまでやったのですが
 行き詰まりました。。

 とりあえず最終的にソートしたい順番です(50音順としました)
 別のシートにソートデータ用としまして、それぞれに連番でソート番号をつけました。

 いちご	1
 パイナップル	2
 バナナ	3
 ぶどう	4
 みかん	5
 りんご	6

 それで、
 入力データの方ですが
 C列を検索地としまして、D列にVlookupで別シートよりソート番号をつけました。

          A             B      C     D
 [1]	りんご     1  りんご    6
 [2]	みかん	    2  みかん        5
 [3]	パイナップル  3  パイナップル  2
 [4]	ぶどう	    4  ぶどう        4
 [5]	みかん	       いちご        1
 [6]	りんご	       バナナ        3
 [7]	パイナップル		
 [8]	いちご	    8	
 [9]	バナナ	    9	
 [10]	みかん		

 そして、
 最終的に出力したい範囲の列に1,2,3,4,5,,,,と連番を打ちました。
 そして、Vlookupでその連番を検索値としまして、
 D列と一致するC列のデータを取りました。

 ここまではよいのですが、
 ここで、仮にA列の入力データにぶどうが入ってないときは、
 一致するデータなしでエラーが表示されます。
 そのときそのエラー行を抜いて上の行と詰めることはできませんでしょうか?

 1	いちご
 2	パイナップル
 3	バナナ
 4	#N/A
 5	みかん
 6	りんご

 もう1作業を挟んでも構わないです。

 よろしくお願いします。

 >C列を検索地としまして、D列にVlookupで別シートよりソート番号をつけました
 そうではなく、別に一覧表を作成するのですよ?(E〜F列)
 それに付けた連番をB列に表示させ、C列にその連番順にA列の値を取り出します

	[A]	    [B]	[C]	[D]	[E]	        [F]
[8]	りんご	     5	いちご		いちご	         1
[9]	みかん	     4	パイナップル	パイナップル	     2
[10]	パイナップル	2	バナナ	    バナナ	          3
[11]	ぶどう		    みかん	    みかん	         4
[12]	みかん		    りんご		りんご	         5
[13]	りんご					
[14]	パイナップル					
[15]	いちご	     1				
[16]	バナナ	     3				
[17]	みかん					
[18]	りんご					
[19]	みかん					
[20]	パイナップル					
[21]	ぶどう					
[22]	みかん					
[23]	りんご					
[24]	パイナップル					
[25]	いちご					

 B8 =IF(AND(COUNTIF($E$8:$F$12,A8)>0,COUNTIF($A$8:A8,A8)=1),VLOOKUP(A8,$E$8:$F$12,2,0),"")
 C8 =IF(MAX($B$8:$B$25)<ROW()-7,"",INDIRECT("A"&MATCH(ROW()-7,$B$8:$B$25,0)+7))

 (Ohagi)


 こんにちは〜♪

 こんな表でしたら〜。。。。

	A	 B		D	E	    J
[1]				いちご	1		
[2]				パイン	2		
[3]				バナナ	3		
[4]				ぶどう	4		
[5]				みかん	5		
[6]				りんご	6		
[7]				↑			
[8]	りんご	  6		VLOOK	の表		いちご
[9]	みかん	  5					パイン
[10]	パイン	  2					バナナ
[11]	ぶどう	  4					ぶどう
[12]	みかん						みかん
[13]	りんご						りんご
[14]	パイン						
[15]	いちご	  1					
[16]	バナナ	  3					
[17]	みかん						
[18]							

 B8セルへ
 =IF(COUNTIF($A$8:A8,A8)=1,VLOOKUP(A8,$D$1:$E$6,2,0),"")

 下へコピーします。。

 J8セルへ
 =IF(COUNT($B$8:$B$25)<ROW(A1),"",INDEX(D:D,SMALL($B$8:$B$25,ROW(A1))))

 下へコピーします。。

 いかがでしょうか。。。

 。。。。Ms.Rin〜♪♪

 **********************
 追伸で〜す。。。

 Ohagiさんの式を見たら〜。。。

 VLOOKの表に無い、商品が入力される場合もあるのかな?
 その場合は

 B8の式を
 =IF((COUNTIF($D$1:$D$6,A8)*COUNTIF($A$8:A8,A8)=1),VLOOKU(A8,$D$1:$E$6,2,0),"")

 にしてください。。。。


 やった!できました!

 OhagiさんMs.Rinさん
 お二人さまには大感謝です!
 それにしてもお二人のエクセルの知識にはリスペクトです!

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

 ぷしん


コメント返信:

[ 一覧(最新更新順) ]


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