咦!有这问题?
用公式也可以操作:
D3输入
=IF(AND(B3>0,C3>0),2,IF(AND(B3>0,C3=0),1,0))
回车并向下填充。
(该列做辅助列,可隐藏或设置隐藏色)
E3输入
=INDEX(D:D,SMALL(IF(D$3:D$32=0,ROW($3:$32),4^8),ROW(1:1)))&IF(COUNTIF(B$3:B$32,">0")-30+ROW(1:1)<=0,"",INDEX(D$3:D$32,SMALL(IF(D$3:D$32<>0,ROW($1:$30),4^8),COUNTIF(B$3:B$32,">0")-30+ROW(1:1))))
数组公式,输入后先不要回车,按Ctrl+Shift+Enter结束计算,再向下填充。
此问题要借助VBA才能达到目的。
第一种方法完全利用VBA代码处理,代码如下:
Public Sub Calc()
Dim x, i
i = 32
Range(Cells(3, 5), Cells(32, 5)).ClearContents
For x = 32 To 3 Step -1
If Application.WorksheetFunction.And(Cells(x, 2) > 0, Cells(x, 3) > 0) Then
Cells(i, 5).Value = 2
i = i - 1
ElseIf Application.WorksheetFunction.And(Cells(x, 2) > 0, Cells(x, 3) = 0) Then
Cells(i, 5).Value = 1
i = i - 1
Else
End If
Next x
For x = 7 To 32
If Cells(x, 5) = "" Then
Cells(x, 5).Value = 0
Else
End If
Next x
End Sub
第二种方法借助D列先显示计算结果
D2=IF(AND(B3>0,C3>0),2,IF(AND(B3>0,C3=0),1,0))
然后利用下列VBA代码
Public Sub Calc()
Dim x, i
Range(Cells(3, 5), Cells(32, 5)).ClearContents
i = 32
For x = 32 To 3 Step -1
If Cells(x, 4).Value > 0 Then
Cells(i, 5).Value = Cells(x, 4).Value
i = i - 1
Else
End If
Next x
For x = 7 To 32
If Cells(x, 5) = "" Then
Cells(x, 5).Value = 0
Else
End If
Next x
End Sub
备注:如果B列和C列都是随机数字,计算结果满足第三条要求的可能会大于或等于26个,那样的话E7到E32就容不下所有符合条件的结果。
用D列来辅助一下,在D3单元格输入公式=IF(AND(B3>0,C3>0),2,IF(AND(B3>0,C3=0),1,""))
下拉到D32止。
在E7单元格输入公式=IFERROR(INDEX(D$3:D$32,SMALL(IF(D$3:D$32<>"",ROW($3:$32)-2,-32),ROW(A5))),0)
数组公式,按Ctrl+Shift+回车键结束公式,使公式前后产生大括号{}后,下拉到E32单元格止。 如图:(最后将D列隐藏即可)