用数组公式从一列中提取包含指定内容的数据

本文介绍如何使用Excel中的数组公式及SEARCH、LEFT、MID、RIGHT等函数从一列数据中提取包含特定字符的数据,包括提取包含指定字符、以指定字符开头、中间含有指定字符及以指定字符结尾的数据。

通常在Excel中要从一列中提取包含指定内容的数据,可以用自动筛选中的自定义筛选,并设置所包含的字符。如果要用公式来实现这种类似筛选的效果,可以在数组公式中用SEARCH函数来查找所包含的字符。假如在A2:A100区域中包含一些成语,要从中提取包含“一”字的成语。

    

    在B2单元格中输入数组公式:

    =INDEX($A$2:$A$100,SMALL(IF(ISERROR(SEARCH("一",$A$2:$A$100)),"",ROW($1:$99)),ROW(A1)),1)

    公式输入完毕按Ctrl+Shift+Enter结束,然后拖动填充柄向下填充,直到出现“#NUM!”为止,下同。

    

www.caiwu51.com

    类似的,如果要从A列中提取开头为“一”字的成语,可用LEFT函数:

    =INDEX($A$2:$A$100,SMALL(IF(LEFT($A$2:$A$100,1)<>"一","",ROW($1:$99)),ROW(A1)),1)

    

    提取A列中第二个字为“一”的成语,用MID函数:

    =INDEX($A$2:$A$100,SMALL(IF(MID($A$2:$A$100,2,1)<>"一","",ROW($1:$99)),ROW(A1)),1)

    提取A列中最后一字为“一”的成语,用RIGHT函数:

    =INDEX($A$2:$A$100,SMALL(IF(RIGHT($A$2:$A$100,1)<>"一","",ROW($1:$99)),ROW(A1)),1)

如果觉得《用数组公式从一列中提取包含指定内容的数据》不错,可以推荐给好友哦。 
<think>我们正在处理用户关于Excel提取唯一或不重复内容的问题。用户的需求是提取一列数据中的唯一或不重复内容。根据引用[1]和引用[2],我们可以提供两种方法:一种是使用公式(如INDEX、MATCH、SMALL等函数组合),另一种是使用Excel内置功能(如删除重复项或高级筛选)。但用户明确要求公式方法,且引用中提供了公式示例。注意:引用[2]中给出了一个数组公式,使用INDEX、SMALL、IF、MATCH和ROW函数组合来提取不重复。该公式比较复杂,我们需要详细解释步骤并注意公式中的数字调整。另外,考虑到用户可能使用不同版本的Excel,我们还需注意公式的兼容性。同时,由于用户要求提取唯一(即不重复),我们也可以提供更简单的方法(如使用数据工具中的“删除重复项”功能),但用户明确要求公式方法。因此,我们将重点放在公式方法上。步骤:1.使用MATCH函数返回每个元素第一次出现的位置(即首次出现的行号)。2.将MATCH返回的位置与ROW函数生成的位置序列比较,如果相等,则说明是第一次出现,记录其行号;否则记录一个很大的行号(如4^8=65536,对应Excel的最大行号)。3.用IF函数生成一个由不重复元素行号和65536组成的数组。4.用SMALL函数从小到大提取行号(忽略65536)。5.用INDEX函数根据行号提取对应的。注意:该公式数组公式,需要按Ctrl+Shift+Enter(而不是Ctrl+Alt+Enter,引用[2]中写的是Ctrl+Alt+Enter,但实际上是Ctrl+Shift+Enter,这里需要更正)。另外,引用[2]中的公式示例是针对A2:A16的数据公式中使用了A$2:A$16和ROW($1:$15)(因为数据有15行)。如果数据范围变化,需要相应调整。我们给出一个通用公式,并解释如何调整。公式(以数据在A2:A100为例,共99行):=INDEX(A:A,SMALL(IF(MATCH(A$2:A$100,A$2:A$100,0)=ROW($1:$99),ROW($2:$100),4^8),ROW(A1)))&""步骤说明:1.MATCH(A$2:A$100,A$2:A$100,0):返回A2:A100中每个元素首次出现的位置(相对于A2:A100的起始行,即A2是第1个,A3是第2个,以此类推)。返回的是一个数组,例如第一个元素是1(因为A2是第一次出现),如果A3与A2相同,则A3的MATCH结果也是1(因为第一次出现在A2),否则为2(如果是新)。2.MATCH的结果与ROW($1:$99)比较:ROW($1:$99)生成1到99的序列。如果MATCH返回的等于当前行在区域中的相对位置(即行号减1,因为区域从第2行开始),则说明是第一次出现。例如,A2的相对位置是1,如果MATCH返回1,则相等;A3的相对位置是2,如果MATCH返回2,则相等;如果MATCH返回1(说明前面已经出现过),则不相等。3.IF函数:如果相等,则返回该单元格的实际行号(ROW($2:$100)),否则返回65536(4^8)。4.SMALL函数:从上述IF返回的数组中,提取第k小的,k由ROW(A1)决定。当公式下拉时,ROW(A1)变为ROW(A2)、ROW(A3)等,即依次提取第1小、第2小...的行号。5.INDEX函数:根据SMALL返回的行号,从A列中取出对应的。6.&"":为了防止出现0(当没有更多不重复时,SMALL会返回65536,而INDEX取A列65536行可能是空,但空单元格会显示0,所以用&""将0转换为空字符串)。注意:这是一个数组公式,输入公式后,需要按Ctrl+Shift+Enter,此时Excel会自动在公式两边加上花括号{}。另外,如果数据区域有空单元格,可能会得到0,使用&""可以避免显示0。我们还可以提供另一种方法:使用“删除重复项”功能(非公式法),但用户要求公式,所以作为备选简单提及。此外,Excel365版本有UNIQUE函数,可以直接提取唯一,但用户可能使用旧版本,所以需要提供兼容旧版本的方法。因此,我们分步骤回答:方法一(公式法):步骤1:确定数据范围,假设数据在A2:A100,共99行。步骤2:在B2单元格输入公式数组公式):=INDEX(A:A,SMALL(IF(MATCH(A$2:A$100,A$2:A$100,0)=ROW($1:$99),ROW($2:$100),4^8),ROW(A1)))&""步骤3:按Ctrl+Shift+Enter,然后下拉公式直到出现空(即所有不重复已被提取)。方法二(适用于Excel365):使用UNIQUE函数=UNIQUE(A2:A100)方法三(非公式法):使用“数据”选项卡中的“删除重复项”功能,或者使用“高级筛选”提取唯一列表。由于用户明确要求公式,我们重点讲解方法一。注意:公式中的数字调整非常重要。-数据范围是A2:A100,那么ROW($1:$99)中的99是数据行数(99行),ROW($2:$100)是数据所在的实际行号(2到100行)。-如果数据范围是A2:A200,共199行,那么ROW($1:$199)和ROW($2:$200)。为了更通用,我们可以使用以下公式(假设数据从A2开始到A列最后一行,但需要知道具体行数),或者使用动态命名区域,但用户可能只需要固定区域。因此,我们给出固定区域的公式,并提醒用户根据实际行数调整。最后,生成相关问题。</think>### Excel 提取一列数据中的唯一/不重复方法 #### 方法一:数组公式法(兼容所有版本) **步骤:** 1. 假设数据在 `A2:A16`(示例范围) 2. 在 `C2` 单元格输入公式: ```excel =INDEX(A:A, SMALL(IF(MATCH(A$2:A$16, A$2:A$16, 0)=ROW($1:$15), ROW($2:$16), 4^8), ROW(A1))) & "" ``` 3. **关键操作**:按 `Ctrl` + `Shift` + `Enter` 组合键(形成数组公式公式两端会自动添加 `{}`) 4. 向下拖动填充公式直到出现空 **公式原理解析:** 1. `MATCH(A$2:A$16, A$2:A$16, 0)` ➔ 返回每个元素首次出现的位置序号(如 `["A",1]`, `["B",2]`) 2. `MATCH(...)=ROW($1:$15)` ➔ 对比位置序号与行号,标记首次出现的行(`TRUE`/`FALSE`) 3. `IF(..., ROW($2:$16), 4^8)` ➔ 首次出现返回真实行号,重复返回极大(`65536`) 4. `SMALL(..., ROW(A1))` ➔ 从小到大提取有效行号(忽略 `65536`) 5. `INDEX(A:A, ...) & ""` ➔ 根据行号提取数据,`&""` 防止显示 `0` **调整技巧:** - 修改 `A$2:A$16` 为实际数据范围 - `ROW($1:$15)` 中的 `15` = 数据行数 `-1` - `ROW($2:$16)` 起始行号需与数据范围匹配[^2] #### 方法二:删除重复项(Excel 2007+ 内置功能) 1. 选中数据列(如 `A2:A16`) 2. 点击 **数据** 选项卡 → **删除重复项** 3. 勾选目标列 → 确定 4. 唯一将保留在原位置 #### 方法三:UNIQUE 函数(仅 Office 365) ```excel =UNIQUE(A2:A16) ``` 直接返回不重复动态数组,无需快捷键操作。 #### 注意事项: 1. **空单元格处理**:公式法会返回空文本(显示为空白) 2. **错误规避**:数据区域避免包含错误(如 `#N/A`) 3. **性能优化**:大数据量时建议用「删除重复项」或 `UNIQUE` 函数 > **操作演示**: > 原始数据 `[A, B, C, A, D, E, A, F]` > 输出结果 `[A, B, C, D, E, F]`(按首次出现顺序排列)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值