Excel 索引 + 匹配单个单元格区域失败

2023-12-05

我希望尝试找到列表中可以包含一个或多个值的第一个负数。我正在使用索引/匹配。当范围(或命名引用)有两个或多个单元格时,它会正确找到值。但是,当该范围只有一个单元格时,它会失败。

例如 K1 和 K2 列中的 Excel 数据分别为 -10.00 和 20.00

当我尝试下面时,它按预期返回 -10.00

=INDEX(K1:K2, MATCH(TRUE,K1:K2<0,0),)

但是,当我仅搜索一个单元格范围时,它会失败并显示“#N/A”。我预计它会返回 -10.00。

=INDEX(K1:K1, MATCH(TRUE,K1:K1<0,0),)

使用包含单个单元格的命名引用时,也会出现相同的问题。

非常感谢


这是一个非常有趣的问题,需要相当技术性的答案。

基本上,MATCH 要求查找数组属于某种“类型”。这并不是说这个数组不能只包含单个元素(它可以),而是说它的形式与 MATCH 期望为其第二个参数传递的形式兼容。

这种可接受的形式可以是值数组或对(连续的)一维工作表单元格范围的引用。

当您执行:

=INDEX(K1:K2,MATCH(TRUE,K1:K2<0,0),)

这解决了:

=INDEX(K1:K2,MATCH(TRUE,{TRUE;FALSE},0),)

所以查找数组, i.e.:

{TRUE;FALSE}

是一个数组,即可接受的形式。

但是,当您执行:

=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)

那么这就解决了:

=INDEX(K1:K2,MATCH(TRUE,TRUE,0),)

而这一次的查找数组(TRUE) 是单个布尔值,不满足该参数的类型要求。

然而,我们可以人为地强制该单一值,以便它is正确的类型,即:

=INDEX(K1:K2,MATCH(TRUE,IF({1},K1:K1)<0,0),)

这次决定:

=INDEX(K1:K2,MATCH(TRUE,{-10})<0,0),)

这是:

=INDEX(K1:K2,MATCH(TRUE,{TRUE},0),)

现在,单个布尔值在技术上是数组的一部分(尽管该数组仅包含单个值),以上内容可根据需要进行解析。

作为此行为的另一个示例,假设单元格 A1 包含值 1。然后:

=MATCH(1,A1,0)

正确返回 1,因为,即使查找数组这里是单身 单元格,它(与所有工作表范围一样)在技术上仍然是数组类型。

但是,如果我们做一些小的改变,例如:

=MATCH(1,N(A1),0)

那么,即使这解析为:

=MATCH(1,1,0)

因此,看起来根本没有任何改变,事实上,通过将范围引用 A1 与其实际值“解除引用”,我们现在将其设置为无效类型,以作为查找数组,上述结果导致错误。

在我看来,MATCH 的这种行为往好了说是不一致,往坏了说是设计错误。

的结果:

=INDEX(K1:K2,MATCH(TRUE,K1:K1<0,0),)

should be:

=INDEX(K1:K2,MATCH(TRUE,{TRUE},0),)

我们不必通过额外的人为手段来强制它。

出于某种原因,如果传递的数组仅包含一个值,那么该值首先被“解析”为非数组类型,这与那些包含多个值的数组不同,对于这些数组,它们的数组类型是保留。

Regards

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel 索引 + 匹配单个单元格区域失败 的相关文章

  • 从 excel/vba 生成电子邮件到 Outlook 时,我的电子邮件签名不会出现?

    您好 我使用 Ron De Bruin 的精彩网站创建了 VBA 代码 该代码可以从 Excel 文件生成向特定用户发送的电子邮件 唯一的问题是我的签名没有出现在每封电子邮件上 而且我似乎找不到如何在代码中添加它 有人可以建议吗 正如你所知
  • xlrd 读取 xls XLRDError:不支持的格式或损坏的文件:预期的 BOF 记录;找到“\r\n”

    这是代码 xls open workbook data xls 作为回报 File home woles P2 fin fin apps data container importer py line 16 in import data x
  • 复制数据透视表格式

    我无法将数据透视表格式复制到新工作表 基本上我想做的是 someRange Copy someOtherRange pasteSpecial xlPasteValues someOtherRange pasteSpecial xlPaste
  • excel公式剥离html

    我想从文本值的左侧和右侧剥离所有 html 我有这个
  • 提高此 Excel 公式性能的最快方法是什么?

    这是从下面的帖子更进一步的内容 如何克服Excel中公式的最大长度限制 excel的一个bug https stackoverflow com questions 32604740 how to overcome the max lengt
  • 使用Excel宏执行命令并关闭cmd窗口

    这是我现在正在尝试的 Sub del BJSFM files Call Shell cmd exe S K cd d C UTAS SA del f s q BJSFM gt nul vbNormalFocus End Sub 问题是命令窗
  • 使用VBA删除Excel中的非重复数据

    我尝试删除非重复数据并保留重复数据 我已经完成了一些编码 但什么也没发生 哦 这是错误 哈哈 这是我的代码 Sub mukjizat2 Dim desc As String Dim sapnbr As Variant Dim shortDe
  • 将 Excel 文件导入 Access 时更改数据类型

    将 Excel 文件导入 Access 时 有什么方法可以更改默认数据类型吗 顺便说一下 我使用的是 Access 2003 我知道有时我可以自由地将任何数据类型分配给正在导入的每个列 但这只能在我导入非 Excel 文件时进行 EDIT
  • 当应用程序继续运行时,如何清理 .NET 中的 COM 引用?

    我正在开发一个 NET 程序 该程序启动 Excel 的新实例 执行一些工作 然后结束 但必须让 Excel 保持运行 稍后 当程序再次运行时 它将尝试挂钩到前一个实例 在这种情况下处理 COM 对象释放的最佳方法是什么 如果我第一次没有对
  • 使用 Excel Interop 关闭 Excel 应用程序而不保存消息

    我正在使用 Excel Interop COM 对象 我正在编写一种方法 其中打开和关闭 Excel 应用程序 然后打开 Excel 工作簿和工作表 完成这些工作后 我将关闭应用程序和工作簿 我的问题是 此方法可以重复调用多次 当工作表和应
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • 如何从包含许多表的 Excel 工作表中解析数据帧(使用 Python,可能使用 Pandas)

    我正在处理布局糟糕的 Excel 工作表 我正在尝试解析这些工作表并将其写入数据库 每个工作表可以有多个表 尽管这些可能的表格的标题是已知的 但哪些表格将位于任何给定的工作表上 它们在工作表上的确切位置也不是已知的 表格不以一致的方式对齐
  • 使用 UiPath 循环 Excel 文件中的 URL

    我尝试了几种方法 但不知怎的 它们看起来不干净 我有一个 Excel 格式的 URL 文件 一列中有 400 多个 URL 我希望 UiPath 从该文件中读取并一一浏览这些 URL 我尝试让 导航到 从从 Excel 读取的变量中读取 但
  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 您可以调整用户窗体的这些代码吗:使其小而高效

    当 userfrom 按以下顺序激活时 我想在运行时添加动态用户表单控件 例如 标签 文本框 我想要类似以下的东西 当用户表单激活时 它需要询问用户字段的数量 他 她想要插入 如果用户回答7 则需要按以下顺序添加字段 3 列顺序 标签1 文
  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • 使用 OpenXML 读取列中的 Excel 工作表数据

    有没有一种方法可以使用 OpenXML SDK 和 C 按列而不是按行读取 Excel 工作表 我已经尝试使用 EPPlus 包 但遇到了一些问题 因为我的应用程序还使用 EPPlus 不支持的 xslm 文件 因此 我需要 OpenXML
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • 索引匹配不起作用

    对于下表 如果 A 列和 B 列都匹配 如何检索 C 列A 列 B 列 C 列城市 1 城市 10 本地城市 2 城市 21 远程城市 3 城市 1 远程城市 4 城市 2 本地 我尝试使用索引和匹配 但得到 N A Enter as an

随机推荐