【问题标题】:How can I create a list based on another list where a category contains specific value?如何根据类别包含特定值的另一个列表创建列表?
【发布时间】:2017-12-29 00:07:27
【问题描述】:

为了方便起见,假设我有一个 3 列 x 行的表格。 这 3 列被称为;

  • 姓名
  • 价格
  • 类型

Name 下会有一个列表,例如[苹果、香蕉、牛排、猕猴桃、意大利面]。

然后在 Price 下将是例如[2、1、5、2、3]

类型下将是[Fruit, Fruit, Meat, Fruit, Pasta]

现在我想在一个单独的地方创建一个列表,使用这个列表作为基础,然后自动更新;

  • 获取 Name 其中 Type = "Fruit"
  • 如果此列表中已存在该名称,请跳过该行并查看下一行(无重复)
  • 用户 在列表中间插入或追加内容时,将项目的顺序更新到我们正在读取的列表中。 (保持秩序)
  • [可选] 在列中按顺序打印这些,并在其旁边的单元格中(下一列)对应的价格

最后一个是可选的,因为我当然可以将 Name 替换为 Price 其中 Type = Fruit,并获得想要的结果。

但是我不知道该怎么做。目前我有;

=INDEX($A$2:$A$100,MATCH("Fruit", $C$2:$C$100,0),1)

然而,这只会返回数组中第一次出现的 MATCH。

简单地把它变成这样;

=INDEX(A2:A100,MATCH("GAME", C2:C100,0),1)

会重复。

此外,这两行都没有给出附加的价格

我也一直在玩,试图制作我自己的功能,但我真的刚刚进入它,所以我不太确定我在做什么,甚至应该做什么。

TL;DR 我想在第一组的基础上自动制作右侧的 2 组,如下图所示:

【问题讨论】:

  • 所以您想使用公式复制 Excel 的过滤功能?
  • 据我所知,过滤器只是调整选定区域的排列。我没有发现任何关于使用过滤器删除数据,让它重新排序项目(因此行之间没有空格)并自动执行此操作。

标签: excel vba


【解决方案1】:

在单元格 E3 中使用以下公式:

=IFERROR(INDEX($A$2:$A$10,SMALL(IF($C$2:$C$10=E$1,ROW($C$2:$C$10)-MIN(ROW($C$2:$C$10))+1),ROW()-2)),"")

作为数组公式输入(退出单元格编辑模式时按Ctrl+Shift+Enter)。 see here for formula explanation

根据需要运行尽可能多的行并将$10 行限制更改为所需的行数。

F3 是一个简单的 vlookup:=IFERROR(VLOOKUP(E3,$A:$B,2,0),"")

向下拖动并相应地复制到 H 列和 I 列。

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 2015-12-02
    • 2022-01-06
    • 2018-06-20
    • 2015-05-28
    • 2021-06-10
    相关资源
    最近更新 更多