這兩天幫后臺(tái)伙伴解決了一個(gè)excel的問題,感覺普遍性比較大刹帕,和各位分享一下渊涝。
問題需求
這位伙伴應(yīng)該是在公司里干采購的,經(jīng)常要在excel表里記錄非常多的采購信息砍鸠,包括采購產(chǎn)品扩氢、型號耕驰、時(shí)間爷辱、價(jià)格等等,如下圖:
她的需求:1、輸入產(chǎn)品的采購編碼饭弓,一點(diǎn)擊按鈕双饥,采購的記錄就全部篩選出來;2弟断、篩選出來的記錄中咏花,再選出價(jià)格最小的記錄。
這個(gè)需求阀趴,其實(shí)直接通過“數(shù)據(jù)”-“篩選”-選中需要的編碼即可昏翰。
但是數(shù)據(jù)量大、經(jīng)常要操作的的時(shí)候刘急,如果每個(gè)產(chǎn)品采購編碼都要去這樣操作一遍棚菊,然后再篩選,復(fù)制叔汁,粘貼统求,確實(shí)很占用時(shí)間。
所以才會(huì)考慮用VBA來解決這個(gè)問題据块。
需求分析
假設(shè)存放數(shù)據(jù)記錄的表格稱sheet1码邻,篩選出來的記錄放在sheet2,思路其實(shí)也簡單:1另假、在sheet1中每一行都檢查一遍像屋,符合條件的編碼就把這條記錄復(fù)制到sheet2中;2边篮、sheet1全部檢查完之后开睡,開始在sheet2中檢查價(jià)格一欄,選出最小價(jià)格苟耻,將改行的記錄再篩選出來即可篇恒。
說起來簡單,需要攢代碼的時(shí)候凶杖,就要格外的細(xì)心和仔細(xì)胁艰。
這里把其中主要涉及到的問題細(xì)節(jié)詳細(xì)說一下:
1、如何檢查每一行智蝠?
這個(gè)簡單腾么,標(biāo)記好開頭和結(jié)束位置,然后設(shè)置循環(huán)杈湾。例如解虱,有多少行就循環(huán)幾次。
a?=?Sheet1.[A65536].End(xlUp).Row?'結(jié)束行
First?=?2?'開始行
Last?=?a?
For?i?=?Last?To?First?Step?-1??'設(shè)置每一行檢查一次
......
Next
2漆撞、如何判斷編碼是否相同殴泰,然后復(fù)制于宙?
If?Sheet1.Cells(i,?1)?=?Sheet2.Cells(1,?12)?Then
'判斷Sheet1的編碼是否和sheet2中需要找的一樣
???Sheet1.Range(Sheet1.Cells(i,?1),?Sheet1.Cells(i,?9)).Copy?Sheet2.Cells(count,?1)
???'如果一樣,則整條記錄復(fù)制過去
???count?=?count?+?1?
???'sheet1中每找到一條記錄悍汛,就在Sheet2里添加一條
End?If
3捞魁、如何選出價(jià)格一欄中最小價(jià)格?
IF...
Set?rng?=?Range(Sheet2.Cells(First1,?7),?Sheet2.Cells(Last1,?7))
'選定價(jià)格區(qū)域
min?=?rng.Find(Application.min(rng))'價(jià)格最小值
min_row?=?rng.Find(Application.min(rng)).Row'價(jià)格最小值所在行
主要是上面三個(gè)問題离咐,組合起來用即可谱俭。
演示一下:
怎么樣,是否感覺非诚快捷省事昆著?
完整代碼有點(diǎn)多了,就不貼了术陶。有需要的話wx公號后臺(tái)回復(fù)“實(shí)例15”即可
不少人對VBA代碼有抵觸心理宣吱,其實(shí)沒有那么復(fù)雜,把他看成一個(gè)稍微復(fù)雜點(diǎn)的函數(shù)即可瞳别。
當(dāng)然如果并不打算深入學(xué)習(xí)VBA征候,只是臨時(shí)使用下,那只要會(huì)復(fù)制黏貼就好了祟敛!
至于怎么用VBA代碼疤坝,可以參考之前的文章:
Excel vba 實(shí)例(1) - 批量制作工資表頭
Excel vba 實(shí)例(2) - 批量將工作表拆分為單獨(dú)文件
Excel vba 實(shí)例(3) -?多個(gè)工作簿批量合并
Excel vba 實(shí)例(4) - 根據(jù)已有名稱,批量新建表格
Excel vba 實(shí)例(5) - 快速合并n多個(gè)相同值的單元格
Excel vba 實(shí)例(6) - 一鍵匯總多個(gè)sheet數(shù)據(jù)到總表
Excel vba 實(shí)例(7)-一鍵批量打印工作簿
Excel vba 實(shí)例(8)- 利用正則表達(dá)式進(jìn)行定向提取
Excel vba 實(shí)例(9)- 批量插入馆铁、刪除表格中的空行
Excel vba 實(shí)例(10)- 統(tǒng)計(jì)同一列中出現(xiàn)次數(shù)并標(biāo)注
Excel vba 實(shí)例(11)- 拆分單元格并自動(dòng)填充
Excel vba實(shí)例(12)-如何合并多個(gè)單元格而不丟失單元格的數(shù)據(jù)跑揉?
Excel vba實(shí)例(13) - 自動(dòng)生成序號、一鍵排版(列寬埠巨、行高自適應(yīng)等)
Excel VBA 實(shí)例(14) - 依據(jù)指定單元格的值历谍,復(fù)制并插入相同數(shù)量的行
歡迎交流!