Excel,根据从整个工作表中找到的文本返回行和列值

Posted

技术标签:

【中文标题】Excel,根据从整个工作表中找到的文本返回行和列值【英文标题】:Excel, return row and column values based on found text from entire sheet 【发布时间】:2016-06-18 04:17:55 【问题描述】:

假设我有一个如下所示的 excel 表:

我需要找到任何值为“E”的单元格,并从该行的第一列和该列的第一行返回值。

例如,在这种情况下,预期的输出将是February 3

我以前可以使用 HLOOKUPVLOOKUP 来做类似的事情,但我总是在单行或单列中搜索文本,而在这里,我需要在整个表中搜索值。

有什么办法可以做到这一点?

请注意,我无法控制电子表格的格式,是的,我完全同意这不是存储和处理这些数据的好格式。

【问题讨论】:

预期输出在哪里?在一个单元格或一组单元格中使用公式 - 还是使用 VBA 和屏幕消息? @dbmitch 理想情况下,我想在单独的工作表上的单元格中使用公式,但如果需要,我可以将其放在同一张工作表上考虑在需要的另一张工作表上标记日期的单元格显示描述的输出 我想我的意思是成品的外观如何?您是在查看所有值的单列 - 还是与您的“E”网格匹配的网格,或者一个具有连接日期值的单元格。视觉效果会有所帮助(有多个示例 E) mrexcel.com/forum/excel-questions/… 【参考方案1】:

假设你的例子

Sheet1,那么公式:

=INDEX(Sheet1!$A$1:$A$1000,INT(SMALL(IF(Sheet1!$B$2:$K$10="E",ROW(Sheet1!$B$2:$K$10)+COLUMN(Sheet1!$B$2:$K$10)/1000),ROW($A1))))

=INDEX(Sheet1!$A$1:$ALK$1,,RIGHT(TEXT(SMALL(IF(Sheet1!$B$2:$K$10="E",ROW(Sheet1!$B$2:$K$10)+COLUMN(Sheet1!$B$2:$K$10)/1000),ROW($A1)),"0.000"),3))

向下复制都会得到

在另一张纸上。

第一个公式在B2C2 中。

这两个公式都是数组公式。将其放入单元格中,无需键入大括号。然后按 [Ctrl]+[Shift]+[Enter] 确认。现在大括号应该出现了。

公式中的搜索范围Sheet1!$B$2:$K$10 可以扩展到Sheet1!$B$2:$ALK$999。但范围越大,性能越差。

方法是获取“E”出现在搜索范围内的数字列表(行号+列号/1000)。即行号为整数部分,列号为小数部分,其中 1 为 0.001,2 为 0.002,...,999 为 0.999。然后使用Small 将这些数字从最小到最大。然后通过获取整数部分得到真正的行号。并从最后 3 位得到真正的列号。

要使用计算的十进制数的最后三位作为列号,我们必须确保在所有情况下都有三位作为小数位。所以我们必须使用格式化0.000。为此我们可以使用TEXT 函数。

【讨论】:

解决问题的好方法 我注意到使用列号 / 1000 方法的一个错误/缺陷:假设您的数据位于第 2 行第 10 列,该公式将返回 2.010,它会减少到 2.01,代表行2,第 1 列。我想一种解决方案是在 C 列中工作时将列交换为公式的整数部分。 @Wolfspirit:你是对的。我改进了我的答案。

以上是关于Excel,根据从整个工作表中找到的文本返回行和列值的主要内容,如果未能解决你的问题,请参考以下文章

遍历Excle工作薄的行和列,文本抽取

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

Excel里怎么将行和列进行互换?

Excel表中如何同时锁定行和列

想通过以文本格式保留所有行和列来在 C# 中创建 excel 文件

Excel2010表格行和列转换的方法