我真的很难找到解决这个看似简单的问题的方法。我甚至寻求了 ChatGPT 的帮助,但它的解决方案都不起作用。也许你可以证明你比机器更聪明(目前)?
我正在搜索相邻的工作表和外部工作簿,有时这些工作表和外部工作簿有数万行,所以我发现我需要比LOOKUP
或更快的程序,否则事情就会停滞不前。但是,我使用的是 LibreOffice 7.4,因此不支持VLOOKUP
动态数组公式和一些较新的 Excel 函数,例如XLOOKUP
、FILTER
和。SORT
A 列包含按升序或降序排列的日期列表。B 列包含未排序的数字和空白单元格。
A | 乙 |
---|---|
01/05/23 | 1234.10 |
02/05/23 | 134.25 |
05/05/23 | 5123.45 |
08/05/23 | |
10/05/23 | 0.00 |
需要一个非 CPU 密集型公式来查找 B 列中最新的非空白值(包括零),其中查找值是不晚于单元格中的日期的日期$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。我认为它正在查找单元格 $B$9998,而不是最后一个非空白单元格 $B$124。
=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)