這兩天幫後台夥伴解決了一個excel的問題,感覺普遍性比較大,和各位分享一下。
這位夥伴應該是在公司里干採購的,經常要在excel表裡記錄非常多的採購信息,包括採購產品、型號、時間、價格等等,如下圖:
她的需求:1、輸入產品的採購編碼,一點擊按鈕,採購的記錄就全部篩選出來;2、篩選出來的記錄中,再選出價格最小的記錄。
這個需求,其實直接通過「數據」-「篩選」-選中需要的編碼即可。
但是數據量大、經常要操作的的時候,如果每個產品採購編碼都要去這樣操作一遍,然後再篩選,複製,粘貼,確實很佔用時間。
所以才會考慮用VBA來解決這個問題。
假設存放數據記錄的表格稱sheet1,篩選出來的記錄放在sheet2,思路其實也簡單:1、在sheet1中每一行都檢查一遍,符合條件的編碼就把這條記錄複製到sheet2中;2、sheet1全部檢查完之後,開始在sheet2中檢查價格一欄,選出最小价格,將改行的記錄再篩選出來即可。
說起來簡單,需要攢代碼的時候,就要格外的細心和仔細。
這裡把其中主要涉及到的問題細節詳細說一下:
1、如何檢查每一行?
這個簡單,標記好開頭和結束位置,然後設置循環。例如,有多少行就循環幾次。
a = Sheet1.[A65536].End(xlUp).Row 結束行 First = 2 開始行 Last = a For i = Last To First Step -1 設置每一行檢查一次 ...... Next
2、如何判斷編碼是否相同,然後複製?
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) 如果一樣,則整條記錄複製過去 count = count + 1 sheet1中每找到一條記錄,就在Sheet2里添加一條 End If
3、如何選出價格一欄中最小价格?
IF... Set rng = Range(Sheet2.Cells(First1, 7), Sheet2.Cells(Last1, 7)) 選定價格區域 min = rng.Find(Application.min(rng))價格最小值 min_row = rng.Find(Application.min(rng)).Row價格最小值所在行
主要是上面三個問題,組合起來用即可。
演示一下:
怎麼樣,是否感覺非常快捷省事?
完整代碼有點多了,就不貼了。有需要的話wx公號後台回復「實例15」即可
不少人對VBA代碼有抵觸心理,其實沒有那麼複雜,把他看成一個稍微複雜點的函數即可。
當然如果並不打算深入學習VBA,只是臨時使用下,那隻要會複製黏貼就好了!
至於怎麼用VBA代碼,可以參考之前的文章:
Excel vba 實例(1) - 批量製作工資表頭
Excel vba 實例(2) - 批量將工作表拆分為單獨文件
Excel vba 實例(3) - 多個工作簿批量合併
Excel vba 實例(4) - 根據已有名稱,批量新建表格
Excel vba 實例(5) - 快速合併n多個相同值的單元格
Excel vba 實例(6) - 一鍵匯總多個sheet數據到總表
Excel vba 實例(7)-一鍵批量列印工作簿
Excel vba 實例(8)- 利用正則表達式進行定向提取
Excel vba 實例(9)- 批量插入、刪除表格中的空行
Excel vba 實例(10)- 統計同一列中出現次數並標註
Excel vba 實例(11)- 拆分單元格並自動填充
Excel vba實例(12)-如何合併多個單元格而不丟失單元格的數據?
Excel vba實例(13) - 自動生成序號、一鍵排版(列寬、行高自適應等)
Excel VBA 實例(14) - 依據指定單元格的值,複製並插入相同數量的行
歡迎交流!