EXCLE VBA 筆記

一、不同儲存位置的巨集:

類型

儲存位置

可使用巨集範圍

備註

個人巨集活頁簿

目前電腦

此電腦所有Excel檔案

其他電腦開啟檔案並無巨集

現用活頁簿

目前檔案

僅限於此檔案開啟時執行

可將檔案連同巨集寄出


VBA撰寫補助功能
  1. 如果想要加入開發的速度、節省時間,可以將滑鼠的游標放在要執行的副程式之內,然後按下執行的按鈕,這樣就可以馬上執行該副程式,在開發程式時會比較有效率。
  2. 在VBA 撰寫語法上,按下F1 會導向網頁,顯示語法說明

二、常用指令

'********Range 代表 Excel 目前開啟的工作表指定的儲存格********'

'來選取並操作儲存格

Sub RangeTest()

    'Range("B1") = 5 '給值

    'Range("E6").Value = 6 '給值

    'Range("A6:D6") = 3 '設定行範圍'

    Range("A1", "D5") = 4 '設定範圍

    'Range("D1_D7") = 2 '依定義名稱,給值

End Sub


'********Cells(row,col)代表 Excel 目前開啟的工作表指定的儲存格********'

'和Range 差不多,只不過它是使用行與列的編號來指定儲存格

Sub CellsTest()

    '將第一行第一列的儲存格內容指定為 23

    Cells(2, 4).Value = 23

    '如果要指定範圍,可以使用兩個 Cells 配合 Range

    Range(Cells(1, 1), Cells(4, 2)).Value = 13

    '選取指定範圍

    Range(Cells(1, 1), Cells(4, 2)).Select

    '選擇整個行

    Rows(4).Select

    '選擇整個列

    Columns(4).Select

End Sub


'********WorkSheets物件代表 Excel 目前開啟的工作表********'

Sub WorkSheetsTest()

    '刪除資除工作表

    Worksheets("Worksheet").Delete

    '增加工作表

    Worksheets.Add

    '命名工作表名稱

    Worksheets(1).Name = "Worksheet2"

    

    '在指定工作表上給值

    Worksheets("Worksheet").Range("A1").Value = "worksheets"

    Worksheets("Worksheet2").Range("A1").Value = "worksheets2"

    '跳窗,計算工作表總數量

    MsgBox Worksheets.Count

End Sub


'********Workbooks 物件代表 Excel 目前開啟的活頁簿********'

Sub WorkBooksTest()

    Dim workBooksName As String

    workBooksName = "C:\Users\fw1401\Documents\test.xlsx"

    WorkBooks.Open (workBooksName)

    MsgBox WorkBooks(2).Name

    MsgBox WorkBooks(2).Worksheets(1).Name

    '指定活頁簿→工作表→其儲存格內容設定

    WorkBooks(WorkBooks(2).Name).Worksheets(WorkBooks(2).Worksheets(1).Name).Range("A1").Value = "Hello"

    '儲存活頁簿

    WorkBooks(2).Save

    '將活頁簿另存新檔

    WorkBooks(2).SaveAs "C:\Users\fw1401\Documents\test2.xlsx"

    '指定當前活頁簿

    WorkBooks(2).Activate

    '關閉j指定活頁簿

    WorkBooks(2).Close

    '關閉所有的活頁簿

    WorkBooks.Close

    '若要關閉整個 Excel

    Application.Quit

End Sub

'********計算員工績效考核********'
Public Sub 計算成績等級()
    Dim row, count As Integer
    count = ActiveSheet.UsedRange.Rows.count
    For row = 2 To count
        If Cells(row, "D") < 60 Then
            Cells(row, "E").Value = "C"
            Cells(row, "F").Value = "無獎金"
        ElseIf Cells(row, "D") >= 60 And Cells(row, "D") < 79 Then
            Cells(row, "E").Value = "B"
            Cells(row, "F").Value = "一月獎金"
        ElseIf Cells(row, "D") >= 80 And Cells(row, "D") < 100 Then
            Cells(row, "E").Value = "A"
            Cells(row, "F").Value = "二月獎金"
        End If
    Next row
End Sub


三、空白行列刪除

Sub 刪除空白列範例()

    '取得目前列數

    Dim count As Integer

    count = ActiveSheet.UsedRange.Rows.count

'    MsgBox count

    '判斷列數第一行是否為空白,是則刪除

    For i = count To 1 Step -1

        If Cells(i, 1) = "" Then

            Rows(i).Delete

        End If

    Next i

End Sub

'另一種作法

Sub 刪除空白列()

    Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

四、匯總工作表

'匯總一到三月報表資料

Public Sub 工作表匯總2()

    Dim rowCount As Integer

    Dim JenCount, FebCount, MarCount, totalCount As Integer

    Dim mySheetName As String, mySheetNameTest As String

    mySheetName = "報表匯總" 

    '判斷工作表是否存在

    On Error Resume Next

    mySheetNameTest = Worksheets(mySheetName).Name       

    If (Err.Number = 0) Then

        Worksheets("報表匯總").Delete

    End If

       

    Worksheets.Add

    ActiveSheet.Name = "報表匯總"

    Worksheets("一月報表").UsedRange.Copy Worksheets("報表匯總").Cells(1, 1)

    JenCount = Worksheets("一月報表").UsedRange.Rows.Count

    

    rowCount = Worksheets("報表匯總").UsedRange.Rows.Count

       

    Worksheets("二月報表").UsedRange.Copy Worksheets("報表匯總").Cells(rowCount + 1, 1)

    FebCount = Worksheets("二月報表").UsedRange.Rows.Count - 1

    

    '刪除報表標頭

    Worksheets("報表匯總").Rows(rowCount + 1).Delete

        

    rowCount = Worksheets("報表匯總").UsedRange.Rows.Count

        

    Worksheets("三月報表").UsedRange.Copy Worksheets("報表匯總").Cells(rowCount + 1, 1)

    MarCount = Worksheets("三月報表").UsedRange.Rows.Count - 1

    

    Worksheets("報表匯總").Rows(rowCount + 1).Delete

    totalCount = JenCount + FebCount + MarCount

    MsgBox "Jen Count:" + CStr(JenCount) + ", Feb Count:" + CStr(FebCount) + ", Mar Count:" + CStr(MarCount) + ",Tatal count:" + CStr(totalCount)


End Sub


留言

這個網誌中的熱門文章

簽字筆 奇異筆 光碟筆 油漆筆 麥克筆 差別在哪

DC 常用指令

如何在 Excel 2010 中將數值設定成以「千」或「百萬」為單