• ベストアンサー

入力順に別のシートに反映させたい

http://okwave.jp/qa1701922.html の解答例に習いアルバイトの申込者名簿を作成しました。 採用を入力したときに採用番号が表示され、職種別のシートに反映されるようにしました。 ただ、採用の合否については順番が異なるため採用番号が入れ替わってしまいます。    A   B   C 1 氏名 職種 採用 2 山口 事務 採用 3 山本 営業 採用 4 木下 事務 未決定 5 山下 事務 採用 事務のシートに2と5の行が反映された場合2は採用番号1、5は採用番号2とでます。 しかし4の合否が後日決定した場合、採用番号2と表示され、5が採用番号3と表示され番号が入れ替わってしまいます。 どうにかして4を採用番号3と表示する方法はないのでしょうか?  フィルタをかけてコピペしたほうが早いのでしょうか? 質問が分かりにくかったらすいません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

現在の表の形式のまま、別シートのA1セルに入力した職種コードの「採用」データをI列の決定日順に並べ替えて表示するなら、受付簿シートのA2セルに以下の式を入力し下方向にオートフィルします。 =I2+ROW(A2)*0.00001 A1セルに職種コードが入力してある別シートのA2セルに以下の式を入力して下方向にオートフィルすれば、それ以外の数式の変更はなくても該当データを表示できます。 =SMALL(INDEX(NOT((受付簿!$F$2:$F$¥100=$A$1)*(受付簿!$G$2:$G$100="採用"))*1000000+受付簿!$A$2:$A$100,),ROW(A1)) 上記の数式は配列数式で多用すると数式が重くなるので、エラー処理は特にしていませんが、該当データの個数をカウントし、それを超える場合はIF関数で空白表示するなどの処理をすることも可能です。

ouren
質問者

お礼

今日会社で上記のとおり入力しました。 見事にできました。 長い間丁寧に教えてくださり、本当にありがとうございました。

その他の回答 (4)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

>Fには事務、営業などの職種コードをつくりsheet2 A1にコード番号を入れておくことで各職種のシートに飛ぶようにしています。 最初の質問の例では、「採用」のデータの順番を提示するようにしたいという質問のようですが、上記の提示した受付簿シートのデータから抽出されるデータは、職種コードの一致するデータの一覧を作成しているように見えますが、間違いないでしょうか? もし間違いないなら、具体的にどのようなリストを作成したいのかもう一度明確にしてください(「たとえば、合否が「採用」のデータで日付の古い順に並べる」など)

ouren
質問者

補足

何度もありがとうございます。 sheet1に受付簿、sheet2、sheet3に職種別の一覧を作成していますが、sheet2、sheet3(各職種のシート)への表示順を合否が「採用」のデータで日付の古い順に並べる」に表示したいと考えております。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>しかし4の合否が後日決定した場合、採用番号2と表示され、5が採用番号3と>表示され番号が入れ替わってしまいます。 >どうにかして4を採用番号3と表示する方法はないのでしょうか?  基本的に、合否の決定日がシートに入力されていないとエクセルでは自動的に前後を判定できません。 例示のデータで対応するなら、D列(実際はA列に補助列を使用しているならE列)に合否が決定した日付を入力しておき、補助列のA2セルには以下の式を入力します(「事務」や「採用」の部分は必要に応じてセル参照します)。 =IF(C2&D2="事務"&"採用",E2-ROW(A2)*0.00001,"") 結果を表示するセルには以下のような式を入力し、右方向および下方向にオートフィルコピーします。 =IF(COUNT(Sheet1!$A$2:$A$100)<ROW(A1),"",INDEX(Sheet1!B:B,MATCH(SMALL(Sheet1!$A$2:$A$100,ROW(A1)),Sheet1!$A:$A,0))) 上記の方法で希望の表示ができないような場合は、現在、実際に補助列および表示用シートに入力している数式を提示してください。

ouren
質問者

補足

解答ありがとうございます。 sheet1には  A  B   C D  E  F    G  H    I 1  受付番号 姓 名 職種 職種コード 合否 採用番号 決定日 2 3 sheet1 A2=F2&TEXT(COUNTIF($F$2:$F2,$F2),"0") sheet2 A2=$A$1&TEXT(ROW()-1,"0") sheet2 B2=VLOOKUP($A2,受付簿!$A$2:$I$29,COLUMN(),FALSE) と入っています。 Fには事務、営業などの職種コードをつくりsheet2 A1にコード番号を入れておくことで各職種のシートに飛ぶようにしています。 しかし、採用決定日時が前後することで採用番号が入れ替わってしまいます。採用者には通知書に番号も転記するため番号が変わってしまうという結果になってしまいます。 MackyNo1さんの関数を試してますが、わからなくなってしまいましたので、捕捉します。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

採用が決定したときの時間の情報が必要です。    A   B   C 1 氏名 職種 決定日時 2 山口 事務 09/11/20 3 山本 営業 09/11/21 4 木下 事務  5 山下 事務 09/11/24 ・・・と入力しては如何でしょうか。 D列には =IF(C2="","","採用番号"&RANK(C2,C:C,1)) とかで表示できます。

noname#99913
noname#99913
回答No.1

C列を「採用」の文字ではなく、採用決定日時にしたらどうでしょう。そうすればRANK関数で決定順に番号を付けられます。時刻まで見えるのがいやなら、セルの書式で月日だけの表示にします。 ちなみに、その時の日時は、 日付は、Ctrl+; 時刻は、Ctrl+: で簡単に入力できます。

関連するQ&A

専門家に質問してみよう