查找最后一条記錄

kgd0206 2008-04-28 11:19:50
进仓日期A 编码B 名称C 数量D 编码E 数量F
08-01-03 A-11 电视 2000 A-11 ???
08-02-11 A-23 电吹风 550
08-02-28 A-28 冰箱 1205
08-04-15 A-11 电视 1380
08-04-20 A-35 手机 666
08-04-25 A-11 电视 636

在F2单元格输入:=vlookup(e2,b1:d7,3,false)可查找左边数据中符合条件的第一条記錄,

请问:如何在F2单元格输入公式可查找符合条件的最后一条記錄
...全文
160 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgd0206 2008-04-30
  • 打赏
  • 举报
回复
數組法:
為什麼選取的範圍是從第一單元格開始,從第二單元格開始就不行了?
=INDEX(D$2:D$8,MAX((B$2:B$8=E2)*ROW($1:$8)))
若查找的不是最後一次,而是最後二次,在MAX後-1不行啊,應如何解決??

輔助列法:
在輔助列法中的F列增加查找A-22,A-28,
原公式=VLOOKUP(MAX(D:D),D:E,2,FALSE)應如何改變,使其查找條件懣足MAX(D:D)且等于A-22或A-28

zipall 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kgd0206 的回复:]
高手:
我试用不行呀,请指点
[/Quote]
具体错误是什么?

如果F2得到的结果是"数量D",说明你没有按数组公式的方法输入数组公式。
如果以数组公式的方法输入公式了,但是F3得到的结果是"数量D",是因为你给出的表中B列没有a-22,所以index(range,0)会返回整个range,但是在单元格中只会显示第一个。
如果双击填充柄没有在F列填充公式,那么说明你E列的数据只有1个或者数据不连续。
如果是其他问题,请跟帖说明具体情况。
zipall 2008-04-30
  • 打赏
  • 举报
回复
问题1:
b2:b8=e2返回一组由 true和false组成的数组,在做四则运算时true=1,false=0。换句话说它返回一组由1和0构成的数组。
row(1:7)则返回1,2,3...7这样一个数组
两个数组相乘,对应元素相乘,这样就得到一组由0和满足查询条件的行号构成的数组。
max可以取到最大值。如果要取第二大的值,我们可以用large函数,具体用法请参考帮助文件。
=index(d2:d7,large((b2:b7=e2)*row(1:6),2))

问题2:
这个辅助列法不适用与你后来的问题。

kgd0206 2008-04-30
  • 打赏
  • 举报
回复
领悟了,谢谢
还有两个不懂的?

若查找的不是最後一次,而是最後二次,在MAX後-1不行啊,應如何解決??

輔助列法:
在輔助列法中的F列增加查找A-22,A-28,
原公式=VLOOKUP(MAX(D:D),D:E,2,FALSE)應如何改變,使其查找條件懣足MAX(D:D)且等于A-22或A-28 ???

zipall 2008-04-30
  • 打赏
  • 举报
回复
因为B2:B8是7个元素,而row(1:8)是8个元素;这样的2组数做乘法运算时会返回一个错误值。
最后一个参数改为1:7就对了。

BTW:选中公式中 (B$2:B$8=E2)*ROW($1:$8) 部分,按下F9就可以看到中间计算结果,第8个元素的值为#N/A,对包含错误值的数组取MAX当然会出错。

baiyu20122 2008-04-29
  • 打赏
  • 举报
回复
to zipall

公式=index(d2:d7,max((b2:b7=e2)*row(1:6)))
思路很巧妙,学习了。
kgd0206 2008-04-29
  • 打赏
  • 举报
回复
高手:
我试用不行呀,请指点
zipall 2008-04-29
  • 打赏
  • 举报
回复
F2
=index(d$1:d$1000,max((b$1:b$1000=e2)*row($1:$1000)))
PS:仍旧是数组公式;输入后双击填充柄;1000是根据数据源大小确定。在保证包含所有数据的情况下,这个数字越小公式运算速度越快。
kgd0206 2008-04-29
  • 打赏
  • 举报
回复
谢四楼指点。



補充:
进仓日期A 编码B 名称C 数量D 编码E 数量F
08-01-03 A-11 电视 2000 A-11 ???
08-02-11 A-23 电吹风 550 A-22 ???
08-02-28 A-28 冰箱 1205 A-35 ???
08-04-15 A-11 电视 1380
08-04-20 A-35 手机 666
08-04-25 A-11 电视 636

最终目标:
在编码E列增加查找 a-22和a-28a或更多的查找条件,就如何解决?
gracexu 2008-04-28
  • 打赏
  • 举报
回复
我想知道你查找最后一条记录的意义,比如是不是时间最后的就出现在最后,那样的话你可以把时间也作为条件加上去。
如果你不能保证你要查找的一定出现在最后,还不如用筛选把所有某个编码的全部显示出来。
zipall 2008-04-28
  • 打赏
  • 举报
回复
汗~~~看着屏幕输公式还真容易出错

[Quote=引用 4 楼 zipall 的回复:]
...
=countif(c$1:c1,f$2)
...
[/Quote]

C应该改为B
zipall 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zipall 的回复:]
...
F2输入公式
...
[/Quote]

更正:因为D列前插入一列,这里应该是G2
zipall 2008-04-28
  • 打赏
  • 举报
回复
公式的话,可以用数组公式或者辅助列解决。

数组公式法:
=index(d2:d7,max((b2:b7=e2)*row(1:6)))
PS:数组公式输入后按ctrl+shift+enter完成

辅助列法:
D列前插入一列
D2输入公式
=countif(c$1:c1,f$2) 双击填充柄
F2输入公式
=vlookup(max(d:d),d:e,2,0)
baiyu20122 2008-04-28
  • 打赏
  • 举报
回复
如果不想用宏,可以用你现有的公式。
选中前4列(A,B,C,D),以A列为关键字,降序排序,F2就是最后一条记录636。
zabaglione 2008-04-28
  • 打赏
  • 举报
回复
建议你还是用宏来作吧

6,210

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office应用
社区管理员
  • Microsoft Office应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧