使用 Excel 的 XLOOKUP 查找重复代码 | 选择第一个和最后一个匹配项的方法

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

关于本文
本文是通过利用生成式 AI 的自动生成流程创建的。基于 Microsoft 的 XLOOKUP 官方文档,本文将介绍如何指定搜索方向以返回重复代码的第一个或最后一个匹配项。手头的 Excel 或示例公式的运行情况尚未在实际设备上进行验证。

验证状态:已确认规格(spec_checked)。已核实官方文档中的规格。公式示例的运行情况尚未经过验证。

从相同的代码中获取哪一行的值

在商品代码或负责人代码存在多行的表格中,即使搜索值相同,首行和末行返回的值也可能不同。XLOOKUP 默认从搜索范围的开头开始匹配,并返回找到的第一个匹配项。若要使用最后的匹配项,请将搜索模式设置为从末尾开始搜索。

在以下示例中,获取与代码 A-102 对应的“状态”。假设表格从第 2 行开始,代码在 A 列,状态在 B 列。搜索值 A-102 输入在 E2 中。

行代码(A列)状态(B列)
2A-101已受理
3A-102确认中
4A-103已完成
5A-102已发货

返回首个匹配项的公式如下:

=XLOOKUP(E2,A2:A5,B2:B5,"該当なし",0,1)

返回最后一个匹配项的公式将最后一个参数设为 -1。

=XLOOKUP(E2,A2:A5,B2:B5,"該当なし",0,-1)

预期示例(未执行):当 E2 为 A-102 时,搜索模式 1 预期返回“确认中”,-1 预期返回“已发货”。这里所说的“最后”是指当前搜索范围内最下方的匹配项。它并非自动判定数据上的最新日期或业务上的最终处理。

通过图示确认搜索方向与返回的行

即使搜索值相同,根据搜索方向的不同,所采用的匹配项也会发生变化。下图展示了从上往下查看范围以及从下往上逆向查看范围时,分别返回对应 B 列值的流程。

flowchart TB
    A["検索値 A-102"] --> B{"検索方向"}
    B -->|"1: 先頭から"| C["A2:A5を上から確認"]
    B -->|"-1: 末尾から"| D["A2:A5を下から確認"]
    C --> E["最初の一致: 行3"]
    D --> F["最後の一致: 行5"]
    E --> G["対応するB列: 確認中"]
    F --> H["対応するB列: 出荷済み"]

1 中会先找到第 3 行,-1 中则是从下往上查找并先找到第 5 行。XLOOKUP 会返回与匹配行相对应的返回范围的值。图示和结果是基于官方规范的说明,并非实际操作此工作簿验证的结果。

对照参数顺序阅读公式

XLOOKUP 的参数顺序如下:

XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])

在这次的公式中,E2 是查找值,A2:A5 是用于寻找代码的查找区域,B2:B5 是提取返回值的返回区域。"該当なし" 是未找到代码时显示的值,0 是精确匹配,最后的 1 或 -1 表示查找方向。

查找区域和返回区域不仅行数要一致,行位置也必须对齐。A2:A5 如果要查找该行,返回区域也要设为对应同一行的 B2:B5。如果只有一方错开了一行,公式就会返回与找到的代码不同行的值。请注意不要将标题包含在区域中,并确认表格的开头和结尾是一致的。

首先在 E2 中放入 A-102 并输入公式。接下来,只将公式的最后一个参数从 1 改为 -1。如果保持查找值和区域固定,就可以将返回值的差异作为查找方向的差异来进行比较。通过复制公式并排排列,可以同时查看两个结果。

预期示例(未执行):如果将 E2 改为仅存在 1 件的 A-103,那么无论查找模式是 1 还是 -1,预计结果都将是“已完成”。通过比较只有在存在重复项时返回值才会分叉这一点,就会明白查找模式决定的不是是否存在匹配,而是从多个匹配候选里返回哪一个。

除首尾匹配之外的搜索模式

如果省略搜索模式,XLOOKUP将从头开始搜索。显式写入 1 可以将意图保留在公式中,以便日后阅读公式的人能够判断搜索方向,而不必依赖默认行为。选择最后一个匹配项的 -1 用于在不改变数据排列的情况下希望从底部开始搜索的场景。

搜索模式 2 和 -2 指定了二分搜索。二分搜索是一种通过将范围减半来缩小搜索范围的方法。Microsoft的官方文档说明,2 以升序为前提,-2 以降序排列为前提,并解释说如果范围未排序,可能会导致无效的结果。如果只是想选择开头或结尾的匹配项,使用不需要排序前提的 1 或 -1 可以使用途更加明确。

使用二分搜索时,请确认搜索范围是否始终保持指定的顺序。重新排列原始数据可能会影响使用行顺序的其他计算或验证任务。如果出于搜索速度等原因采用二分搜索,请一并考虑维护顺序的操作以及返回的结果是否符合业务上的排序含义。

未返回预期值时的检查要点

如果公式出现错误,或者返回的值与预期行不同,请按顺序检查以下各项。

  1. 检查搜索范围和返回范围的行
    A2:A5 像 B2:B5 一样,检查对应的行是否相同。还要检查范围的起始行或结束行是否错位。

  2. 检查搜索值和代码的实际数据
    即使看起来相同的代码,也有可能一个被保存为数字,另一个被保存为字符串。此外,如果代码前后存在空格,可能无法实现预期的完全匹配。切勿立即批量转换原始列,而应在复制的范围内比较值和类型,如有必要,请在单独的列中准备好标准化代码后再进行比对。

  3. 检查搜索模式是否在正确的位置
    1 / -1是第6个参数。如果与第5个匹配模式 0 弄错位置,将无法达到预期的搜索方向。请检查公式的后半部分是否为 ...,0,1 或 ...,0,-1。

  4. 确认公式分隔符与Excel的对应情况
    分隔公式参数的符号可能会因区域设置等因素而异。示例中使用了逗号,但如果在输入时出错,请检查本地Excel所使用的分隔符。此外,根据官方资料,XLOOKUP适用于Excel for Microsoft 365及Excel 2021等版本,而Excel 2016和Excel 2019则不支持。不仅要检查输入公式的环境,还要确认共享对象环境是否能识别该函数。

  5. 确定“最后”所指的含义
    -1 返回的是搜索范围内最后找到的行。如果无法保证各行按日期顺序排列,“末尾匹配”和“最新匹配”则并非一回事。在使用最新记录的业务中,请另外确认是否保留了更新日期的列或排序规则。

在业务中使用前需要确定的事项

在接待历史记录这样同一代码出现在多行的表格中,应作为业务规则明确是使用开头状态还是末尾状态。为避免只有负责输入公式的人员了解其意图,应明确指定搜索模式,并在标题或相邻单元格中留下“第一行”、“当前排序下的最后一行”等返回值的含义,这样更有利于工作交接。

特别是,如果表格之后会被重新排序,-1 的结果也可能会发生变化。建议先用虚拟的重复代码测试重新排序后应该返回哪一行,然后再应用到实际表格中。在共享工作簿中,考虑到拥有编辑权限的人员可能会更改原表的排序或代码列,因此仅凭公式结果来确定处理方式是不可取的,设置必要的确认栏或更新步骤也是一种有效的判断。

如果共享对象中包含无法使用XLOOKUP的版本,则必须选择分发的Excel版本可用的搜索方法。函数的兼容性不仅要在创建者端检查,还要在查看和编辑者端的环境中进行确认。由于此处未提供替代公式,如果与旧版本的兼容性是硬性要求,请在确定目标版本后进行单独验证。

总结

若要返回重复代码的第一行,请在搜索模式中指定 1;若要返回最后一行,则指定 -1。请在小型表格中对比存在重复和仅有1条记录的情况,确认搜索范围与返回范围的对应关系、表格排序以及返回值的业务含义后,再应用到实际数据中。二分查找的 2 / -2 以排序为前提,因此应与选择匹配开头或末尾的用途区分开来判断。

官方信息与第一手资料

示例代码

实现 / README与运行步骤

文档信息

文章??
使用 Excel 的 XLOOKUP 查找重复代码 | 选择第一个和最后一个匹配项的方法
?布日期
更新日期
来源
https://papanda925.com/?p=18179&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制