
我真的很難找到解決這個看似簡單的問題的方法。我甚至尋求了 ChatGPT 的幫助,但它的解決方案都不起作用。也許你可以證明你比機器更聰明(目前)?
我正在搜尋相鄰的工作表和外部工作簿,有時有數萬行,所以我發現我需要比LOOKUP
or更快的東西VLOOKUP
,否則事情就會停止。但是,我使用的是 LibreOffice 7.4,因此不支援動態數組公式和一些較新的 Excel 函數,例如XLOOKUP
、FILTER
、 和。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)