• 締切済み

エクセル 数式おしえてください!

数式がわからないので教えてください。 店舗のシフト作成に使いたいと思っています。 エクセルシート 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シフトは 小林 鈴木・・ と表示できるようになるでしょうか・・・  よろしくお願いいたします。。

みんなの回答

回答No.4

下記のシートを用意します。 エクセルシート  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)
回答No.3

こんにちは。 レイアウトです。 場所を移すときは、一旦、貼り付けてから、ドラッグして移すとやりやすいです。    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)
回答No.2

関数でやるのは非常に複雑で難しい問題だ。難しいことを知らないで質問しているのだろうが。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・・あるかもしれない シフト種類だけ横行を使うので、日が変わる場合に、うまく式に取り入れることが難しい(日が変わると、式をいじくる必要がある=複写では複雑化してやりにくい)

noname#262398
noname#262398
回答No.1

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」は社員名の最後のセルだとしています。 数式が長くなるのでエラー処理してません。

関連するQ&A