教你快速入門Excel-宏與VBA(下)

    上一篇博客《教你快速入門Excel-宏與VBA(上)》,我們主要對Excel宏與VBA進行了簡單的介紹和使用說明,這次我們做一個宏與VBA的簡單實例,通過這個實例,瞭解宏與VBA的優勢所在,在此之前,讀者有必要了解一下Excel中單元格,行和列的命名和VB的一些基礎語法,這裏我們不做過多的解釋。  

需求說明:

    某學校要進行體育測試,需要根據輸入的成績,自動對應得分,同時自動計算總分,具體表如下:

表一

表二


解決方案:

    在表一中輸入成績,自動在表二中查找,該成績所對應的分數,比如圖中張偉的《負重深蹲(次)》項目成績是40,那麼通過查詢表二,她的得分應該是97,同時張偉的《負重深蹲(次)》項目得分自動更新爲97,對應總分更新爲97;

    該問題解決依賴簡單的錄製宏不好實現,這裏我們使用VBA編寫代碼:

模塊代碼:

    點擊單元格獲取成績:

'點擊時,獲取成績
Public Sub CellsClick(ByVal Target As Range)

    '選擇有效表格的區域,否則跳過
    If Target.Column < 4 Or Target.Row < 5 Or Target.Column > ActiveSheet.UsedRange.Columns.Count - 1 Or Target.Row > ActiveSheet.UsedRange.Rows.Count Then
        Exit Sub
    End If
    
    Dim selectedCol As Integer
    Dim j As Integer
    Dim isUpdate As Boolean
    
    selectedCol = (Target.Column - 4) \ 2 + 2  '獲取 表二 中對應列號

    '行循環
    For j = 2 To Worksheets("表二").UsedRange.Columns.Count Step 1
        If Cells(Target.Row, Target.Column).Value <> "" And Cells(Target.Row, Target.Column).Value = Worksheets("表二").Cells(j, selectedCol).Value Then
            'MsgBox "你選中了:" & Worksheets("表二").Cells(j, selectedCol).Value & "得分" & Worksheets("表二").Cells(j, 1).Value
            Cells(Target.Row, Target.Column + 1).Value = Worksheets("表二").Cells(j, 1).Value
            isUpdate = True
        End If
    Next
    If Not isUpdate Then
        Cells(Target.Row, Target.Column + 1).Value = ""
    End If
    
     '列循環,自動求和
    Dim sum As Double
     sum = 0
    For j = 5 To ActiveSheet.UsedRange.Columns.Count - 3 Step 2
        sum = sum + Val(Cells(Target.Row, j).Value)
    Next
    Cells(Target.Row, ActiveSheet.UsedRange.Columns.Count - 1).Value = sum
End Sub

    宏函數:激活時,自動獲取全部成績,也可用於填寫成績自動獲得得分,但是由於每次都要激活全部單元格進行刷新,所有如果用此方法解決,則會產生Excel反應慢或是半天沒有反應的情況,所以該方法只對應到得分按鈕即可,即得分按鈕指定宏爲Worksheet_Activate!

'激活時,自動獲取全部成績
Public Sub WorksheetActivate()

    Dim selectedCol As Integer
    Dim r As Integer
    Dim c As Integer
    Dim j As Integer
    Dim isUpdate As Boolean
    
    '行循環
    For r = 5 To ActiveSheet.UsedRange.Rows.Count

       '列循環
       For c = 4 To ActiveSheet.UsedRange.Columns.Count - 1 Step 2
            isUpdate = False
            selectedCol = (c - 4) \ 2 + 2 '獲取 表二 中對應列號
            For j = 2 To Worksheets("U15-16女附").UsedRange.Rows.Count
                If Cells(r, c).Value <> "" And Cells(r, c).Value = Worksheets("表二").Cells(j, selectedCol).Value Then
                    Cells(r, c + 1).Value = Worksheets("表二").Cells(j, 1).Value
                    isUpdate = True
                End If
            Next
            
            '如果沒有更新,值爲""
            If Not isUpdate Then
                Cells(r, c + 1).Value = ""
            End If
       Next
    Next
End Sub

 

表一代碼:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row = Selection.Row - 1 And Target.Column = Selection.Column Or Target.Row = Selection.Row And Target.Column = Selection.Column - 1 Then
    '修改立即獲取成績
    CellsClick Target
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '點擊時獲取成績
    CellsClick Target
End Sub


    至此,簡單的宏和VBA實例已經講完了,複雜的問題簡單化了吧!所以當你遇到在Excel中需要不斷重複一些操作時,就應該考慮使用宏和VBA來解決了,非常方便,更重要的是節省時間呀!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章