繁体   English   中英

连续查找字符串并在Excel中将其删除

[英]Finding a string in a row and removing it in excel

我有一张类似于下面的表格

si  id  a   b   c   d   e
1   123 abc bcd abc def efg
2   234 bcd cde def efg fgh
3   345 cde efg efg abc ghi

我想做的是查找字符串“ abc”是否存在于行中,如果存在,请将其删除,然后将后续列复制到其位置,即第一行“ abc”存在于列A中,所以我要删除并将col BE移至Col AD​​。 在第二行中不存在“ abc”,因此应按原样保留该行,但在第三行中,“ abc”在Col D中,因此应将其删除,并将“ ghi”粘贴到其位置,从而保留列E空。

我能够使用MATCH做到这一点,但这里的问题是MATCH仅找到第一个出现的事件,而没有找到后续出现的事件。

有没有一种方法可以使用excel公式而不是vba。

您无法使用公式(在注释中提及)就地退出数据-但是,如果您想要自动删除项目的数据副本,则只要修改原始表就可以更新该表。 我会将结果数据粘贴在输入数据下方,但是如果您愿意,可以将其粘贴在另一张纸上。

我们从这个开始:

   |   A   |   B   |   C   |   D   |   E   |   F   |   G   |
---+-------+-------+-------+-------+-------+-------+-------+--
 1 |    si      id       a       b       c       d       e
 2 |     1     123     abc     bcd     abc     def     efg
 3 |     2     234     bcd     cde     def     efg     fgh
 4 |     3     345     cde     efg     efg     abc     ghi
 5 |
 6 |
 7 |
 8 |
 9 |
10 |

步骤1:在A6中放入=A1

步骤2:将A6复制到B6:G6,A7:A10和B7:B10

现在工作表如下所示:

   |   A   |   B   |   C   |   D   |   E   |   F   |   G   |
---+-------+-------+-------+-------+-------+-------+-------+--
 1 |    si      id       a       b       c       d       e
 2 |     1     123     abc     bcd     abc     def     efg
 3 |     2     234     bcd     cde     def     efg     fgh
 4 |     3     345     cde     efg     efg     abc     ghi
 5 |
 6 |    si      id       a       b       c       d       e
 7 |     1     123
 8 |     2     234
 9 |     3     345
10 |

步骤3:在C7中输入以下数组公式(请记住按Alt-Shift-Enter而不是仅按Enter):

=IFERROR(INDEX($C2:$G2,1,SMALL(IF($C2:$G2<>"abc",COLUMN($C2:$G2)-2),COLUMN(A1))),"")

步骤4:将C7复制到D7:G7和C8:G9

现在工作表如下所示:

   |   A   |   B   |   C   |   D   |   E   |   F   |   G   |
---+-------+-------+-------+-------+-------+-------+-------+--
 1 |    si      id       a       b       c       d       e
 2 |     1     123     abc     bcd     abc     def     efg
 3 |     2     234     bcd     cde     def     efg     fgh
 4 |     3     345     cde     efg     efg     abc     ghi
 5 |
 6 |    si      id       a       b       c       d       e
 7 |     1     123     bcd     def     efg
 8 |     2     234     bcd     cde     def     efg     fgh
 9 |     3     345     cde     efg     efg     ghi
10 |

这个怎么运作:

=IF($C2:$G2<>"abc",COLUMN($C2:$G2)-2)生成一个值数组,该数组的数值为非abc的值,而数值为FALSE的值为abc。 -2很重要,因为数据左侧有两个标题列。

=SMALL(IF($C2:$G2<>"abc",COLUMN($C2:$G2)-2),COLUMN(A1))返回返回数组中的第n个最小数字-跳过所有FALSE价值观。

=INDEX($C2:$G2,1,SMALL(IF($C2:$G2<>"abc",COLUMN($C2:$G2)-2),COLUMN(A1)))返回该值的位置第n个Smallestst数字-如果由于过滤出的项目而没有值,则返回错误

=IFERROR(INDEX($C2:$G2,1,SMALL(IF($C2:$G2<>"abc",COLUMN($C2:$G2)-2),COLUMN(A1))),"")返回值并将错误替换为空单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM