不遲於給定日期快速找到最新的非空白值

不遲於給定日期快速找到最新的非空白值

我真的很難找到解決這個看似簡單的問題的方法。我甚至尋求了 ChatGPT 的幫助,但它的解決方案都不起作用。也許你可以證明你比機器更聰明(目前)?

我正在搜尋相鄰的工作表和外部工作簿,有時有數萬行,所以我發現我需要比LOOKUPor更快的東西VLOOKUP,否則事情就會停止。但是,我使用的是 LibreOffice 7.4,因此不支援動態數組公式和一些較新的 Excel 函數,例如XLOOKUPFILTER、 和。SORT

A 列包含依升序或降序排列的日期清單。 B 列包含未排序的數字和空白儲存格。

A
23年1月5日 1234.10
23年2月5日 134.25
05/05/23 5123.45
23年8月5日
10/05/23 0.00

A 需要一個非 CPU 密集型公式來尋找 B 列中的最新非空白值(包括零),其中查找值是不晚於 cell 中的日期$Z1。我嘗試過LOOKUP(2,1/INDEX MATCH、的變體VLOOKUP,但要么得到全零、錯誤,要么得到 B 列中的第一個或最後一個值,忽略日期。

有任何想法嗎?我開始懷疑 LibreOffice 是否有問題。這不是我第一次必須重新安裝它才能讓它開始正常工作。

編輯:到目前為止我嘗試過的公式列表:

{=INDEX($B$2:$B$9999,MAX(IF($A$2:$A$9999<=$Z1,ROW($A$2:$A$9999)-MIN(ROW($A$2:$A$9999))+1)))}

它返回值 0。

=LOOKUP(2,1/($A$2:$A$9999<=$Z1),$B$2:$B$9999)

它傳回一個空字串。我之前使用過這個的不同版本:

=LOOKUP(2,1/($Z1>=$A$2:$A$9999)/$B$2:$B$9999,$B$2:$B$9999)

它可以工作,但它不支援值為 0 的儲存格。

{=MAX(IF($A$2:$A$9999<=$Z1, $B$2:$B$9999, ""))}

不知何故,這個返回 B 列中的第三個值,而不是最後一個 - 無論單元格 $Z1 中的日期如何。

{=OFFSET($'Savings chart'.$B$2,MAX(IF($'Savings chart'.$A$2:$A$9999<=$A38,ROW($'Savings chart'.$A$2:$A$9999)-ROW($A$2)+1,0))-1,0)}

此指令查看儲存格 $B$9998 並傳回值 0,而不是查看最後一個非空白儲存格。

{=INDIRECT("'Sheet 2'.B"&SUMPRODUCT(MAX(('Sheet 2'.A:A<=$Z1)*ROW('Sheet 2'.A:A))))}

這個回傳值是 0。

{=INDEX('Sheet 2'.B:B, MAX(IF('Sheet 2'.A:A<=$Z1, ROW('Sheet 2'.A:A))))}

這個回傳值是 0。

{=INDEX($B$2:$B$9999,MAX(IF($A2:$A$9999<=$Z1,ROW($B$2:$B$9999)-MIN(ROW($B$2:$B$9999))+1)))}

這個回傳值是 0。

{=OFFSET('Savings chart'.$B$1, MAX(IF('Savings chart'.$B$2:$B$9999<>"", ROW('Savings chart'.$B$2:$B$9999)-ROW('Savings chart'.$B$2)+1, 0))-1, 0)}

有點令人驚訝的是,這個返回 B 列中最後一個值。

{=INDEX($B$2:$B$9999, MAX(IF($B$2:$B$9999<>"", ROW($B$2:$B$9999)-ROW($B$2)+1, 0)))}

傳回最後一個非空白儲存格的值在 B 列中,但我無法弄清楚如何讓它考慮 $Z1 中的日期。 (正如你可能知道的那樣,我在做這件事時非常累。)

=INDEX($B$2:$B$9999, MATCH(2, 1/($A$2:$A$9999<=$Z1), 1))

此指令查看儲存格 $B$9998 並傳回值 0。

=IF($A5>=$'Savings chart'.$A$2:$A$9999,LOOKUP(9.999999E+306,$'Savings chart'.$B$2:$B$9999),0)

無論儲存格 $Z1 中的日期是什麼,該儲存格始終會傳回 B 列中的最後一個非空白儲存格。

=XLOOKUP($'Savings chart'.$A$2:$B$9999,($A2>=$'Savings chart'.$A$2:$A$9999)*($'Savings chart'.$B$2:$B$9999<>""),$'Savings chart'.$B$2:$B$9999)

安裝後Goosepirate 的 Lox365 擴展,我嘗試使用這個公式XLOOKUP。它產生了一個錯誤代碼 Err:504。至此,我放棄了,上床睡覺了。

這是我一直在使用的數據範例:

Date    Data
1 Jan 23    490.44
1 Jan 23    
1 Jan 23    
2 Jan 23    
3 Jan 23    
4 Jan 23    
4 Jan 23    
5 Jan 23    
6 Jan 23    
7 Jan 23    
8 Jan 23    
9 Jan 23    
11 Jan 23   
11 Jan 23   
11 Jan 23   
11 Jan 23   
11 Jan 23   
12 Jan 23   
12 Jan 23   
13 Jan 23   
14 Jan 23   
16 Jan 23   
16 Jan 23   
17 Jan 23   
18 Jan 23   
18 Jan 23   
19 Jan 23   
20 Jan 23   493.44
21 Jan 23   
21 Jan 23   
22 Jan 23   
22 Jan 23   
23 Jan 23   499.44
24 Jan 23   
24 Jan 23   
24 Jan 23   
24 Jan 23   
25 Jan 23   484.81
25 Jan 23   
25 Jan 23   
25 Jan 23   
25 Jan 23   
25 Jan 23   
26 Jan 23   
26 Jan 23   
26 Jan 23   
27 Jan 23   
27 Jan 23   
27 Jan 23   
28 Jan 23   
29 Jan 23   
31 Jan 23   
31 Jan 23   
1 Feb 23    
1 Feb 23    
1 Feb 23    
3 Feb 23    
3 Feb 23    
4 Feb 23    
5 Feb 23    
5 Feb 23    
5 Feb 23    
6 Feb 23    
6 Feb 23    
6 Feb 23    
6 Feb 23    
6 Feb 23    
7 Feb 23    
7 Feb 23    
7 Feb 23    
7 Feb 23    
8 Feb 23    
8 Feb 23    
9 Feb 23    
9 Feb 23    
9 Feb 23    
10 Feb 23   
10 Feb 23   
10 Feb 23   
10 Feb 23   
10 Feb 23   
10 Feb 23   
10 Feb 23   
10 Feb 23   
11 Feb 23   
11 Feb 23   
11 Feb 23   
11 Feb 23   
11 Feb 23   
12 Feb 23   
12 Feb 23   
12 Feb 23   
13 Feb 23   
13 Feb 23   
13 Feb 23   
13 Feb 23   
14 Feb 23   
15 Feb 23   
15 Feb 23   
16 Feb 23   
16 Feb 23   
17 Feb 23   
17 Feb 23   
17 Feb 23   
17 Feb 23   
17 Feb 23   
17 Feb 23   
17 Feb 23   
18 Feb 23   
18 Feb 23   
19 Feb 23   
20 Feb 23   487.81
20 Feb 23   
20 Feb 23   
20 Feb 23   
21 Feb 23   
21 Feb 23   
22 Feb 23   
22 Feb 23   
22 Feb 23   
22 Feb 23   
23 Feb 23   493.81
24 Feb 23   477.81

答案1

我開始的公式是:
=LOOKUP(2,1/($A2>='Sheet 1'.$A$2:$A$10000)/$'Sheet 1'.B$2:B$10000,$'Sheet 1'.B$2:B$10000)

我能夠透過添加“非空白”過濾器來獲得我需要的結果,如下所示:
=LOOKUP(2,1/($A2>='Sheet 1'.$A$2:$A$10000)/($'Sheet 1'.B$2:B$10000<>""),$'Sheet 1'.B$2:B$10000)

相關內容