【问题标题】:Excel search upwards from cell for first result meeting a criteriaExcel 从单元格向上搜索满足条件的第一个结果
【发布时间】:2021-12-27 12:08:46
【问题描述】:

好吧,我有一个奇怪的问题:

我有一家商店,出售饼干、蛋糕和葡萄酒。

我还有一份关于一天内售出哪些产品的 Excel 报告。看起来像这样:

| ID | Product Name | Quantity Sold |
| --- |--- | --- |
| Cookies| | |
| 1 |Ginderbread | 2 |
| 2 |Chocolate chip| 5 |
| 3 |Cookie type C | 1|
| Cakes | | |

从这份报告中,我的目标是得到一个如下所示的表格:

| ID | Name | Quantity Sold | Category |
| --- |--- | --- | --- |

我需要做的就是从记录上方获取类别,到记录内部。

但是,有 1 个限制:我无法手动输入类别。我必须使用一些公式来找出类别是什么。

我想到的一个想法是使用范围从第一行到当前行的 VLookup。但是很难弄清楚让它同时搜索“Cookies”、“Cakes”和“Wine”,然后返回它首先找到的那个(自下而上)

应注意,产品名称或 ID 都不是唯一键。是的,我和你一样讨厌它。

【问题讨论】:

  • 什么版本的 Excel?您可以使用 VBA 或 PowerQuery 吗?
  • @RonRosenfeld 该版本是 Office 365 中的 Excel。
  • @JvdV 那么是否可以使用 VLookup 之类的东西从当前单元格到表格顶部搜索“Cookie、Cake、Wine”并返回先出现的值?
  • 啊,我明白你的意思了。我看错了你的表。删除了我之前的评论。

标签: excel search excel-formula


【解决方案1】:

假设您的所有 ID 都是唯一的:

对于 ID 列:

=FILTER(A:A,ISNUMBER(A:A))

对于名称列: =VLOOKUP(E2,$A:$S,2)(并填写)

对于类别栏:

=LET(x,FILTER($A$1:INDEX($A:$A,MATCH(E2,$A:$A,0)),$A$2:INDEX($A:$A,1+MATCH(E2,$A:$A,0))="ID"),y,COUNTA(x),INDEX(x,y))

(并填写)

  • 返回类别
    • MATCHId 号获取最后一行要检查的第一列
    • 创建一个只返回显示 ID 的行的过滤器
    • 针对偏移一(上)的范围使用该过滤条件,这将返回仅包含类别的数组
    • 返回该数组中的最后一项

【讨论】:

  • 抱歉,ID 和产品名称不是唯一的。没想到会出现所以原本就不加了。
  • @Sargent179 如果两者都不是唯一的,我建议您开发 VBA 或 Power Query 解决方案。维护起来会容易得多。
  • 抱歉,我意识到我的目标存在误解。我只需要将类别粘贴到记录中而不是在它们之上。之后,我只是要删除“数量”列并复制/粘贴数据,然后删除“蛋糕、饼干、葡萄酒”行并仅保留 1 个标题行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2016-04-15
  • 1970-01-01
  • 2021-12-05
  • 2019-02-27
  • 1970-01-01
  • 2019-04-05
相关资源
最近更新 更多