复杂的EXCEL IF公式或VBA

时间:2010-07-06 17:25:29

标签: excel vba

我有这个数据集:

92127
96001-1
94533-1
95630
95677
95630

我需要这个输出

92127-1
95630-1
95677-1
95630-2

这是逻辑:

如果此列中不存在92127,那么它应为92127-1;然而,如果它存在,那么它应该是92127-(这里最大的数字是+1),所以如果最大的数字是92127-5,那么它应该是92127-6

是否可以将其变成公式?

2 个答案:

答案 0 :(得分:3)

这是我的:

=IF(LEN(A2)>5,A2,A2&"-"&SUMPRODUCT(--(LEFT($A$2:$A2,5)=LEFT(A2,5))))

A2:A7

92127
96001-1
94533-1
95630
95677
95630

B2:B7(你把公式放在哪里)

92127-1
96001-1
94533-1
95630-1
95677-1
95630-2

编辑:以上假设五位数前导号的第一个实例没有-n,并使用该五位前导号的计数将-n附加到后续实例。但是,如果95630的第一个实例是95630-2,则上述操作失败。字符串操作不适用于数组公式,所以我认为唯一的选择是使用帮助列。您的数据在A2:A7中,

B2: =IF(ISERR(FIND("-",A2)),A2,LEFT(A2,5))
C2: =IF(ISERR(FIND("-",A2)),0,MID(A2,FIND("-",A2)+1,LEN(A2)))
D2: =B2&"-"&IF(ISERR(FIND("-",A2)),MAX(($B$2:$B$7=B2)*($C$2:$C$7))+1,C2)

并填充到第7行.B2和C2将数字拆分为五个前导数字和-n后缀(如果有)。如果没有-n,则返回0.使用Control + Shift + Enter输入D2,因为它是一个数组公式。它找到当前五个前导数字的最大值-n,加一,并将其​​追加到五个前导数字。

辅助列使其更加繁琐,但我找不到更好的方法。

答案 1 :(得分:1)

既然你想在那里保留'-1'(根据评论),这应该有效:

假设'Existing'在单元格A2:An中,此公式在B2中,可以向下复制到Bn。

=LEFT(A2,5)&TEXT(COUNTIF(A$2:A2,LEFT(A2,5))+IF(ISERROR(VALUE(MID(A2,7,1))),0,VALUE(MID(A2,7,1))),"-0;;")

我的结果如下:

现有

92127
96001-1 
94533-1 
95630
95677
95630

92127-1
96001-1
94533-1
95630-1
95677-1
95630-2