Excel (一般機能)

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

 
(Windows 10 Pro : Excel 2016)
行 列のデータの入れ替え2
投稿日時: 20/03/02 20:47:17
投稿者: TI

こんばんは。
 
以前、以下のURLで質問をさせて頂いたものです。
https://www.moug.net/faq/viewtopic.php?t=79139
 
データの行列入れ替えについてですが、以前ご回答いただいた
内容では対応できないデータが出てきてしまい、その対応で
悩んでおります。
 
社員番号 社員氏名 家族番号 家族氏名 家族生年月日
0001 AAA 2 AAA-AAA 2005/1/1
0001 AAA 3 AAA-BBB 2007/1/5
0001 AAA 4 AAA-CCC 2008/7/7
0002 BBB 1 BBB-DDD 2015/1/1
0003 CCC 1 CCC-EEE 2013/10/1
0003 CCC 2 CCC-FFF 2018/1/10
  
  
加工後データ
社員番号 家族1氏名 家族1生年月日 家族2氏名 家族2生年月日
0001 AAA-AAA 2005/1/1
0002 BBB-DDD 2015/1/1
0003 CCC-EEE 2013/10/1 CCC-FFF 2018/1/10
 
家族番号が必ず「1」から始まらないケースが見つかりました。
 
以下のように修正をしてみましたが、家族1は表示されなくなったのですが、
家族2に表示してほしいデータが表示されません。
 
=IFERROR(IF(INDEX(加工データ!$A:$A,MATCH($A5,加工データ!$A:$A,0)+I$2)=$A5
,IF(COUNTIFS(加工データ!$A:$A,加工データ2!$A5,加工データ!$F:$F,10)=0
,INDEX(加工データ!$C:$C,MATCH($A5,加工データ!$A:$A,0)+I$2-1)
,INDEX(加工データ!$C:$C,MATCH($A5,加工データ!$A:$A,0)+I$2)),""),"")
 
以前のものから行の追加などをしており、少し変更をしております。
 
COUNTIFS内の加工データ!$F:$F,10の部分ですが、
「10」が家族番号の「1」を表す番号になります。
 
どこかおかしな点があれば、ご指導いただけますでしょうか。
宜しくお願い申し上げます。

回答
投稿日時: 20/03/03 01:47:59
投稿者: んなっと

行削除をしたとのことですが、無視します。
 
   A   B   C    D     E F   G    H     I    J     K
1 番号 社員 家番   氏名    生年         1     1    2     2
2   1  AAA   2 AAA-AAA  2005/1/1   番号  氏名1   生年1  氏名2   生年2
3   1  AAA   3 AAA-BBB  2007/1/5    1           AAA-AAA  2005/1/1
4   1  AAA   4 AAA-CCC  2008/7/7    2 BBB-DDD  2015/1/1          
5   2  BBB   1 BBB-DDD  2015/1/1    3 CCC-EEE 2013/10/1 CCC-FFF 2018/1/10
6   3  CCC   1 CCC-EEE 2013/10/1                         
7   3  CCC   2 CCC-FFF 2018/1/10                         
 
H3
=IFERROR(INDEX($D:$D,AGGREGATE(15,6,ROW($2:$1000)/($G3=$A$2:$A$1000)/(H$1=$C$2:$C$1000),1)),"")
I3
=IFERROR(INDEX($E:$E,AGGREGATE(15,6,ROW($2:$1000)/($G3=$A$2:$A$1000)/(H$1=$C$2:$C$1000),1)),"")

投稿日時: 20/03/03 08:41:37
投稿者: TI

おはようございます。
 
TIです。
 
ご回答ありがとうございます。
ご提示いただい方法で正しく表示されました。
(データのすべてを確認していないので、おかしな点が見つかればご報告します。)
 
ご提示いただいたものを調べていて、どうしてもわからないことがあります。
 
AGGREGATE(15,6,ROW($2:$1000)/($G3=$A$2:$A$1000)/(H$1=$C$2:$C$1000),1))
この部分は、いったい何をしているのでしょうか。
 
AGGREGATE関数で最小値を求めるオプションを使用していることはわかるのですが、
それに続く、
 
ROW($2:$1000)/($G3=$A$2:$A$1000)/(H$1=$C$2:$C$1000)
 
これらの部分の役割がどうにもわかりません。
 
お手数をおかけしますが、宜しくお願い申し上げます。

回答
投稿日時: 20/03/03 09:22:38
投稿者: んなっと

公式
AGGREGATE(15,6,数値/(条件)/(条件),□)
で、条件を満たす□番目の数値を返します。
ゼロで割るとエラーになって、条件を満たさない数値を除外します。
 
https://www.moug.net/faq/viewtopic.php?t=79122&sid=52a3945d05c0700ea9eeb40d4452cc7e

回答
投稿日時: 20/03/03 10:23:05
投稿者: んなっと

ほかにも方法があります。
 
H3
=IFERROR(INDEX($D:$D,MATCH($G3&"|"&H$1,INDEX($A$1:$A$1000&"|"&$C$1:$C$1000,),)),"")
I3
=IFERROR(INDEX($E:$E,MATCH($G3&"|"&I$1,INDEX($A$1:$A$1000&"|"&$C$1:$C$1000,),)),"")

回答
投稿日時: 20/03/03 10:28:58
投稿者: んなっと

作業列を作るのが一番いい方法です。
 
   A   B   C    D     E  F   G    H     I    J
1 番号 社員 家番   氏名    生年          1     1    2
2   1  AAA   2 AAA-AAA  2005/1/1 1|2 番号  氏名1   生年1  氏名2
3   1  AAA   3 AAA-BBB  2007/1/5 1|3   1           AAA-AAA
4   1  AAA   4 AAA-CCC  2008/7/7 1|4   2 BBB-DDD  2015/1/1    
5   2  BBB   1 BBB-DDD  2015/1/1 2|1   3 CCC-EEE 2013/10/1 CCC-FFF
6   3  CCC   1 CCC-EEE 2013/10/1 3|1                 
7   3  CCC   2 CCC-FFF 2018/1/10 3|2                  
 
F2
=A2&"|"&C2
下方向・↓
H3
=IFERROR(INDEX($D:$D,MATCH($G3&"|"&H$1,$F:$F,0)),"")
I3
=IFERROR(INDEX($E:$E,MATCH($G3&"|"&H$1,$F:$F,0)),"")

回答
投稿日時: 20/03/03 10:31:26
投稿者: んなっと

引用:
おかしな点が見つかればご報告します

細かい変更に付き合う義務はないので、そちらで解決してください。
スレッドを閉じてください。

投稿日時: 20/03/22 20:28:45
投稿者: TI

解決済みとさせていただきます。
 
んなっと様、アドバイスありがとうございます。