2017-03-29 9 views
1

私はIDと取引日だけのrawdataを持っています。それから私は人々のリストを持っています。彼らのID、雇用日とその名前。人名と一致する日付とIDのみからの名前を取得

私が望むのは、私に人名を与えるrawdataの列です。問題は、IDが終了した場合にIDが再利用され、別のIDが開始された場合です。

私は取引日を持っているので、私はそれをチェックすることが可能でなければなりません図:

トランザクションは、それらが雇用された期間と一致した場合は、右の名前を取得します。

これは可能ですか?

Rawdata: 
Column A = Transaction date 
Column B = ID 
Column C = Here I want their name 


People list: 
Column A = ID 
Column B = Name 
Column C = Hire date 

例(エクセルオンライン - 編集することができます): https://1drv.ms/x/s!AjWVkb2UBexjhzAKMy-YiE5EoKwc

スクリーンショット:enter image description here

+2

まず第一に、睡眠や人員IDSを再利用しないで、あなたの上司に伝えて行くためにあなたのコンピュータを置きます!他に何もなければ、その人が仕事に戻るかもしれないチャンスがあるだけでなく、このプラクティスを間違ったものにする無数の他の要因があります。このユニバースには、新入社員が一意のIDを持つことができる十分な数があります。タイムカードの履歴の識別を考えてください。 – Jeeped

+0

うわー..この特定のシート以外にも、私の会社は小さな会社なのでIDの再利用は実用的な問題です。彼らはライセンスに関連しています - 私は誰かを雇うたびに新しいライセンスを得ることができません。 –

+1

ライセンスが会社内で譲渡できない場合、別の従業員にエイリアス(例:従業員ID)の下でそれらを使用させることにより、法律を破る可能性があります。 – Jeeped

答えて

1

私はあなたのテーブルに名前をつけなければならなかったRaw_Data数式に構造化テーブル参照を使用する。さらに、いくつかのデータを追加し、いくつかの日付を変更しました。

=INDEX(People[Agent Name], AGGREGATE(15,6, (ROW(People[Personal ID])-ROW(People[[#Headers],[Agent Name]]))/((People[Personal ID]=[@[Personal ID]])*(People[Hire date]=AGGREGATE(14, 6, (People[Hire date])/((People[Personal ID]=[@[Personal ID]])*(People[Hire date]<=[@[Transaction date]])), 1))), 1)) 

enter image description here

+0

本当にありがとうございます! –

2

すると、あなたの参照テーブルは、時系列順に並べられていることを確認してください最古の最新:

=INDEX(F:F,AGGREGATE(14,6,ROW($G$8:INDEX(G:G,MATCH(1E+99,E:E)))/(($E$8:INDEX(E:E,MATCH(1E+99,E:E))=B8)*($G$8:INDEX(G:G,MATCH(1E+99,E:E))<A8)),1)) 

enter image description here

+0

私はPeopleデータをソートし、正しい結果を得るために内部集計を使用しなければなりませんでした。 – Jeeped

+0

@ジープ私は、私はそれを深くしたい、またはそうする時間がかかることを見ていないことを見た。 –

関連する問題