資源描述:
《在Excel中按指定的重復(fù)次數(shù)填充數(shù)據(jù)到一列.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、在Excel中按指定的重復(fù)次數(shù)填充數(shù)據(jù)到一列 在工作中有時(shí)需要將Excel某列中的數(shù)據(jù)按指定的次數(shù)依次重復(fù)填充到另一列。例如在下圖的示例中,要將A列的編號(hào)按B列對(duì)應(yīng)次數(shù)重復(fù)填充到D列,即首先將第一個(gè)編號(hào)“WOY756”在D列中填充2次,接著將第二個(gè)編號(hào)“QLG752”填充1次,將第三個(gè)編號(hào)“RWR880”填充5次,……。可用數(shù)組公式或VBA來(lái)實(shí)現(xiàn)這樣的填充在D2單元格輸入下面的數(shù)組公式后按Ctrl+Shift+Enter結(jié)束,然后拖動(dòng)填充柄向下填充公式,直到最后一個(gè)編號(hào)按指定的次數(shù)全部出現(xiàn)為止。公式1:=OFFSET(A$
2、1,MIN(IF(COUNTIF($D$1:D1,A$2:A$21)說(shuō)明:COUNTIF函數(shù)統(tǒng)計(jì)公式所在單元格以上區(qū)域中所產(chǎn)生的各個(gè)“編號(hào)”數(shù)量,將其與B列對(duì)應(yīng)次數(shù)進(jìn)行對(duì)比,如果未達(dá)到B列對(duì)應(yīng)次數(shù),則返回“編號(hào)”相對(duì)A1單元格的偏移量,否則返回“FALSE”,這將得到一個(gè)包含“FALSE”和偏移量的數(shù)組。MIN函數(shù)取得最小值,即“編號(hào)”的偏移量,最后用OFFSET函數(shù)返回“編號(hào)”。公式2:=INDEX(A$1:A$21,SMALL(IF($B$2:$B$21>=COLUMN($A:$J),ROW($B$2:$B$21)),R
3、OW(A1)))說(shuō)明:“IF($B$2:$B$21>=COLUMN($A:$J),ROW($B$2:$B$21))”產(chǎn)生一個(gè)20行10列由FALSE和數(shù)字組成的數(shù)組,其中的數(shù)字為各“編號(hào)”對(duì)應(yīng)的行號(hào),且各數(shù)字的數(shù)量與B列的重復(fù)次數(shù)相同。如16行“BXQ763”對(duì)應(yīng)的“重復(fù)次數(shù)”為3,數(shù)組中即包含3個(gè)“16”?!癈OLUMN($A:$J)”需根據(jù)B列的最大值進(jìn)行修改,例如“重復(fù)次數(shù)”中最大值為26,則改為“COLUMN($A:$Z)”。公式3:=INDEX(A$2:A$21,MATCH(ROW(A1)-1,SUBTOTAL(9
4、,OFFSET(B$1,,,ROW($1:$21))),1))說(shuō)明:MATCH函數(shù)的第二個(gè)參數(shù)“SUBTOTAL(9,OFFSET(B$1,,,ROW($1:$21)))”,在本例中產(chǎn)生一個(gè)對(duì)B列數(shù)字進(jìn)行累加的內(nèi)存數(shù)組“{0;2;3;8;10;13;22;29;31;37;44;46;56;59;69;72;75;85;94;97;99}”,第三個(gè)參數(shù)為“1”,MATCH函數(shù)會(huì)查找小于或等于第一個(gè)參數(shù)的最大值,并返回其在數(shù)組中的相對(duì)位置,即A2:A21區(qū)域中的相對(duì)行號(hào)。例如對(duì)于D17單元格,MATCH函數(shù)的第一個(gè)參數(shù)“ROW
5、(A16)-1”返回15,數(shù)組中小于等于15的最大值為13,13處于數(shù)組中的第6個(gè)位置,MATCH函數(shù)返回6,公式返回A2:A21區(qū)域中的第6行數(shù)據(jù),即編號(hào)“JGN347”。如果數(shù)據(jù)量較大,用下面的VBA代碼較為快捷。按Alt+F11,打開(kāi)VBA編輯器,在代碼窗口中粘貼下列代碼并運(yùn)行即可。Sub按指定次數(shù)重復(fù)數(shù)據(jù)()DimRng,Arr()DimiAsInteger,jAsInteger,kAsIntegerDimLastRowAsInteger,TotalAsIntegerLastRow=[A65536].End(xlUp
6、).RowTotal=(Range(“B2:B”&LastRow))Rng=Range(“A1:B”&LastRow)ReDimArr(1ToTotal,1To1)Fori=2ToUBound(Rng,1)Forj=1ToRng(i,2)k=k+1Arr(k,1)=Rng(i,1)NextNextRange(“D2”).Resize(k,1).Value=ArrEndSub