【问题标题】:MS Excel: List all cell values that meet a certain criteriaMS Excel:列出满足特定条件的所有单元格值
【发布时间】:2016-07-26 01:47:46
【问题描述】:

我有一些带有相互引用的交易编号的工作表。我需要一个公式,为每笔交易列出与之相关的其他交易。每个交易编号都有一个四字母代码(例如 EXPE 表示费用,TRAV 表示旅行等),然后是一个三位数字。这是交易标识符,每个交易都有一个唯一的标识符,例如。 EXPE-001、TRAV-010 等。每个事务都可以连接到其他事务。因此,例如,如果某项费用与某次旅行有关,则 EXPE-001 可以连接到 TRAV-010。

我的数据如下表所示。相关交易列是我将列出与特定交易相关的所有交易的地方,而其他交易#s 列是 Excel 将输入与该特定交易相关的所有其他交易的地方。 Other Transaction #s 列中的单元格是我需要 Excel 为我自动填充的单元格。

在费用工作表中,

Trans. #   Date         Cost    Related Transactions   Other Transaction #s
EXPE-001   2016-07-10   $1.12   TRAV-010               ____, ____, ____
EXPE-002   2016-07-10   $18.41  TRAV-010               ____, ____, ____
EXPE-003   2016-07-10   $7.80   TRAV-010               ____, ____, ____

在旅行工作表中,

Trans. #   Date         Cost    Related Transactions   Other Transaction #s
TRAV-001   2016-07-10   $180.01 EXPE-001, EXPE-002     ____, ____, ____
TRAV-002   2016-07-10   $31.16  EXPE-002, EXPE-003     ____, ____, ____
TRAV-003   2016-07-10   $190.49 EXPE-003               ____, ____, ____

如您所见,每笔交易都可以在任意数量的其他交易中被引用,而每笔交易也可以在任意数量的其他交易中被引用。就像一张大网。更令人困惑的是 Trans. # 实际上存储为一个数字,例如。 1, 2, 3,并且仅通过其代码和适当数量的前导 0 显示。

我知道如何获取号码、添加交易代码并用零填充。我使用TEXT(例如,"*EXPE-"&TEXT(A12, "000"&"*" 带有星号通配符,以便子字符串可以出现在单元格中的任何位置)。

无论如何,我一直在使用MATCH 函数来获取一系列行中特定字符串的行号。我也一直在玩INDEXIFSMALL 函数。但这太令人困惑了,部分原因是我认为涉及到这么多函数,以及试图使其成为一个数组函数(通过按 CTRL+SHIFT+ENTER),以便 Excel 列出多个范围内的多行。到目前为止,我的所有尝试都让我得到了 #REF!、#N/A、#VALUE 或来自 Excel 的直接错误消息。对于其中只有 6 个事务的表,我将使用 3-8 的行范围(有两行标题)。在不同的部分中,我得到了以下所有不工作或只完成一小部分工作的内容:

=INDEX(A3:A8, SMALL(IF((INDEX(A3:A8, , $C$3, 1)="EXPE" & TEXT($A$3, "000")), ROW(A3:A8), ""), ROWS(A19:$A$19)), , 1)
=MATCH(A8, A3:A8)
=INDEX(A3:P37, MATCH(A8, A3:A37))

但我完全迷失了这一点。似乎我什至无法让第 1 步工作。我什至还没有弄清楚如何在一个工作表上执行此操作,更不用说多个工作表了。有人知道如何解决这个疯狂的公式吗?

【问题讨论】:

  • 好吧,我从不同的来源拼凑了一些解决方案:在这里(谢谢,布鲁斯!),在网上,我自己的测试和咕哝、流汗和恳求 Excel,并想出了这个:="EXPE-"&TEXT(INDEX(credits_transactionnumbers, SMALL(IF("EXPE-"&TEXT(A29,"000")=L3:L37, ROW(L3:L37)-MIN(ROW(L3:L37))+1, ""), ROW(A1))),"000")其中,如果我放入不同的单元格并每次增加 A1 (A2, A3, ...) 会给我坐标。我现在唯一需要的是能够将这些值放在一个长的、以逗号分隔的字符串中的一个单元格中,并在 #NUM! 之前停止。取得更多进展!

标签: excel function


【解决方案1】:

你说的是反式。 # 列被格式化为将1、2、3分别显示为TRAV-001、TRAV-002、TRAV-003?如果是这样,MATCH 将只匹配 1、2、3 的行。

我要么将数据输入为 TRAV-001...要么添加另一列,输入 1 并让另一列正确格式化交易编号 (=EXPE-"&TEXT(A12, "000"&"*") . 或者,只匹配 1、2、5 等。

【讨论】:

  • 更好的是...摆脱 Trans 中的单元格格式。 #.相反,在该列中输入一个公式。由于费用总是涉及成本,因此请进行 Trans。 # 列取决于成本列。
  • 例如,=IF($C2="","","EXPE-"&TEXT(ROW($C2)-1,"000"))
  • ...并且,如果您的工作表名称与您的交易类型(EXPE、TRAV、TIPS 等)相同,您可以进一步自动化您的公式以包含交易类型。跨度>
  • 例如 =IF($C2="","",MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A $1),1)+1,10)&"-"&TEXT(ROW($C2)-1,"000"))
  • 对于我假设为 E 列的其他事务#s 列,输入数组公式:=IF(COUNTIF($D$1:$D$100,"*"&$A2&"*")<(COLUMN()-4),"",INDIRECT(ADDRESS(SMALL(IF(ISERR(IF(SEARCH("*"&$A2&"*",$D$1:$D$100,1),ROW($D$1:$D$100),"")),"",ROW($D$1:$D$100)),COLUMN()-4),1)))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多