在一行中查找字符串并在excel中删除它

时间:2017-07-19 01:03:13

标签: excel excel-formula

我有一张类似下面的表

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"如果存在,则将其删除并将后续列复制到其位置,即在第一行中#c; abc"列A中存在,所以我想删除它并将col B-E移动到Col A-D。在第2行" abc"不存在,所以这一行应保留原样,但在第3行," abc"在Col D中,它应该被移除并且" ghi"应粘贴在其位置,从而使col E为空。

我能够使用MATCH执行此操作,但此处的捕获MATCH仅查找第一次出现但未找到后续出现的次数。

有没有办法使用excel公式而不是vba。

1 个答案:

答案 0 :(得分:2)

您不能使用公式(在注释中提到)退出数据 - 但如果您想要自动删除项目的数据副本,只要原始表格被修改就会更新表格,您可以这样做。我会将结果数据粘贴在输入数据下面,但是如果你想要将它粘在另一张纸上......

我们从这开始:

   |   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,值为FAL,值为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个最小数字的位置值 - 如果由于过滤掉的项目而没有值,则返回错误

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