我有一张类似下面的表
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。
答案 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个空单元替换错误。