根據您的名單我已經添加了額外的記錄,以測試公式如下所示:
Pers_ID Department_ID Start_Date
1001 01 2012-01-01
1001 02 2013-05-01
1001 05 2015-08-01
1002 02 2012-05-01
1002 04 2013-01-01
1003 01 2016-01-01
Selection criteria
Person: 1002
Date: 2016-03-06
Intermediate Results
Begin: <First formula below>
End: <Second formula below>
Results
Dept. <The last formula goes here>
以下假設作了:
- 你有你的數據庫的排序條件爲
Pers_ID
- 表格標題位於單元格位置
A1
(因此,您的數據始於第2行)
- 您在兩個字段中編寫您的選擇標準
B10
和B11
區分不同Pers_ID
的,我們首先要知道多條記錄的specifc Pers_ID
在你的數據源,並在哪個位置。由於數據是通過Pers_ID
排序我們只需搜索occurence的第一行:
MATCH(B10;A2:A7;0) // will return 4 as it's the 4th line in the range A2:A7
和計數的頻率指定Pers_ID
發生:
COUNTIF(A2:A7;B10) // will return 2
爲了簡化所得式我們可以在「高速緩存」結果在單元格B14
和B15
。
之後,我們可以使用OFFSET()
函數創建一個範圍。我們從數據集的開始處開始,根據我們的計算將範圍向下移動。請注意0,因爲如果所需的Pers_ID
位於第一行(因此指定偏移量爲0),我們不必移動範圍。隨着COUNTIF
結果我們指定的範圍內的高度:
OFFSET(B2;MATCH(B9;A2:A7;0)-1;0;COUNTIF(A2:A7;B9)) // without "cache"
OFFSET(B2;B14-1;0;B15) // with "cache"
OFFSET(B2;4-1;0;2) // partially evaluated
他們都返回B5:B6作爲部門範圍Pers_ID = 1002
要選擇的範圍內適當配合INDEX()
包裹公式:
INDEX(OFFSET(B2;B14-1;0;B15);<Row>;<Column>)
選擇<Column>
很容易。因爲我們沒有在OFFSET()
式中指定寬度的範圍僅爲1列寬,因此,選擇該列將是1:
INDEX(OFFSET(B2;B14-1;0;B15);<Row>;1)
的<Row>
是有點麻煩。我們需要在列C
中指定日期範圍,其高度與我們對Pers_ID
的範圍所做的相同。 我們主要使用與現在相同的公式,但我們不想搜索B11
中的指定日期,但最近的一個(意指確切日期或更早)。爲此,我們使用SMALL()
...
SMALL(OFFSET(C2;B14-1;0;B15);COUNTIF(OFFSET(C2;B14-1;0;B15);"<="&B11)) // returns 2013-01-01 (in fact it returns 41275 which is the 1st March 2013)
...,並確定該範圍中的行數與包圍MATCH()
:
MATCH(SMALL(OFFSET(C2;B14-1;0;B15);COUNTIF(OFFSET(C2;B14-1;0;B15);"<="&B11));OFFSET(C2;B14-1;0;B15);0) // returns 2
整個配方則是:
// Without "cache"
=INDEX(OFFSET(B2;MATCH(B10;A2:A7;0)-1;0;COUNTIF(A2:A7;B10));MATCH(SMALL(OFFSET(C2;MATCH(B10;A2:A7;0)-1;0;COUNTIF(A2:A7;B10));COUNTIF(OFFSET(C2;MATCH(B10;A2:A7;0)-1;0;COUNTIF(A2:A7;B10));"<="&B11));OFFSET(C2;MATCH(B10;A2:A7;0)-1;0;COUNTIF(A2:A7;B10));0);1)
// With "cache"
=INDEX(OFFSET(B2;B14-1;0;B15);MATCH(SMALL(OFFSET(C2;B14-1;0;B15);COUNTIF(OFFSET(C2;B14-1;0;B15);"<="&B11));OFFSET(C2;B14-1;0;B15);0);1)
也許有一個更簡單/更乾淨的方式來實現這一點(例如,我不熟悉的數組公式或VBA)。
是你的日期*** yyyy-mm-dd ***或*** yyyy-dd-mm *** ?? –
在excel中更易於使用我的確將大部分日期轉換爲yyyy-mm格式(不再有日期)。該列中的日期是「datetime」sql服務器列。所以yyyy-mm-dd +時間。 – Christian