今天分享的一個實例是:按指定字段分類批量提取內(nèi)容缓艳。
問題描述
這個是之前幫一個網(wǎng)友朋友解決的問題馆衔,可能其他朋友也會有相同的需求修己。
也不知道概況的是否準確给郊,參考下面這個例子吧:
因為是作為實例講解,故簡單化了一下路捧,數(shù)據(jù)只截取了一小部分关霸。實際數(shù)據(jù)可能會有幾百上千條传黄。
如上圖所示杰扫,要求把表一中相同單據(jù)號的內(nèi)容都填入表二當中,最后的效果就是單據(jù)尾號004的一行信息填一張表膘掰,005的兩條信息及006的三條信息各填一張表章姓。
下面是效果圖
思路
1、對單據(jù)號做個簡單的排序识埋,無論是按升序或者降序排列都可以凡伊,目的就是把相同單號的排在一起,方便做后續(xù)的處理窒舟。這一步是手工操作即可系忙。
2、VBA程序的思路:每條信息都循環(huán)一遍惠豺,從最后一條開始银还,如果當前信息與上一條相同,則把該條信息復制到表二中去洁墙;如果當前信息與上一條不相同蛹疯,則復制該條信息到
表二,把單號填入到表二的表頭热监,然后保存文件捺弦。
核心代碼如下:
????????If?Cells(i,?Col)?<>?Cells(i?-?1,?Col)?Then?'如果和上一行單據(jù)號不一樣了
????????????Range("D"?&?i?&?":I"?&?i).Copy?Sheet2.Range("A"?&?count)?'復制當前單據(jù)號及內(nèi)容到出單表
????????????Range("B"?&?i).Copy
????????????Sheet2.Range("B2").PasteSpecial?xlPasteValues?'填寫好單號
????????????'保存出單表,名字為單據(jù)號
????????????Sheet2.Copy
????????????ActiveWorkbook.SaveAs?Filename:=MyBook.Path?&?"\"?&?Range("B"?&?i),?FileFormat:=xlNormal?????'將工作簿另存為EXCEL默認格式
????????????ActiveWorkbook.Close
????????????Sheet2.Range("A5:F31").ClearContents
????????????Sheet2.Range("B2").ClearContents
????????????count?=?5
????????ElseIf?Cells(i,?Col)?=?Cells(i?-?1,?Col)?Then?'如果下一行單據(jù)號和上一行一樣
????????????Range("D"?&?i?&?":I"?&?i).Copy?Sheet2.Range("A"?&?count)?'復制當前單據(jù)號及內(nèi)容到出單表
????????????count?=?count?+?1
效果演示
測試了一下孝扛,那位朋友的約700條記錄列吼,大約2-3分鐘就可以搞定,非常的省事苦始。
如果需要源文件的話寞钥,wx公號后臺回復「實例16」即可。
如果還有其他需要定制化的功能盈简,也可以聯(lián)系我凑耻。
歡迎交流太示!