我试图转置一些数组,但有一些数字长度超过255会给我带来麻烦。所以,我想看看是否有人可以帮我缩短下面的代码。
我的数据有一列标记(1或0)和数量(amt)。该公式的作用是查看我的标记列,并找到与我的公式或上面的行位于同一行的3个1,但只查找不超过11行。然后,一旦它在标记的列中找到三个1,它就会平均3个相应的amt's。
IFERROR(IF(RC[-2]=1, AVERAGE(INDEX(R[-11]C[-1]:RC[-1], MATCH(2,1/(FIND(1,R[-11]C[-2]:RC[-2])))), INDEX(R[-11]C[-1]:R[-1]C[-1],MATCH(2,1/(FIND(1,R[-11]C[-2]:R[-1]C[-2])))), INDEX(R[-11]C[-1]:R[-2]C[-1],MATCH(2,1/(FIND(1,OFFSET(R[-2]C[-2],-9,0,MATCH(2,1/(FIND(1,R[-11]C[-2]:R[-1]C[-2])))-1)))))),0),0)
假设此数据继续超过12个条目......
flag | amt | avg
1 | 5 | 0
1 | 6 | 0
1 | 2 | 4.33 = (2+6+5)/3
0 | 7 | 0
1 | 6 | 4.67 = (6+2+6)/3
1 | 11 | 6.33 = (11+6+2)/3
答案 0 :(得分:1)
这个基于R1C1的公式只有162个字符,它不是数组公式所以:
Range("C2:C7").FormulaR1C1 = "=IFERROR(IF(RC1<>0,AVERAGEIFS(INDEX(C2:C2,AGGREGATE(14,6,ROW(R1C1:RC1)/(R1C1:RC1=1),3)):RC2,INDEX(C1:C1,AGGREGATE(14,6,ROW(R1C1:RC1)/(R1C1:RC1=1),3)):RC1,1),0),0)"
所以要限制我们需要用R1C1
替换所有INDEX(C1:C1,MAX(1,ROW()-4))
的行数
Range("C2:C7").FormulaR1C1 = "=IFERROR(IF(RC1<>0,AVERAGEIFS(INDEX(C2:C2,AGGREGATE(14,6,ROW(INDEX(C1:C1,MAX(1,ROW()-4)):RC1)/(INDEX(C1:C1,MAX(1,ROW()-4)):RC1=1),3)):RC2,INDEX(C1:C1,AGGREGATE(14,6,ROW(INDEX(C1:C1,MAX(1,ROW()-4)):RC1)/(INDEX(C1:C1,MAX(1,ROW()-4)):RC1=1),3)):RC1,1),0),0)"
替换公式中的-4
,其中有4个,具有所需的行数限制。
这确实将计数增加到254,单个数字限制为4行。如果我们转到11,它将超过您请求的255,但.FormulaR1C1
没有字符限制。