[[20190409185446]] 『勉強中です』(アルス) ページの最後に飛ぶ

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

 

『勉強中です』(アルス)

 A       B    C    D
1 役割     担当者
2 〇〇責任者  Aさん    Fさん
3 〇●責任者  Gさん    Bさん
4 〇〇担当   Lさん    Mさん
5 〇●担当   Jさん    Cさん   Dさん
6 ●●担当   Eさん
7 〇〇係    Kさん    Iさん  Hさん

上記のデータを違うシートに

  A     B
1 氏名   役割
2 Aさん
3 Bさん
4 Cさん
5 Dさん
6 Eさん
7 Fさん
8 Gさん
9 Hさん
10 Iさん
11 Jさん
12 Kさん
13 Lさん
14 Mさん

B列にINDEX MATCH 関数を使って役割を出す事って出来ますか?
他のやり方はあると思いますがINDEX MATCH 関数を使って出来るのか知りたいです。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


回答の前に、タイトルは質問内容の要約にされたほうが、同じ悩みを持っている人の目に留まりやすいとおもいますし、回答するほうからしても何を求めているのかがわかるので、その辺も配慮したほうがよさそうに思います。

さて、やり方はいろいろありそうですが、一案として。

(1)
手元にExcel2007しかないので長くなりますが↓でA列の名前が対象範囲の何行目に検索値があるか求まります。

 =SUM(IFERROR(MATCH(A2,Sheet1!$B$2:$B$7,0),0),IFERROR(MATCH(A2,Sheet1!$C$2:$C$7,0),0),IFERROR(MATCH(A2,Sheet1!$D$2:$D$7,0),0))

(※未検証ですがExcel2010以上であればAGGREGATE関数を使うのがよさそう。)
https://www.newcom07.jp/EXCEL-database/blog/excel_coffee_break/2014/05/aggregate.html

(2)
何らかの方法で範囲内のどの行であるのか特定できれば、

 =INDEX(Sheet1!$A$2:$A$7,【範囲の何行目】)

とすればINDEX関数で参照できそうに思います。

(もこな2) 2019/04/09(火) 21:09


もこな2さん タイトルの件その通りですね。
Excelを勉強しようとここも初めて利用させて頂きました。
次回より参考にさせていただきます。
回答の件ですが、一度試させていただきます。
ありがとうございます。
(アルス) 2019/04/09(火) 22:20

出来ない・・・
INDEX MATCH 関数にこだわらずにいい関数ないかな?
どの行であるのか特定できないとしたら
(アルス) 2019/04/10(水) 07:50

マクロはお嫌ですか?

(隠居じーさん) 2019/04/10(水) 08:27


 Sheet1				
 	A	B	C	D
 1	役割	担当者		
 2 〇〇責任者	Aさん	Fさん	
 3 〇●責任者	Gさん	Bさん	
 4  〇〇担当	Lさん	Mさん	
 5  〇●担当	Jさん	Cさん	Dさん
 6  ●●担当	Eさん		
 7   〇〇係	Kさん	Iさん	Hさん

 Sheet2				
 	A	B		
 1	氏名	役割		
 2	Aさん			
 3	Bさん			
 4	Cさん			
 5	Dさん			
 6	Eさん			
 7	Fさん			
 8	Gさん			
 9	Hさん			
 10	Iさん			
 11	Jさん			
 12	Kさん			
 13	Lさん			
 14	Mさん			

 Sheet2のB2:=IFERROR(INDEX(Sheet1!A$2:A$1001,SUMPRODUCT((Sheet1!B$2:D$1001=A2)*(ROW(A$1:A$1000)))),"")
 下方向にフィルコピー

 一応1000件まで対応
(bi) 2019/04/10(水) 08:47

 >INDEX MATCH 関数にこだわらずにいい関数ないかな?

 なんで最初の質問は INDEX〜MATCH 限定だったんですか?

 >Sheet2のB2:=IFERROR(INDEX(Sheet1!A$2:A$1001,SUMPRODUCT((Sheet1!B$2:D$1001=A2)*(ROW(A$1:A$1000)))),"")

 ↑ は、どんなエラーを想定して IFERROR を使ってるんですかね?

 B2 =INDEX(Sheet1!A:A,SUMPRODUCT((Sheet1!$B$2:$D$50=A2)*ROW($A$2:$A$50)))
 または
 B2 =INDEX(Sheet1!A:A,MAX(INDEX((Sheet1!$B$2:$D$50=A2)*ROW($A$2:$A$50),0)))

 範囲は必要最小限に!

 ■補足
 Sheet2の名前は必ず元表(Sheet1)にある、という前提
 ない場合もあるんだったら

 B2 =IF(COUNTIF(Sheet1!$B$2:$D$50,A2),INDEX(Sheet1!A:A,MAX(INDEX((Sheet1!$B$2:$D$50=A2)*ROW($A$2:$A$50),0))),"")

 元表に同じ名前が複数あることは想定してません。

 以上、参考まで
(笑) 2019/04/10(水) 11:07

 >Sheet2の名前は必ず元表(Sheet1)にある、という前提
 >ない場合もあるんだったら

 ↓ でもいいかも

 B2 =INDEX(Sheet1!A:A,MIN(INDEX((Sheet1!$B$2:$D$50<>A2)*1000+ROW($A$2:$A$50),0)))&""

 A1002以降のセルは空白、という前提で

 または
 B2 =IFERROR(INDEX(Sheet1!A:A,MIN(INDEX((Sheet1!$B$2:$D$50<>A2)*10^7+ROW($A$2:$A$50),0))),"")

 参考まで
(笑) 2019/04/10(水) 12:07

>出来ない・・・
なにがどうできなかったのかがわかりませんが、作業列を設けて数式を分解してみてはどうでしょうか

biさんの表をお借りして

 Sheet1				
 	A	B	C	D
 1	役割	担当者		
 2 〇〇責任者	Aさん	Fさん	
 3 〇●責任者	Gさん	Bさん	
 4  〇〇担当	Lさん	Mさん	
 5  〇●担当	Jさん	Cさん	Dさん
 6  ●●担当	Eさん		
 7   〇〇係	Kさん	Iさん	Hさん

 Sheet2				
 	A	B	C	D	E	F
 1	氏名	役割	作業列1 作業列2 作業列3 作業列4
 2	Aさん			
 3	Bさん			
 4	Cさん			
 5	Dさん			
 6	Eさん			
 7	Fさん			
 8	Gさん			
 9	Hさん			
 10	Iさん			
 11	Jさん			
 12	Kさん			
 13	Lさん			
 14	Mさん	

 (1)Sheet2のC2セルに↓を設定して、同シートのC2:E14にコピペ
   =IFERROR(MATCH($A2,Sheet1!B$2:B$7,0),0)

 (2)Sheet2のF2セルに↓を設定して、同シートのF2:F14にコピペ
   =SUM(C2:E2)

 (3)Sheet2のB2セルに↓を設定して、同シートのB2:B14にコピペ
   =INDEX(Sheet1!$A$2:$A$7,F2)

このようにすれば、どの段階で「うまくいかなかったのか」が特定できるとおもいます。

(もこな2) 2019/04/10(水) 12:19


みなさんありがとうございます。
なんとか出来ました
(アルス) 2019/04/11(木) 18:58

コメント返信:

[ 一覧(最新更新順) ]


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