對這個問題很感興趣,研究啦一個多小時,終於把結果搞出來啦。現在把操作結果梳理一下,用函式達到目的,在這裡拋磚引玉,看有沒有大神寫個vba出來!
首先,分析你的資料長字元可以理解為學號(唯一),下面的資料為其成績。
其次,學號的字元長度是一定,這個很重要。
最後,需要用到的函式:if,len,sum,row,small,countif,offset,match!
方法:利用學號唯一及長度一定,得到各個學號的行號,進而得到相鄰學號之間間隔行數
資料來源:因沒有附件,資料來源是自己編的;
1)利用len函式轉換字元長度。
2)使用IF函式及row函式,返回學號的行號,如GIF動圖所示!
3)問題分解到這一步,就可以得到“重複間隔”的值,如相鄰A與B,即等於B-A-1
使用small函式和countif函式組合函式:countif函式統計當前學號長度重複個數,在此基礎上在利用small函式取值重複行號,相減即可得到當前學號距離下個學號的間隔行數。公式:IFERROR(IF(B3=6,SMALL(C:C,COUNTIF($B$3:B3,B3)+1)-SMALL($C$3:C3,COUNTIF($B$3:B3,B3)),"")-1,""),如GIF動圖所示!
4)前面分步拆解後,最後就是計算結果。
使用if函式判斷是否為學號對應項,使用sum和offset組合函式統計求和結果:offset的引數定位為:表頭,即A2;使用match定位當前學號位置,即row()下偏移值;引用同行“重複間隔”,即height引用行數;即得到求和區域。公式:IF(LEN(A4)=6,SUM(OFFSET($A$2,MATCH(A4,A$2:A$1048576,0),,D4,)),"");如GIF動圖所示!
對這個問題很感興趣,研究啦一個多小時,終於把結果搞出來啦。現在把操作結果梳理一下,用函式達到目的,在這裡拋磚引玉,看有沒有大神寫個vba出來!
首先,分析你的資料長字元可以理解為學號(唯一),下面的資料為其成績。
其次,學號的字元長度是一定,這個很重要。
最後,需要用到的函式:if,len,sum,row,small,countif,offset,match!
方法:利用學號唯一及長度一定,得到各個學號的行號,進而得到相鄰學號之間間隔行數
資料來源:因沒有附件,資料來源是自己編的;
1)利用len函式轉換字元長度。
2)使用IF函式及row函式,返回學號的行號,如GIF動圖所示!
3)問題分解到這一步,就可以得到“重複間隔”的值,如相鄰A與B,即等於B-A-1
使用small函式和countif函式組合函式:countif函式統計當前學號長度重複個數,在此基礎上在利用small函式取值重複行號,相減即可得到當前學號距離下個學號的間隔行數。公式:IFERROR(IF(B3=6,SMALL(C:C,COUNTIF($B$3:B3,B3)+1)-SMALL($C$3:C3,COUNTIF($B$3:B3,B3)),"")-1,""),如GIF動圖所示!
4)前面分步拆解後,最後就是計算結果。
使用if函式判斷是否為學號對應項,使用sum和offset組合函式統計求和結果:offset的引數定位為:表頭,即A2;使用match定位當前學號位置,即row()下偏移值;引用同行“重複間隔”,即height引用行數;即得到求和區域。公式:IF(LEN(A4)=6,SUM(OFFSET($A$2,MATCH(A4,A$2:A$1048576,0),,D4,)),"");如GIF動圖所示!