我有以下专栏A
C
R
H
Z
T
我想要一个自动将数据从A
复制到B
的公式,以便数据没有空元素并且已经排序。
列B
应如下所示:
C
H
R
T
Z
之后,如果我要将F
这样的元素添加到列A
,例如:
C
R
H
Z
F
T
列A
会自动更新为:
C
F
H
R
T
Z
如何使用公式(非VBA代码)完成此操作?我希望它自动发生(意味着我不必继续过滤,每次将新的数据添加到列A
时进行排序)
由于
答案 0 :(得分:1)
您需要创建一个辅助列,使用此数组公式:
=SUMPRODUCT(IFERROR(CODE(UPPER(MID(A1,ROW(INDIRECT("1:"& MAX(LEN($A$1:$A$9)))),1))),10)*100^(MAX(LEN($A$1:$A$9))-ROW(INDIRECT("1:"& MAX(LEN($A$1:$A$9))))))
作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,则Excel会将{}
放在公式周围。
然后您将使用此公式进行排序和过滤:
=IFERROR(INDEX(A:A,AGGREGATE(15,6,ROW($B$1:$B$9)/((AGGREGATE(15,6,$B$1:$B$9/($A$1:$A$9<>""),ROW(1:1))=$B$1:$B$9)*($A$1:$A$9<>"")),1)),"")
请注意,这可能会因大字符串而崩溃。
答案 1 :(得分:0)
您可以使用此数组公式并将其向下拖动,A1是A列中的第一个数据,在B1写辅助列中对值进行排序:
=IF(COUNTIF($A$1:$A$21,"<="&A1)>0,COUNTIF($A$1:$A$21,"<="&A1),999999999)
并将其拖下来
在C1中写=IF(INDEX(A:A,MATCH(SMALL(IF(B:B<>0,B:B,999999999),ROW(A1)),B:B,0))=0,"",INDEX(A:A,MATCH(SMALL(IF(B:B<>0,B:B,999999999),ROW(A1)),B:B,0)))
同时按 Ctrl + Shift + 输入
IF将检查非空单元格并返回相应的行
Small将找到上部非空单元格并随行移动,在row1中为Small(,1)
在row10小(,10)
INDEX(A:A)是您的初始列
如果A中的单元格为空,则IFERROR将返回&#34;&#34;列B中为空
即使A中有空单元格,也必须向下拖动公式,在这种情况下,当您在单元格中写入公式将在B列中自动填充时
9999999它不会影响小功能
如果没有辅助列,您将需要对数据进行排序或使用未排序但删除空白
您可以在B1中使用:
=IFERROR(INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A),999999999),ROW(A1))),"")
还有数组公式
同时按 Ctrl + Shift + 输入
并将其拖下来
答案 2 :(得分:0)