[[20190602094438]] 『シート1で重複する文字列の値をシート2に拾い出す』(saku) ページの最後に飛ぶ

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

 

『シート1で重複する文字列の値をシート2に拾い出す』(saku)

恐れ入ります
マクロは出来ないので関数で作りたいです

シート1

   A     B
1りんご   2
2バナナ   7
3りんご   8
4さくら   6
5さくら   9

これを
シート2に

   A     B    C 
1りんご   2    8
2バナナ   7
3さくら   6    9

と返す為に
シート2のA1の数式と
シート2のB2の数式を教えて頂けますか

「りんご」「さくら」は各々全く同じ値で
重複するためシート2でA列では一括に纏め、
しかし各々の値は横に羅列していぎたいです

宜しくお願いします

< 使用 Excel:unknown、使用 OS:Windows8 >


 作業列を使っていいのなら、、、

 りんご	2	1 =COUNTIF($A$1:A1,A1)
バナナ	7	1
りんご	8	2
さくら	6	1
さくら	9	2

 =IFERROR(INDEX(Sheet1!$A$1:$A$5,SMALL(IF((Sheet1!$C$1:$C$5=1),ROW($A$1:$A$5)),ROW(A1))),"")
        =IFERROR(INDEX(Sheet1!$B$1:$B$5,SMALL(IF((Sheet1!$A$1:$A$5=$A1),ROW($A$1:$A$5)),COLUMN(A1))),"")
りんご	2	8
バナナ	7	
さくら	6	9

 ですけど、、作業列を使わないスマートな式が出てくると思います。(凄い自信(^^;)
あっ、、下のは配列です。
(SoulMan) 2019/06/02(日) 10:45

ありがとうございます
同じように

シート1

   A     B
1りんご   2
2バナナ   7
3りんご   8
4さくら   6
5さくら   9
6りんご   3
7さくら   4
8りんご   5

これを
シート2に

   A     B    C    D    E
1りんご   2    8    3    5
2バナナ   7
3さくら   6    9    4

の場合
シート2のB1〜E1はどうすればよいでしょうか
D1以降も
=IFERROR(INDEX(Sheet1!$B$1:$B$5,SMALL(IF((Sheet1!$A$1:$A$5=$A1),ROW($A$1:$A$5)),COLUMN(A1))),"")
でよろしいでしょうか

(saku) 2019/06/02(日) 12:27


 =IFERROR(INDEX(Sheet1!$B$1:$B$8,SMALL(IF((Sheet1!$A$1:$A$8=$A1),ROW($A$1:$A$8)),COLUMN(A1))),"") 
基本、一致した行の小さい順なので範囲は拡張してください
ただ、ROW($A$1:$A$8))の部分は、インデックスなので範囲を広げても必ずA1からです。
iPhoneからなのでダメだったらごめんちゃいです🙏
(SoulMan) 2019/06/02(日) 13:09

ありがとうごさいます!
シート2のB2〜E2は
シート1の小さい値から
B2〜E2へ拾い出す事もできるのですね

であれば
シート1

   A     B
1りんご   2
2バナナ   7
3りんご   8
4さくら   6
5さくら   9
6りんご   3
7さくら   4
8りんご   5
これを 
シート2に 
   A     B    C    D    E
1りんご   8    5    3    2
2バナナ   7
3さくら   9    6    4

と大きい値から拾い出して並べてもらえるには
どうすればよいでしょうか

欲張った質問ですみません
(saku) 2019/06/02(日) 15:27


 >基本、一致した行の小さい順なので範囲は拡張してください

 少し誤解させちゃいましたね。

 正確には、一致した行の 上から です。

 なので何処かへ出力しておいて

     =IFERROR(LARGE($G1:$J1,COLUMN(A1)),"")

                         =IFERROR(INDEX(Sheet1!$B$1:$B$8,SMALL(IF((Sheet1!$A$1:$B$8=$A1),ROW($B$1:$B$8)),COLUMN(A1))),"")
 りんご	8	5	3	2		2	8	3	5
 バナナ	7					7			
 さくら	9	6	4			6	9	4	

 とするのが一番簡単かと思います。

 でも、作業列を使わないもっとスマートな式が出てくると思います。

 では、、では、、
(SoulMan) 2019/06/02(日) 18:09

 Sheet2のB列以降が「出現順」でもいいのなら
 ピボットテーブルで簡単にできます(Sheet1の1行目を見出し、C列を作業列にして)

 作業列は ↓ な感じ
 C2 =IF(A2="","",COUNTIF($A$2:A2,A2))

 ■B列以降が降順で、数式の場合
 Sheet1の実際のデータ量が不明ですが、作業列を使ってもいいのなら

 Sheet1のC1セル
 =IF(A1="","",IF(COUNTIF($A$1:A1,A1)=1,ROW(),""))
 普通にEnterだけで確定し、下コピー

 Sheet2
 A1 =IFERROR(INDEX(Sheet1!A:A,SMALL(Sheet1!C:C,ROW(A1))),"")
 普通にEnterだけで確定し、下コピー

 B1 =IF($A1="","",IFERROR(LARGE(IF(Sheet1!$A$1:$A$100=$A1,Sheet1!$B$1:$B$100),COLUMN(A1)),""))
 Ctrl+Shift+Enter で確定し、下と右にコピー(範囲は実際の表に合わせる)
 ROW(A1) と COLUMN(A1) の「A1」はどんな配置でも変更しないように

 参考まで
(笑) 2019/06/03(月) 11:04

コメント返信:

[ 一覧(最新更新順) ]


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