Excel VBA 實例(22)

今天說的這個vba實例還是和學校有關。

需求

情況是這樣的,這裡有一張學校所有班級的總成績表,簡化如下圖:

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

能否實現一鍵把各個班級的成績篩選出來,顯示在“班級成績表”當中,如下圖:

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

也就是實現這樣的效果,點擊“3班”,就出現3班所有同學的成績:

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

這樣的話,各個班級的老師只需要鼠標一點就可以查看到自己班級的成績,並且完全不會對原數據產生損壞。

大體思路

1、設計一個下拉菜單,裡面含有所有的班級名。


2、編寫vba事件,一旦班級名發生變化,則進行篩選。
3、編寫篩選vba代碼。

具體步驟

1、設計下拉菜單。這個比較簡單,選中要設計下拉菜單的單元格,數據 - 數據驗證,彈出的窗口選擇序列,來源把所有班級都加入(注意:班級直接用逗號隔開,要用英文輸入法下的逗號),如下圖:

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

2、編寫vba事件。這個需要選擇worksheet的change事件,如下圖:

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

下拉菜單改變的是B3單元格,一旦檢測到B3單元格的內容發生變化,則做出篩選相應班級的成績的動作,也就是下面的"call 班級"代碼(調用班級函數)。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$3" Then
Call 班級

End If
End Sub

3、編寫篩選vba代碼,即上面"call 班級"代碼中的“班級”函數,如下:

Public Sub 班級()
Sheets("班級成績").Select
'1.刪除舊資料
Range("A6:C15").ClearContents
'1.輸出的列數
k = 6
'2.循環判斷
For i = 2 To 10
If Sheets("總成績").Cells(i, "A") = Range("B3") Then
Cells(k, "A") = Sheets("總成績").Cells(i, "B")
Cells(k, "B") = Sheets("總成績").Cells(i, "C")
Cells(k, "C") = Sheets("總成績").Cells(i, "D")
k = k + 1
End If
Next
End Sub

新建模塊,將代碼保存進去即可。

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

大功告成!

另外,這個實例所有數據在同一個worksheet中,其實如果數據在不同的worksheet當中也基本是一樣的操作,只是代碼部分需要加上數據所在的worksheet即可。

如果你在操作過程中有疑問,歡迎來交流。源文件準備好,需要的話再後臺回覆「一鍵篩選」即可。

如果你覺得文章還不錯,請大家點個好看、分享一下。你的肯定是我最大的鼓勵和支持。

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據

Excel vba 實例(21) - 如何快速準確錄入數據

Excel vba 實例(20) - 一鍵填充每月員工拜訪地區

Excel vba 實例(19) - 一鍵彙總不完全相同的sheet到總表

Excel vba 實例(18) - 一鍵將單列長數據平均拆成多列

收藏 | 17個Excel vba實例彙總

Excel vba 實例(17) - 遍歷多個工作簿並提取內容到總表

Excel vba 實例(16) - 按指定字段分類批量提取內容

Excel VBA 實例(22) - 一鍵篩選其他工作表或工作簿的數據


分享到:


相關文章: