Excel (一般機能)

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

 
(Windows 10 Pro : Excel 2019)
検索値が2つある場合のINDEX・MATCH
投稿日時: 22/06/09 15:12:17
投稿者: ラングドシャ

お願いします。
 
●シート名;作業
 

 	 B	 C
1	6月10日	
2	作業	氏名
3	入A	社員01
4	確A	社員02
5	調A	社員03
6	集A	社員04
7	伝A	社員05
8	入B	社員06
9	確B	社員07
10	調B	社員08
11	集B	社員09
12	伝B	社員10

 
 
 
●シート名;シフト
 
	 B	 C	 D	 E	 F	 G
1	氏名	6月6日	6月7日	6月8日	6月9日	6月10日
2	社員01	確B	伝B		入B	
3	社員02	伝B	入A		調B	
4	社員03		集A	確B		
5	社員04	集A	調A	伝B	確B	
6	社員05	集B		入A	伝B	
7	社員06		伝A	集A	入A	
8	社員07	伝A	入B	調A	集A	
9	社員08	入B			調A	
10	社員09	調A	調B	伝A		
11	社員10	調B	集B	入B	伝A	
12	社員11			確A		
13	社員12	入A			確A	
14	社員13		確B	集B		
15	社員14		確A		集B	
16	社員15	確A		調B		

    
 
 
以上のような構成のブックです。
作業シートにてB1に入れた日付のシフト内容をシフトシートの6月10日の下に社員名の
合致するセルに入れたいです。
 
MATCHを2回入れる方法があるとみて、
=INDEX(作業!B:B,(MATCH(シフト!B2,作業!C:C,0),MATCH(作業!B1,シフト!1:1,0))
としてみましたが、エラーとなりました。
 
どのような関数にすればよいでしょうか?
よろしくお願いいたします。
 

回答
投稿日時: 22/06/09 15:48:48
投稿者: taitani

すみません、回答する前に、作業シートに6月11日ができた場合は、どのように入力する予定でしょうか。

投稿日時: 22/06/09 15:54:50
投稿者: ラングドシャ

taitani様
ありがとうございます。
そのあたりも考え中なのですが、とりあえずはシフトシートのその日を(今回なら6/10)
値貼り付けで対応しようと思っています。

投稿日時: 22/06/09 15:58:23
投稿者: ラングドシャ

taitani様
すみません。言葉が足りないですね。
シフトシートは元々約1か月分の日付があります。
そのうち、シフトを作成した日は値貼り付けで対応しようと思っています。

回答
投稿日時: 22/06/09 16:19:20
投稿者: taitani

回答ありがとうございます。
今後の汎用性を考えるのであれば、、、
 
・作業シート

氏名	6月10日	6月11日	6月12日	6月13日	6月14日
社員01	入A	-	-	-	-
社員02	確A	-	-	-	入A
社員03	調A	-	入A	-	確A
社員04	集A	-	確A	-	調A
社員05	伝A	-	調A	入A	集A
社員06	入B	入A	集A	確A	伝A
社員07	確B	確A	伝A	調A	入B
社員08	調B	調A	入B	集A	確B
社員09	集B	集A	確B	伝A	調B
社員10	伝B	伝A	調B	入B	集B
社員11	-	入B	集B	確B	伝B
社員12	-	確B	伝B	調B	-
社員13	-	調B	-	集B	-
社員14	-	集B	-	伝B	-
社員15	-	伝B	-	-	-



 
計算式は、、、
=INDEX(作業!$A$2:$F$16,MATCH($A2,作業!$A$2:$A$16,0),MATCH(F$1,作業!$A$1:$F$1,0))
 
かな。
 
・シフトシート
氏名	6月6日	6月7日	6月8日	6月9日	6月10日	6月11日	6月12日	6月13日	6月14日
社員01	確B	伝B		入B	入A	-	-	-	-
社員02	伝B	入A		調B	確A	-	-	-	入A
社員03		集A	確B		調A	-	入A	-	確A
社員04	集A	調A	伝B	確B	集A	-	確A	-	調A
社員05	集B		入A	伝B	伝A	-	調A	入A	集A
社員06		伝A	集A	入A	入B	入A	集A	確A	伝A
社員07	伝A	入B	調A	集A	確B	確A	伝A	調A	入B
社員08	入B			調A	調B	調A	入B	集A	確B
社員09	調A	調B	伝A		集B	集A	確B	伝A	調B
社員10	調B	集B	入B	伝A	伝B	伝A	調B	入B	集B
社員11			確A		-	入B	集B	確B	伝B
社員12	入A			確A	-	確B	伝B	調B	-
社員13		確B	集B		-	調B	-	集B	-
社員14		確A		集B	-	集B	-	伝B	-
社員15	確A		調B		-	伝B	-	-	-

回答
投稿日時: 22/06/09 16:29:59
投稿者: taitani

あ、ちなみに、

引用:
MATCHを2回入れる方法

 
というのは、列と行をそれぞれ見つける方法なので、最初のカッコが不要というか文法上エラーです。
作業!B:B,( ←これ

回答
投稿日時: 22/06/09 16:37:03
投稿者: んなっと

●作業
 
C列を毎日値貼り付けで上書きするということですか?それではだめです。
下のように古い日付も残して、右方向に1列ずつ追加していきましょう。
 
    B    C    D    E    F    G
 1    6月6日 6月7日 6月8日 6月9日 6月10日
 2 作業  氏名  氏名  氏名  氏名   氏名
 3  入A 社員12 社員02 社員05 社員06  社員01
 4  確A 社員15 社員14 社員11 社員12  社員02
 5  調A 社員09 社員04 社員07 社員08  社員03
 6  集A 社員04 社員03 社員06 社員07  社員04
 7  伝A 社員07 社員06 社員09 社員10  社員05
 8  入B 社員08 社員07 社員10 社員01  社員06
 9  確B 社員01 社員13 社員03 社員04  社員07
10  調B 社員10 社員09 社員15 社員02  社員08
11  集B 社員05 社員10 社員13 社員14  社員09
12  伝B 社員02 社員01 社員04 社員05  社員10
 
●シフト
 
     B    C    D    E    F    G
 1  氏名 6月6日 6月7日 6月8日 6月9日 6月10日
 2 社員01   確B   伝B       入B   入A
 3 社員02   伝B   入A       調B   確A
 4 社員03       集A   確B       調A
 5 社員04   集A   調A   伝B   確B   集A
 6 社員05   集B       入A   伝B   伝A
 7 社員06       伝A   集A   入A   入B
 8 社員07   伝A   入B   調A   集A   確B
 9 社員08   入B           調A   調B
10 社員09   調A   調B   伝A       集B
11 社員10   調B   集B   入B   伝A   伝B
12 社員11           確A         
13 社員12   入A           確A     
14 社員13       確B   集B         
15 社員14       確A       集B     
16 社員15   確A       調B         
 
C2
=IFERROR(INDEX(作業!$B:$B,MATCH($B2,作業!C:C,0)),"")
右方向・→下方向・↓

回答
投稿日時: 22/06/09 16:41:25
投稿者: taitani

んなっとさんの方がスマートですね^^;
失礼しました。

投稿日時: 22/06/09 16:56:03
投稿者: ラングドシャ

taitani様
んなっと様
 
ありがとうございます。
作業シートなんですが、こちらは1日分しかないんです。
taitani様の

引用:
作業シートに6月11日ができた場合は、どのように入力する予定でしょうか。

この質問にきちんと回答できていなかったかもです。
 
作業のシートはいろいろな状況を考慮し、自動(手動でも修正も含まれる)で目的の日の
シフトを組んだものまとめています。
これをシフトシートに転記しシフトシートの情報を残していきたいのです。
ゆくゆくは毎日値貼り付けするのではなく、なにかスマートな方法で情報を残していけたら
と思い考え中ではあります。
----
以前、んなっと様にご回答いただいた
https://www.moug.net/faq/viewtopic.php?t=81467
などでシフト作成をしています。(その節はありがとうございました。)
----
お手数ですが、最初の質問の状況での関数を教えていただければ幸いです。
よろしくお願いいたします。

投稿日時: 22/06/09 16:57:45
投稿者: ラングドシャ

例えば6/11のシフトは
6/10の作業内容がシフトシートに転記されてから、作業内容を考慮し
シフトを組むようなイメージです。
(同じ作業で連日続かないなど・・・)

回答
投稿日時: 22/06/09 17:03:55
投稿者: Suzu

シート作業 から、10日のデータを 関数を使い シート シフト に 表示している状態から
シート 作業 上 の 10日のデータに11日のデータを上書きしてしまえば
 
シートシフトの 10日のデータは消え、10日の列に 11日の上書きしたデータが表示されますよね。
 
なので、上書き貼り付けではダメでしょう?

回答
投稿日時: 22/06/09 17:08:40
投稿者: taitani

え?
となると、最初は 「G2」 に式を入れて、↓報告にコピーして、全部選択して、値貼り。
で、次の日は、「H2」に式を入れて、↓報告にコピーして、全部選択して、値貼り。。。。
って、続くってことですか???
 
抽選から割り当てを出しているのであれば、そもそものデータ ベースをうまいこと考えた方がよさそうです。
※ (再)レベルを均等にグループわけ
「一つ変更点があり」 で、総崩れしそうです^^;

回答
投稿日時: 22/06/09 17:20:55
投稿者: んなっと

下のような「作業履歴」シートを新しく作成しましょう。
そして現在の「作業」シートのC列を毎日右方向に値貼り付けしていくだけです。
何も難しいことはない。
 
●作業履歴
   
    B    C    D    E    F    G
 1    6月6日 6月7日 6月8日 6月9日 6月10日
 2 作業  氏名  氏名  氏名  氏名   氏名
 3  入A 社員12 社員02 社員05 社員06  社員01
 4  確A 社員15 社員14 社員11 社員12  社員02
 5  調A 社員09 社員04 社員07 社員08  社員03
 6  集A 社員04 社員03 社員06 社員07  社員04
 7  伝A 社員07 社員06 社員09 社員10  社員05
 8  入B 社員08 社員07 社員10 社員01  社員06
 9  確B 社員01 社員13 社員03 社員04  社員07
10  調B 社員10 社員09 社員15 社員02  社員08
11  集B 社員05 社員10 社員13 社員14  社員09
12  伝B 社員02 社員01 社員04 社員05  社員10
 
●シフト
 
     B    C    D    E    F    G
 1  氏名 6月6日 6月7日 6月8日 6月9日 6月10日
 2 社員01   確B   伝B       入B   入A
 3 社員02   伝B   入A       調B   確A
 4 社員03       集A   確B       調A
 5 社員04   集A   調A   伝B   確B   集A
 6 社員05   集B       入A   伝B   伝A
 7 社員06       伝A   集A   入A   入B
 8 社員07   伝A   入B   調A   集A   確B
 9 社員08   入B           調A   調B
10 社員09   調A   調B   伝A       集B
11 社員10   調B   集B   入B   伝A   伝B
12 社員11           確A         
13 社員12   入A           確A     
14 社員13       確B   集B         
15 社員14       確A       集B     
16 社員15   確A       調B         
 
C2
=IFERROR(INDEX(作業履歴!$B:$B,MATCH($B2,作業履歴!C:C,0)),"")

投稿日時: 22/06/09 17:23:48
投稿者: ラングドシャ

Suzu様
taitani様
 
ありがとうございます。
シフトシートには、予めすべて関数を入れておきます。
 
@作業シートで目的の日のシフトが作成された状態。この場合6/10
 ↓
Aシフトシートには関数にて6/10かつ割り当てられた人のセルに作業名が表示される。
 (6/10のみ表示されている)
 ↓
Bシフトシートの6/10の列を値貼り付け
 ↓
C翌日、作業シートにて6/11を作成
 6/11は、6/10の作業などを考慮してシフト作成
 
といった流れで考えていました。
現時点でこの方法しか思いついておらず・・・
うまく説明できていなくてすみません。
 
 
んなっと様
ありがとうございます。
作業履歴シートを作成してみます。
シフトシートで値貼り付けをするより簡単にできそうですね。

回答
投稿日時: 22/06/09 17:25:13
投稿者: んなっと

引用:
※ (再)レベルを均等にグループわけ
「一つ変更点があり」 で、総崩れしそうです^^;

この一つ前のスレッドで私の回答が間違えていたんです。
ラングドシャさんはそのスレッドの最初から一貫して正しい質問をしていました。
迷惑をかけたのは回答する側でした。

回答
投稿日時: 22/06/09 17:34:51
投稿者: taitani

んなっとさん、大変失礼いたしました。
ちゃんと過去分しっかりと読まずにコメントしてしまいました。

投稿日時: 22/06/10 13:38:48
投稿者: ラングドシャ

んなっと様
 taitani様
 
ありがとうございます。
作業履歴シートを作成しました。ここで一つ気づいたのですが、
作業履歴は会社営業日のみの表示。
シフトシートは休みも入った表示になり日の並びが一致しません。
下記の例だと6/11,6/12は休日なのでシフトは組みません。
 
 
●作業履歴
    

   B    C    D    E    F    G   H
 1    6月6日 6月7日 6月8日 6月9日 6月10日 6月13日
 2 作業  氏名  氏名  氏名  氏名   氏名  氏名
 3  入A 社員12 社員02 社員05 社員06  社員01 社員02
 4  確A 社員15 社員14 社員11 社員12  社員02 社員04
 5  調A 社員09 社員04 社員07 社員08  社員03 社員06  
 6  集A 社員04 社員03 社員06 社員07  社員04 社員08
 7  伝A 社員07 社員06 社員09 社員10  社員05 社員10
 8  入B 社員08 社員07 社員10 社員01  社員06 社員01
 9  確B 社員01 社員13 社員03 社員04  社員07 社員03
10  調B 社員10 社員09 社員15 社員02  社員08 社員05
11  集B 社員05 社員10 社員13 社員14  社員09 社員07
12  伝B 社員02 社員01 社員04 社員05  社員10 社員09

 
●シフト
  
     B    C    D    E    F    G   H    I    J
 1  氏名 6月6日 6月7日 6月8日 6月9日 6月10日 6月11日 6月12日 6月13日
 2 社員01   確B   伝B       入B   入A
 3 社員02   伝B   入A       調B   確A
 4 社員03       集A   確B       調A
 5 社員04   集A   調A   伝B   確B   集A
 6 社員05   集B       入A   伝B   伝A
 7 社員06       伝A   集A   入A   入B
 8 社員07   伝A   入B   調A   集A   確B
 9 社員08   入B           調A   調B
10 社員09   調A   調B   伝A       集B
11 社員10   調B   集B   入B   伝A   伝B
12 社員11           確A         
13 社員12   入A           確A     
14 社員13       確B   集B         
15 社員14       確A       集B     
16 社員15   確A       調B         

 
 
シフトシートにはあらかじめ関数を入れておきたいのですが、作業履歴の内容をシフトシートに
表示させるには関数をどのようにすればよいでしょうか?
 
=INDEX(作業履歴!B:B,SUMPRODUCT((作業履歴!B3:z100=シフト!B2)*(作業履歴!B1:Z1=シフト!J1),ROW(作業履歴!1:32)))
6/13に作業を入れるつもりでこんな式を作ってみましたがN/Aとなってしまいました。
何度も申し訳ありません。よろしくお願いいたします。

回答
投稿日時: 22/06/10 13:48:41
投稿者: んなっと

=IFERROR(INDEX(作業履歴!$B:$B,MATCH($B2,INDEX(作業履歴!$1:$500,,MATCH(C$1,作業履歴!$1:$1,0)),0)),"") 

回答
投稿日時: 22/06/10 13:59:45
投稿者: んなっと

作業履歴にも休日を入れておいて、作業履歴とシフトシートの日付を一致させておけば済む話ですよね。
 
    B   C   D   E   F   G   H   I   J   K   L
 1     6/6  6/7  6/8  6/9 6/10 6/11 6/12 6/13 6/14 6/15
 2 作業 氏名 氏名 氏名 氏名 氏名 氏名 氏名 氏名 氏名 氏名
 3  入A 員12 員02    員06 員01               
 4  確A 員15 員14    員12 員02               
 5  調A 員09 員04    員08 員03               
 6  集A 員04 員03    員07 員04               
 7  伝A 員07 員06    員10 員05               
 8  入B 員08 員07    員01 員06               
 9  確B 員01 員13    員04 員07               
10  調B 員10 員09    員02 員08               
11  集B 員05 員10    員14 員09               
12  伝B 員02 員01    員05 員10               
 
    B  C  D  E  F   G   H   I   J   K   L
 1 氏名 6/6 6/7 6/8 6/9 6/10 6/11 6/12 6/13 6/14 6/15
 2 員01 確B 伝B    入B  入A               
 3 員02 伝B 入A    調B  確A               
 4 員03    集A       調A               
 5 員04 集A 調A    確B  集A               
 6 員05 集B      伝B  伝A               
 7 員06    伝A    入A  入B               
 8 員07 伝A 入B    集A  確B               
 9 員08 入B      調A  調B               
10 員09 調A 調B       集B               
11 員10 調B 集B    伝A  伝B               
12 員11                            
13 員12 入A      確A                  
14 員13    確B                       
15 員14    確A    集B                  
16 員15 確A                          
 
なぜそれに気が付かない?

投稿日時: 22/06/10 14:08:39
投稿者: ラングドシャ

んなっと様
ありがとうございます。
なるほど、MATCHでさらに列を指定するんですね。勉強になりました。
質問に不備があったり、何度も申し訳ありません。
ありがとうございました。