2017-06-19 6 views
0

Stellen Sie sich vor, dass ich zwei Tabellen habe, eine mit Mietern, die in meinen Eigenschaften lebten, und eine mit den Reparaturen, die in den Eigenschaften nach dem Verlassen des Mieters durchgeführt wurden. So sehen sie aus. Tenancies:Excel: Suchen Sie den Wert innerhalb eines bestimmten Zeitraums

Property ID | Tenant ID | Start of Tenancy | End of Tenancy | Start of next tenancy 
1   | 1   | 01/01/2001  | 30/01/2001  | 15/02/2001 
1   | 2   | 15/02/2001  | 28/02/2001  | 15/03/2001 
1   | 3   | 15/03/2001  | 30/03/2001  | 15/04/2001 
2   | 4   | 15/01/2001  | 30/01/2001  | 31/01/2001 
2   | 4   | 31/01/2001  | 30/04/2001  | 05/05/2001 
2   | 5   | 05/05/2001  | 05/06/2001  | 20/06/2001 
3   | 6   | 03/05/2001  | 15/08/2001  | 30/08/2001 
3   | 7   | 30/08/2001  | 15/10/2001  | 15/11/2001 
4   | 1   | 31/01/2001  | 30/04/2001  | 15/05/2001 
4   | 8   | 15/05/2001  | 30/08/2001  | 30/09/2001 

Reparaturen:

Property ID | Repair Issued Date | 
1   | 08/03/2001   | 
1   | 10/04/2001   | 
2   | 03/05/2001   | 
2   | 15/06/2001   | 
3   | 18/08/2001   | 
4   | 10/05/2001   | 
4   | 15/09/2001   | 

Ich brauche, um herauszufinden, wer der Mieter war, bevor die Reparatur durchgeführt wurde. Daher muss ich eine "Property ID" zuordnen und, wenn "Repair Issued Date" in einen Bereich zwischen "End of Tenancy" und "Start of Next Tenancy" fällt, die "Tenant ID" zuweisen. Einfaches Beispiel, die erste Reparatur in einer Eigenschaft "1" war am 08/03/2001, die zwischen dem Bereich von void für Mieter '2' liegt, also weisen Sie die Mieter-ID der nächsten Spalte zu.

Normalerweise, wenn es nur einen Mandanten pro Eigenschaft geben würde, könnte ich eine einfache Suche durchführen, aber das kompliziert meine Situation.

Ich versuchte, mit vlookup und Datumsfunktionen herumzuspielen, konnte aber nicht den Weg finden, es zu tun.

Vielen Dank für Hilfe

Antwort

1

Sie scheinen für einen Index mit mehreren Kriterien für die passende Zeilennummer zu suchen. Die Zeilennummer kann mit AGGREGATE zurückgegeben werden, indem alles, was nicht übereinstimmt, in einen Fehlerzustand versetzt wird, während Fehler verworfen werden.

=INDEX(B:B, AGGREGATE(15, 6, ROW($1:$11)/((A$1:A$11=G2)*(D$1:D$11<=H2)*(E$1:E$11>=H2)), 1)) 

enter image description here

+0

Das ist perfekt und die Formel funktioniert genau so, wie ich brauche. Es gibt jedoch zwei Probleme. Erstens, da ich ziemlich große Datensätze (126000 Zeilen und 20000 Zeilen) habe, ist es unmöglich, dies zu skalieren. Zweitens, in einigen Fällen bekomme ich #NUM! Fehler, obwohl die Referenz korrekt ist. – Dalibor

+0

Wenn ich an 126K Zeilen arbeitete, würde ich zu VBA verschieben und vollständig in einem 2-D-Variant-Array arbeiten, die die Werte an das Arbeitsblatt * en masse * zurückgeben. Es gibt nichts, was keine merkliche Menge an Berechnungsverzögerung verursacht, wenn native Arbeitsblattformeln verwendet werden. Der '#REF!' - Fehler kommt von keiner gefundenen Übereinstimmung und kann mit einem IFERROR-Wrapper vermieden werden. Ich kann den #REF nicht weiter kommentieren! Fehler, da ich keine Daten habe, die das Problem reproduzieren. – Jeeped

2

Sie können dies mit der SUMIFS Funktion. Addiert man alle ID Mieter, die übereinstimmen, vorausgesetzt, es ist immer nur, wird in der Tenant-ID führen:

=SUMIFS(B:B,A:A,G2,D:D,"<" & H4,E:E,">" & H2) 

Wie @ Tom Sharpe vorgeschlagen, Sie für mehrere Übereinstimmungen testen konnte und ‚Fehler‘ diejenigen aus:

=IF(COUNTIFS(A:A,G2,C:C,"<" & H2,E:E,">" & H2)>1,"#MULTIPLE FOUND",SUMIFS(B:B,A:A,G2,C:C,"<" & H2,E:E,">" & H2)) 
+1

Ich denke nicht, dass das eine schlechte Idee ist. Vielleicht könnten Sie einen COUNTIFS verwenden, um zu prüfen, ob es nur einen gibt? –

+0

Dank @TomSharpe, ich habe die Antwort geändert, um diese Idee zu nutzen. – CLR

Verwandte Themen