Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
元データから別シートへ仕分け入力する。
投稿日時: 20/07/30 11:25:40
投稿者: 桃太郎7

宜しくお願いします。
データから仕分けした内容を別シートへ入力する。
    sheet1 元データ
  A B C D E F
1 No ID コード日付 種別 得意先 商品区分 品番  商品名  その他の
2 1 2 3  7/6  A BB  A001  AA-1  XXX 列にいろいろ
3 2 1 1  7/6  A AA  B001  BB-1  XXX
4 3 1 11  7/7  C AB  C001  CC-1
5 4 2 3  7/8  A BB  A001  AA-1
6 5 3 4  7/8  B CC  B002  BB-2
7 6 1 1  7/9  A AA  A003  AA-3
8 7 1 1  7/10  A AA  B001  BB-1
9 8 2 3  7/11  A BB  A001  AA-1
10 9 1 11  7/11  C AB  C002  CC-2
   例1 sheet2 得意先 AA
   No ID コード 日付 種別 得意先 商品区分 品番  商品名 その他の
1 2  1 1  7/6  A  AA  B001  BB-1  XXXX 列にいろいろ
2 6  1 1  7/9  A  AA  A003  AA-3
3 7  1 1  7/10  A  AA  B001  BB-1
4
5
   例2 sheet3 得意先 AB
   No ID コード 日付 種別 得意先 商品区分 品番  商品名 その他の
1 3  1 11  7/7  C  AB  C001  CC-1  XXXX 列にいろいろ
2 9  1 11  7/11  C  AB  C002  CC-2
3
4
  質問 sheet1の元データから例1sheet2、例2sheet3の様に自動入力がしたい。
     元データには順不同データになります。 
 
     説明が不十分ですが、宜しくお願いします。

回答
投稿日時: 20/07/30 13:26:37
投稿者: んなっと

Sheet2
A1に AA と入力
 
   A  B   C   D   E    F     G    H
1 AA ID コード  日付 種別 得意先 商品区分  品番
2   2  1   1 44018  A  AA   B001 BB-1
3   6  1   1 44021  A  AA   A003 AA-3
4   7  1   1 44022  A  AA   B001 BB-1
 
A2
=IFERROR(AGGREGATE(15,6,Sheet1!$A$2:$A$500/(Sheet1!$F$2:$F$500=A$1),ROW(A1)),"")
下方向・↓
B2
=IF($A2="","",INDEX(Sheet1!B:B,MATCH($A2,Sheet1!$A:$A,0)))
右方向・→下方向・↓
 
Sheet3
A1に AB と入力 それ以外は上と同じ
 
 
※最新のExcelで、FILTER関数が使える場合
A2
=FILTER(Sheet1!A2:I500,Sheet1!F2:F500=A1,"")

回答
投稿日時: 20/07/30 13:28:38
投稿者: Suzu

データ量が多くなると、再計算に時間がかかるので その辺は確かめてください。
 
配列関数を使います
{=IFERROR(INDEX(Sheet1!$A$2:$H$1000,MATCH(LARGE((Sheet1!$E$2:$E$1000="AA")*1/ROW(Sheet1!$A$2:$A$1000),ROWS(Sheet1!$A$2:$A2)),1/ROW(Sheet1!$A$2:$A$1000),0),COLUMNS(Sheet1!$A$1:A$1)),"")}
 
1000 の部分は、データ範囲行を指定します。
入力が今後も増えるなら予め多めの数値を入れる必要がありますが、
その分計算時間も多く必要となります。
 

=IFERROR(INDEX(Sheet1!$A$2:$H$1000,MATCH(LARGE((Sheet1!$E$2:$E$1000="AA")*1/ROW(Sheet1!$A$2:$A$1000),ROWS(Sheet1!$A$2:$A2)),1/ROW(Sheet1!$A$2:$A$1000),0),COLUMNS(Sheet1!$A$1:A$1)),"")
を入れた後に、Enter で確定させるのではなく、「ctr」+「Enter」で確定させる事で、
前後に、{} が入り、配列関数となります。
 
あとは、オートフィルで拡張してください。
 
 
 
個人的には、
 
1. 表をテーブルに変換し スライサー機能を使う(同一シート表示・自動更新なし)
2. オートフィルター を使う(同一シート表示・自動更新なし)
3. フィルターオプション を使い 抽出先に「指定した範囲」 で 抽出範囲を別シート指定 (別シート表示・自動更新なし)
 
の方が 好みです。

投稿日時: 20/07/30 16:23:17
投稿者: 桃太郎7

んなっとさん、いつも大変お世話になっています。
早速のご回答ありがとうございました。
 実際に実行して上手く出来ました。
 
ありがとうございました 今後とも宜しくお願いします。