Presentation is loading. Please wait.

Presentation is loading. Please wait.

Excel 簡易實用巨集設計 巨集的錄製與執行 VBA與VB編輯器 流程控制基本指令 應用巨集程式範例

Similar presentations


Presentation on theme: "Excel 簡易實用巨集設計 巨集的錄製與執行 VBA與VB編輯器 流程控制基本指令 應用巨集程式範例"— Presentation transcript:

1 Excel 簡易實用巨集設計 巨集的錄製與執行 VBA與VB編輯器 流程控制基本指令 應用巨集程式範例 1 3 4 2
台大計資中心 教學組 林淑芬

2 一. 何謂巨集(Macro)? 巨集(Macro)是將許多命令或操作過程記錄下來,彙總成單一按鈕動作或巨集指令以後只要呼叫此巨集,即可完成所有設定的命令或操作 巨集適合應用於重複性很高的操作,將重複性的操作錄製成巨集,可簡化操作過程 巨集是存放在Visual Basic模組中的一連串指令和函數

3 錄製新巨集

4 定義巨集名稱及快速鍵

5 相對參照與絕對參照

6 錄製完畢

7 執行巨集的方式 從巨集視窗中執行 利用巨集的快速鍵執行 製作巨集按鈕 設計文字藝術師按鈕 在工具列上設定巨集按鈕

8 從巨集視窗中執行

9 利用巨集的快速鍵執行

10 檢視表單工具列-選擇按鈕指令

11 為文字藝術師按鈕指定巨集

12 在工具列上設定巨集按鈕

13 將自訂按鈕拖移至工具列上

14 二.何謂VBA? VBA(Visual Basic for Application)係專門應用於Office中的程式語法,其主要架構及語法都與Visual Basic 相似 VB所發展的程式可一單獨在作業系統中執行, 而VBA則是為Excel、Access等 Office成員所量身訂做的語言工具

15 VB編輯器

16 錄製巨集所產生的VBA程式

17 新增VBA程式模組

18 VBA可用的資料型態 整數 Integer- 2Bytes 長整數 Long- 4Bytes 單精準浮點數 Single- 4Bytes
倍精準浮點數 Double - 8Bytes 金額數值型態 Currency - 8Bytes 字串 String 位元組 Byte - 1Bytes 日期 Date 邏輯 Boolean 任何型別 Variant - 16Bytes

19 三. 程式流程控制基本指令 選擇結構 迴圈結構 強迫跳離陳述式 Exit for Exit do If… Then…End If
If… Then…Else…End If Select Case…End Select 迴圈結構 For…Next For Each…In…Next Do…Loop 強迫跳離陳述式 Exit for Exit do

20 If… Then…End If If 條件式 Then ….{條件式為True} End If

21 If… Then…Else…End If If 條件式 Then ….{條件式為True} Else ….{條件式為False}

22 For…Next迴圈 For 計次變數=起始值 To 終止值 (Step間隔值) …… Next 計次變數

23 Do…Loop陳述式 Do While|Until 條件式 …. Loop Do Loop While|Until 條件式

24 NO Score 1 2 * 3 4 5 6 7 8 9 10

25 Sub redline() Dim I As Integer I = 1 Worksheets(1).Select AA = Range("A" & I).Value Do While AA <> "" If I Mod 2 <> 0 Then Rows(I).Interior.ColorIndex = 3 End If I = I + 1 Loop End Sub

26 Sub delstar() Dim I As Integer I = 1 Worksheets(1).Select AA = Range("A" & I).Value Do While AA <> "" If Range("B" & I).Value = "*" Then Rows(I).Delete Else I = I + 1 End If Loop End Sub

27 ID Name Address TEL A Alex A Test A A Good A Tom A A A

28 兩個key都相同才刪 需先排序兩個key Sub delsame() Dim I As Integer I = 2 Worksheets(2).Select AA = Range("A" & I).Value BB = Range("B" & I).Value I = I + 1 Do While AA <> "" If Range("A" & I).Value = AA And Range("B" & I).Value = BB Then Rows(I).Delete Else End If Loop End Sub

29 計算key不重複的有幾筆 需先排序 Sub countunique() Dim I, count As Integer I = 2 count = 0 Worksheets(1).Select AA = Range("A" & I).Value I = I + 1 Do While AA <> "" If Range("A" & I).Value <> AA Then count = count + 1 End If Loop Range("M1").Value = count End Sub

30 多頁的明細資料匯總成一頁總表 Sub ALL() Dim i, j As Integer Dim sh As String i = 5 'Row beginning in TOTAL sheet For N = 1 To 5 'You must enter how many Sheet? sh = "sheet" & N Worksheets(sh).Select Value1 = Range("G2").Value Value2 = Range("D2").Value Value3 = Range("L2").Value Worksheets("TOTAL").Select ' TOTAL sheet Range("A" & i).Value = N Range("B" & i).Value = Value1 Range("C" & i).Value = Value2 Range("D" & i).Value = Value3 i = i + 1 Next End Sub

31 以Cells(i, j)將sheet表示為二維矩陣

32 矩陣相乘的程式碼 Sub Array_Mult() Dim i, j, k, temp As Integer
Worksheets(1).Select For k = 1 To 3 For i = 1 To 3 temp= 0 For j = 1 To 2 temp = temp + (Cells(i + 2, j + 1) * Cells(j + 2, 4 + k)) Next j Cells(6 + i, k + 1) = temp Next i Next k End Sub

33 ChartNo ItemName Value1 ALB 4.7 Alpha-Fetoprotein 3.60 ALT 34 Anti-HBs Non-reactive(0.0) Anti-Hepatitis C Virus Non-reactive(0.05) AST 28 Aty.Lym. Bacteria - 14 Non-reactive(0.06) 13

34 較複雜的例子: 一個人多筆項目資料合併成一筆
chartno ALB Alpha- Fetoprotein ALT Anti-HBs Anti-Hepatitis C Virus Anti-HIV screening(EIA) 4.7 3.60 34 Non-reactive(0.0) Non-reactive(0.05) 4.4 14 Non-reactive(0.06) 13 Reactive(84.61) Non-reactive(0.16) 4.6 16 Reactive(90.64)

35 Sub Rearrange() Dim I, J, M, N As Integer I = 2 ' row number of sheet 1 M = 1 ' row number of sheet 2 N = 1 ' column number of sheet 2 Worksheets(1).Select ' original sheet the first record oldID = "" ID = Range("A" & I).Value Item = Range("B" & I).Value Value1 = Range("C" & I).Value Do While ID <> "" Worksheets(2).Select ' new sheet N = 1 If ID = oldID Then 'the same person Do While Item <> Cells(1, N) 'check the item equal or not N = N + 1 ' not equal, then next column Loop Cells(M, N) = Value1 ' equal item, write it

36 Else 'next person M = M + 1 ' write a new record to new sheet Cells(M, N) = ID Do While Item <> Cells(1, N) N = N + 1 Loop Cells(M, N) = Value1 End If Worksheets(1).Select 'original sheet get next record oldID = ID I = I + 1 ID = Range("A" & I).Value Item = Range("B" & I).Value Value1 = Range("C" & I).Value End Sub


Download ppt "Excel 簡易實用巨集設計 巨集的錄製與執行 VBA與VB編輯器 流程控制基本指令 應用巨集程式範例"

Similar presentations


Ads by Google