Excel:如何在非零值之后选取第一个零

在一行数据中,如何在非零值之后find第一个零所在的列? 检查这个图像的例子。

使用这个公式:

=INDEX($1:$1,AGGREGATE(15,6,COLUMN(B2:E2)/((A2:D2<>0)*(B2:E2=0)),1)) 

在这里输入图像说明

您可以在VBA中创build自己的function

 Function FindZero(TargetRange as range) As Long Dim aCell as range For each aCell in TargetRange if aCell>0 AND aCell.Offset(0,1) = 0 then FindZero = aCell.Offset(0,1).Column Exit For end if next aCell end function 

然后在你刚刚放的某个单元格中

 =FindZero(A1:G1) 

`

 Sub FindNonZero() For i = 2 To 4 For j = 1 To 5 If Cells(i, j).Value <> 0 Then For k = j To 5 If Cells(i, k).Value = 0 Then Cells(i, 7).Value = "COL" & k Exit For End If Next k Exit For End If Next j Next i End Sub 

之前

后

=FIND("0",TEXTJOIN(,,A2:E2),FIND("1",TEXTJOIN(,,A2:E2)))

编辑:

要处理任何非零值:

 =INDEX(OFFSET(A2,-(ROW()-1),MATCH(TRUE,INDEX(A2:E2<>0,),0),,COLUMNS(A2:E2)-MATCH(TRUE,INDEX(A2:E2<>0,),0)),1,MATCH(0,OFFSET(A2,0,MATCH(TRUE,INDEX(A2:E2<>0,),0),,COLUMNS(A2:E2)-MATCH(TRUE,INDEX(A2:E2<>0,),0)),0)) 

这个INDEX / AGGREGATE / MATCH应该为你做。

 =INDEX(INDEX(C$1:G$1, 1, AGGREGATE(15, 6, COLUMN(A:E)/(C2:G2>0), 1)):G$1, MATCH(0, INDEX(C2:G2, 1, AGGREGATE(15, 6, COLUMN(A:E)/(C2:G2>0), 1)):G2, 0)) 

请注意,COLUMN(A:E)返回C $ 1:G $ 1和C2:G2内的位置。

在这里输入图像说明