- 締切済み
エクセル 数式おしえてください!
数式がわからないので教えてください。 店舗のシフト作成に使いたいと思っています。 エクセルシート A B C D E 1 小林 田中 鈴木 森 2 1 A B A B 3 2 B A A A 4 3 A B A A (ちょっとずれてますが・・) A列には日付、 1行目には社員名称が入っている、と考えてください。 別のシートでも同シートの別箇所でもいいのですが、 【○日の△シフトの社員は誰か】 ・・というのを表示できる数式はあるでしょうか??? 例:1日のAシフトは 小林 鈴木・・ と表示できるようになるでしょうか・・・ よろしくお願いいたします。。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- panther712
- ベストアンサー率18% (2/11)
下記のシートを用意します。 エクセルシート A B C D E F G 1 小林 田中 鈴木 森 Aシフト Bシフト 2 1 A B A B 数式1 数式2 3 2 B A A A 4 3 A B A A 数式1に =CONCATENATE(IF(B2="A",B$1&",",""),IF(C2="A",C$1&",",""),IF(D$2="A",D$1&",",""),IF(E2="A",E$1&",","")) 数式2に =CONCATENATE(IF(B2="B",B$1&",",""),IF(C2="B",C$1&",",""),IF(D$2="B",D$1&",",""),IF(E2="B",E$1&",","")) と入れて、あとはF1とG1をオートフィルでドラッグしてください。 それぞれの人の最後に『,』が付いてしまうのが欠点ですが・・・。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 レイアウトです。 場所を移すときは、一旦、貼り付けてから、ドラッグして移すとやりやすいです。 G H I 1 日付 1 小林 2 シフト A 鈴木 入力は、H1, H2 です。 数式です。 I1 から、オートフィルで、下に適当にドラッグしてください。 =IF(COUNTIF(OFFSET($B$1:$E$1,$H$1,),$H$2)>=ROW(A1),INDEX($B$1:$E$1,,SMALL(INDEX(COLUMN($A$1:$D$1)*(OFFSET($B$1:$E$1,$H$1,)=$H$2),,),COUNTIF(OFFSET($B$1:$E$1,$H$1,),"<>"&$H$2)+ROW(A1))),"")
- imogasi
- ベストアンサー率27% (4737/17069)
関数でやるのは非常に複雑で難しい問題だ。難しいことを知らないで質問しているのだろうが。VBAででも処理しないと一般化は難しい。 抜き出し問題は関数では難しいのです。 横行にデータが流れる表を対象に処理するのもエクセルは苦手(フィルタなど使えない)。 ーー 例データ 小林 田中 鈴木 森 武田 2007/12/15 A B A B A 2007/12/16 B A A A 2007/12/17 A B A A ーー ユーザー関数 ある値を探すが、第何番目の分か、を指定して探す関数。 =fnd(探すセル範囲,値、何番目) Function fnd(a, b, n) Dim cl As Range K = 0 For Each cl In a If cl = b Then K = K + 1 If n = K Then fnd = cl.Column Exit Function End If End If Next End Function -- 例えばG2にA、G3にBを入れる。 H2に =INDEX($A$1:$X$1,1,fnd($B$2:$F$2,$G2,COLUMN()-7)) と入れる。-7はH列から始まるのでG列の列番号7を引いて1にしている。 これをJ2まで横方向に式を複写 H2:J2を縦方向に式複写 結果 A 小林 鈴木 武田 B 田中 森 0 0を空白にする式はIF関数を使って追加して書いてください。ここでは省略。 さらに難しさを加えるのは シフト種類がC,D・・あるかもしれない シフト種類だけ横行を使うので、日が変わる場合に、うまく式に取り入れることが難しい(日が変わると、式をいじくる必要がある=複写では複雑化してやりにくい)
A列の日付が1~31の数字なら、 A B C D E F G H I 1 小林 田中 鈴木 森 1 小林 1 2 1 A B A B A 鈴木 3 3 2 B A A A #REF! #REF! 4 3 A B A A ○日の「○」をG1セルに入力 △シフトの「△」をG2セルに入力 H列に社員名を表示、I列は作業列 I1=MATCH(H1,$B$1:$E$1,0) I2セル以降、下へコピー。 H1=INDEX($B$1:$E$1,,MATCH($G$2,OFFSET($B$1:$E$1,$G$1,0),0)) H2=INDEX(OFFSET($B$1,0,I1):$E$1,,MATCH($G$2,OFFSET($B$1,$G$1,I1):OFFSET($E$1,$G$1,I1),0)) H3セル以降、下へコピー。 数式中の「$B$1」は社員名の最初のセルで、 「$E$1」は社員名の最後のセルだとしています。 数式が長くなるのでエラー処理してません。