PHẦN MỞ ĐẦU Microsoft excel là một công cụ mạnh dùng trong việc phân tích trình bày các thông tin. Thế mạnh của bảng tính excel, ngoài các công thức sẵn có, còn là macro của nó. Kể từ khi xuất hiện version 5.0 đến nay, ngôn ngữ dùng trong excel là Visual Basic for Applications (VBA). Đó là ngôn ngữ lập trình dùng chung cho nhiều phần mềm trong windows. Quyễn ghi chép này sẽ nhằm giới thiệu cách thức làm quen với macro, và cách thức tuần tự chinh phục ngôn ngữ VBA trong excel. Bài 1: Những macro đơn giản nhất 1. Bộ thu macro Ngôn ngữ macro là một ngôn ngữ lập trình thật sự. Nhưng mặt trái của sự mạnh mẽ này là làm cho ta không dễ đọc hiểu ngay được. Để bước đầu làm quen với nó ta nhờ bộ thu macro, bộ thu này luôn có sẵn trong excel. Nó giúp bạn tạo ra những tác phẩm đầu tay và rất thực tế. Để rồi sau đó ta sẽ tạo ra những macro phức tạp, thực hiện những công việc theo sở thích của bạn 2. Tạo macro đầu tay Khi thực hành với excel, chúng ta đôi lúc cũng phải định dạng dẫy ô nào đó. Muốn dẫy biểu thị dạng tiền VNĐ không có số lẽ, ta chọn dãy ô; vô menu Format > Cells; >Number ta chọn Currency trong hộp thoại Category; trong hộp Decimal places ta chọn giá trị 0; trong hộp Symbol ta chọn None; cuối cùng trong hộp Negative numbers ta chọn hàng thứ ba (đang là (1.2340)) và nhấp vô nút OK để trở về trang tính Excel mặc định dạng thức tiền có hai số lẽ. Trong thực tế nhiều khi không cần nhiều số lẽ đến vậy. Chúng ta tạo một macro để định dạng ô theo kiểu tiền không có số lẽ.
PHẦN MỞ ĐẦU Microsoft excel cơng cụ mạnh dùng việc phân tích & trình bày thơng tin Thế mạnh bảng tính excel, ngồi cơng thức sẵn có, macro Kể từ xuất version 5.0 đến nay, ngôn ngữ dùng excel Visual Basic for Applications (VBA) Đó ngơn ngữ lập trình dùng chung cho nhiều phần mềm windows Quyễn ghi chép nhằm giới thiệu cách thức làm quen với macro, cách thức chinh phục ngôn ngữ VBA excel Bài 1: Những macro đơn giản Bộ thu macro Ngôn ngữ macro ngôn ngữ lập trình thật Nhưng mặt trái mạnh mẽ làm cho ta không dễ đọc & hiểu Để bước đầu làm quen với ta nhờ thu macro, thu ln có sẵn excel Nó giúp bạn tạo tác phẩm đầu tay thực tế Để sau ta tạo macro phức tạp, thực cơng việc theo sở thích bạn! Tạo macro đầu tay Khi thực hành với excel, đôi lúc phải định dạng dẫy ô Muốn dẫy biểu thị dạng tiền VNĐ khơng có số lẽ, ta chọn dãy ô; vô menu Format -> Cells; ->Number ta chọn Currency hộp thoại Category; hộp Decimal places ta chọn giá trị 0; hộp Symbol ta chọn None; cuối hộp Negative numbers ta chọn hàng thứ ba (đang (1.2340)) nhấp vơ nút OK để trở trang tính Excel mặc định dạng thức tiền có hai số lẽ Trong thực tế nhiều không cần nhiều số lẽ đến vậy! Chúng ta tạo macro để định dạng ô theo kiểu tiền khơng có số lẽ a./ Chuẩn bị: Ta quét chọn ô từ A2 đến A9; bấn chuột lên công thức nhập hàm sau: = INT(9 * RAND()) ^ kết thúc tổ hợp hai fím CTRL+ENTER b./ Tạo macro Vơ menu Tool -> Macro ->Record New Macro .; cửa sổ New Macro xuất hiên; Trong hộp Macro Name ta nhập FormatCurrency nhấp nút OK Trên hình thêm thành phần Toolbar macro Chúng ta bắt đầu thực việc ghi vô thu macro: (Với ô A2:A9 chọn), vô menu Format -> Cells chọn ngăn Number; Tiếp theo chọn Currency hộp thoại Category; hộp Decimal places ta chọn giá trị 0; hộp Symbol ta chọn None; cuối hộp Negative numbers ta chọn hàng thứ ba (đang (1.2340)) nhấp vô nút OK để trở trang tính Kết thúc ghi macro cách nhấp vơ nút close Toolbar macro vừa xuất Chú ý: Một số thao tác có nhiều cách để đạt được; thí dụ tổ hợp phím CTRL +1 nhanh chóng đưa ta đến hộp thoại Format Cells; Ta kết thúc ghi macro chọn menu Tool -> macro -> Stop Recording; Trong phần ghi chép ghi cách thức (còn cách khác ta tự áp dụng) Tác phẩm đầu tay xong; Chúng ta nóng ruột muốn biết đứa tinh thần hình hài & chạy nhảy nào! Để xem hình hài ta vô menu Tool -> Macro; danh sách liệt kê tên mà ta ấn định: FormatCurrency; Nội dung sau: Code: Sub FormatCurrency() ' FormatCurrency Macro ' Macro recorded 10/10/2006 by Quai Dang ' Selection.NumberFormat = "#,##0_);(#,##0)" End Sub Thực có ba dòng lệnh macro quan trọng thơi; dòng có dấu nháy đầu dòng ghi chú, nhắc fút chào đời như: tên, tuổi , fím nóng để vận hành c./ Chạy macro Để biết đứng ta quét chọn vài liệu số trang tính; vơ menu Tool -> Macro -> Macros; chọn tên macro ấn nút Run d./ Gán tổ hợp phím tắt cho macro Vô menu Tool -> Macro -> Macros; cửa sổ Macro xuất trở lại; Phía phải cửa sơ (CS), ngồi nút Run quen, có nút khác mà ta dần làm quen Và nút ta làm quen Option; Ta nhấp vơ để lên CS Macro Option; Ta bấm chuột vô ô Shortcut key; ấn giữ phím Shift nhấn tiếp phím 'F' (Như ta gán cho macro FormatCurrency tổ hợp fím CTRL+SHIFT+F Chú ý: Tất nhiên ta khơng giữ fím Shift; việc lợi bất cập hại dễ gây xung đột! Chú ý: Ta gán tổ hợp phím nóng từ đầu, sau đặt tên: Khi ta thấy CS Shortcut key hộp thoại Record Macro Macro thay đổi nhiều thuộc tính a./ Chuẩn bị: Nhập vô ô B2 chuỗi sau: 'Tổng hợp số liệu tháng 10/06' Chọn ô B2 này; b./ Thu macro: Vô menu Tool -> Macro ->Macros Trong CS Macro name nhập tên: 'DinhDangTieuDe'; Trong CS Shortcut key ta giữ phím Shift & nhấn phím 'D' nhấn nút OK để ghi macro Khi ô B2 chọn, vô menu Format -> Cells .Tiếp theo vô ngăn Aligment; Trong CS Text aligment ta chọn hai CS Horizontal & Vertical Center; Sau ấn nút OK để trở trang tính; Ta qt chọn từ B2 đến F2; Sau nhấp vô nút Merge and Center để tiêu đề canh ô liệt kê Kết thúc việc ghi macro DinhDangTieuDe cách nêu Để xem nội dung macro ta nhấn đồng thời hai phím ALT + F6 để mở CS Macro chọn tên DinhDangTieuDe; xong ấn chọn nút Edit để hình Microsoft Visual Basic có chứa đoạn code sau: Code: Sub DinhDangTieuDe() ' ' DinhDangTieuDe Macro ' Macro recorded 10/10/2006 by Quang Duc ' Keyboard Shortcut: Ctrl+Shift+D Range("B2").Select With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter .WrapText = False Orientation = AddIndent = False IndentLevel = ShrinkToFit = False ReadingOrder = xlContext MergeCells = False End With Range("B2:F2").Select With Selection HorizontalAlignment = xlCenter WrapText = False Orientation = AddIndent = False IndentLevel = ShrinkToFit = False ReadingOrder = xlContext MergeCells = False End With Selection.Merge End Sub Cái macro trước thực tế có dòng lệnh; macro nhiều dòng lệnh c./ Bước đầu tác động lên macro: Trước tiên , ta biết dòng có dấu nháy đơn đầu dòng dòng thích; ta bỏ hẵn dòng (Chỉ để dòng ' Keyboard Shortcut: Ctrl+Shift+D) Nhưng cắt dán sau dấu ngoặc đơn; dòng Sub DinhDangTieuDe() Ta vơ menu Debug chọn Compile VBAProject; Nếu khơng thấy CS thơng báo lỗi ta biết VBA chấp nhận thay đổi (chứng tỏ khơng có lỗi biên dịch.) Hơn ta lại biết thêm rằng, thích sau câu lệnh, miễn trước có dấu nháy đơn; Tiếp theo ta thực đánh số vơ dòng lệnh sau mạnh dạn bỏ dòng lệnh từ đến 11 Ta lại thực kiểm lỗi biên dịch nhờ menu Debug nêu trên; Nếu không báo lỗi nào, ta yên tâm bấm nút lưu lại Tiếp bước xa hơn, ta đặt dấu nháy trước số dòng lệnh từ 14 đến 23 Tức ta vơ hiệu dòng lệnh cách tạm thời; Thực phép thử macro lần cuối, sau: Xố ngun dòng chứa định dạng mà macro thực hiện; Nhập dòng khác thay (VD: 'BÁO CÁO TÌNH HÌNH THÁNG TRƯỚC.' thử chạy macro DinhDanhTieuDe; Nếu làm việc theo lúc chưa sửa kê! Code: Sub DinhDangTieuDe() ' Keyboard Shortcut: Ctrl+Shift+D Range("B2").Select With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter 12 End With 13 Range("B2:F2").Select 14 With Selection 15 HorizontalAlignment = xlCenter 16 WrapText = False 17 Orientation = 18 AddIndent = False 19 IndentLevel = 20 ShrinkToFit = False 21 ReadingOrder = xlContext 22 MergeCells = False 23 End With 24 Selection.Merge End Sub Như vậy, macro là: Code: Sub DinhDangTieuDe() ' Keyboard Shortcut: Ctrl+Shift+D Range("B2").Select With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter End With Range("B2:F2").Select Selection.Merge End Sub d./ Đọc & diễn dịch nội dung câu lệnh: Macro Sub (tạm hiểu từ viết tắt Subroutine); & dòng cuối macro End Sub; Macro ln có tên, (VD ta có DinhDangTieuDe & FormatCurrency); Hơn tên phải tuân thủ quy luật nghiêm: Không gồm khoảng trắng, không ký số đầu tên ( việc VBA truyền đạt cho bạn rõ, bạn không tuân thủ!) Macro DinhDangTieuDe thực làm hai công việc: - Chọn ô B2 & định dạng canh theo chiều ngang & chiều dọc; - Canh đoạn văn toàn "B2:F2" Vì lý đó, viết hai dòng lệnh hàng, phải cách dấu hai chấm ':' Range("B2:F2").Select: Selection.Merge Ngược lại, với câu lệnh dài, bố trí nhiều dòng; lúc dấu ngang '_' nhập cuối dòng để báo cho VBA biết dòng lệnh dòng Ta xem xét đến ví dụ macro dùng để xếp danh sách theo tên ("C1"), sau Code: Sub SortByName() Columns("A:C").Select Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Key2:=Range("A1") _ , Order2:=xlAscending, Key3:=Range("B1"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _ xlSortNormal End Sub Như vậy, câu lệnh thứ hai macro trãi dài qua dòng & nối kết với dấu gạch (chú ý có khoảng trắng trước nó) Câu lệnh hiểu sau: Tại ba cột A-C chọn (ở câu lệnh trước đó), xếp theo hướng tăng dần giá trị cột C; Tiếp theo xếp theo thứ tự tăng dần giá trị cột A; Và cuối xếp theo cột B theo chiều tăng dần ; Bài tập 1: + Tạo macro để xố trang bảng tính (sheet tab): Thường nằm cuộn ngang, Ta vô menu Tool-> Option -> View bỏ chọn hộp Sheet Tabs + Chuyển công thức thành giá trị: Tại trang tính để chuẩn bị ghi macro ta có cơng thức = INT(9 * RAND()) ^ ô cột A; Bạn thử lập macro chuyển ô từ A2 đến A9 thành giá trị! + Tại cột D, D1, D2 ta nhập tương ứng & Tại cột E kế bên ta nhập & 4; Tại cột F ta nhập F1 36; F2 100 Hãy tạo macro để thực hiên hành động sau: Chọn vùng từ D1:F2; vơ menu Edit -> Copy; Sau chọn D4 vô menu Edit -> Paste Special; CS Paste Special ta đánh dấu hộp kiểm Transpose; sau dán xong ta nhấn phím ESC để bỏ vùng chọn + Tại trang bảng tính VD 3; thiết lập macro ghi lại hành động sau: Chọn ô A1, vô menu Edit -> Go to; Trong hộp thoại Bài đọc thêm Xem ... xlCenter 12 End With 13 Range("B2:F2").Select 14 With Selection 15 HorizontalAlignment = xlCenter 16 WrapText = False 17 Orientation = 18 AddIndent = False 19 IndentLevel = 20 ShrinkToFit = False 21. .. báo cho VBA biết dòng lệnh dòng Ta xem xét đến ví dụ macro dùng để xếp danh sách theo tên ("C1"), sau Code: Sub SortByName() Columns("A:C").Select Selection.Sort Key1:=Range("C1"), Order1:=xlAscending,... Key2:=Range("A1") _ , Order2:=xlAscending, Key3:=Range("B1"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom: =1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal,